Система контент-анализа естественно-языковых текстов
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
s) == null)
{(show) f.jTextArea3.append(word+"\n");();false;
}.backSearch(word, this);(this.listosnov != null){ leaf l; base = word.substring(0,word.length()-this.postosnov.length()+1);
Рисунок 22 -. Программная реализация класса MorphMain
(listosnov.getNextLevel() != null).listosnov.getNextLevel().CrawlforMM(d,base,listosnov.getUin());(listosnov.getFlagIn_MainWord()).insertElementAt(base, 0);
}{(show) f.jTextArea3.append(word+"\n"); f.jTextArea3.append(word+"\n");();false;
}();
}(Exception ex) {false;
}true;
}void LoadInOM()
{h1[] = null;h = null;{in = new BufferedReader(new FileReader(so.getPForms()));j = "ёйцукенгшщзхъэждлорпавыфячсмитьбю";+= j.toUpperCase();k,ik;d;= tf.getGraphics();.setFont(new Font("Courier New", Font.BOLD, 12));.setColor(Color.BLACK);.drawString("Инициализация интерфейса и загрузка словаря...", 8, tf.getHeight()-45);=0;(in.readLine() != null) k++;.jProgressBar1.setMaximum(k);= 1;= 0;.close();= new BufferedReader(new FileReader(so.getPForms()));((h = in.readLine()) != null )
{++;;
Рисунок 23 - Программная реализация класса MorphMain
for (int i = 0;i<h1.length;i++)= h.split(" ");[i]=h1[i].toLowerCase().trim().replace('ё', 'е');.addNewWord(h1[0],false, true,k);(int i = 1;i<h1.length;i++ )
{(!h1[i].equals("-")).addNewWord(h1[i],false, false,k);
}y;= selectOsn(h1);(!y.isEmpty()).addNewWord(y,true, false,k);.jProgressBar1.setValue(k);+=h1.length;++;
}lis;= new DefaultListModel();.Crawl1(lis, "",this);= new MainWindow();.jSlider1.setValue(so.getLimit());.LoadDictionary(this);.setVisible(false);.setVisible(true);
} catch (Exception ex) {.swing.JOptionPane.showMessageDialog(null, "Файл словаря не найден. Проверьте настройки.");.exit(0);.printStackTrace();
}
}
Рисунок 24 - Программная реализация класса MorphMain.
//массив символов алфавита и их параметровleaf alpha[];leaf[] getAlphabit()
{alpha;
}btree() {
// level = 0;();
}
//заполняет массив буквами русского алфавита...void fillAlphabit()
{
Рисунок 25 - Программная реализация класс Btree
= new leaf[32];i;= 0;(char l = 'а';l<='я';l++)
{[i] = new leaf();[i++].setLetter(l);
}
}static int getIndexbyLetter(char x)
{s;= -1;(x == 'ё') return getIndexbyLetter('е');(char h = 'а';h<=x;h++)++;s;
}static char getLetterByIndex(int i)
{s;= 'а'-1;(i 32) return s = ' ';(int j = 0;j<=i;j++)++;s;
}
//возвращет объект класса, который содержит последнюю букву искомого слова
//соответственно, если такое слово есть в словаре
//второй параметр - указание остановиться поиску, на очередном этапе
//если встретится признак основыleaf simpleSearch(String sw,boolean stop_on_base,MorphMain mm) throws Exception
{curr_add_let; //добавляемая в данный момент букваwatching_elem;//объект класса, содержащий эту буквуindex;//номер объекта в алфавитеh;//остаток строки, без первой буквыdown;//ниже следующий уровень дерева_add_let = sw.charAt(0);(curr_add_let== 'ё') curr_add_let = 'е';= getIndexbyLetter(curr_add_let);(index 32) throw new Exception("Такие буквы недопустимы -"+sw);{_elem = alpha[index];
Рисунок 26 - Программная реализация класс Btree(!watching_elem.getFlagIn_Use()) return null;(stop_on_base)(watching_elem.getFlagBase())
{.setCurrentBase(sw);watching_elem;
}(sw.length() == 1 )
{(watching_elem.getFlagEndWord()) return watching_elem;return null;
}
//иначе продолжим спуск
{
//отбросим первую букву= sw.substring(1);= watching_elem.getNextLevel();(down == null) return null;return watching_elem.getNextLevel().simpleSearch(h,stop_on_base,mm);
}
}
}void backSearch(String sw,MorphMain d) throws Exception
{curr_add_let; //добавляемая в данный момент букваwatching_elem;//объект класса, содержащий эту буквуindex;//номер объекта в алфавитеh;//остаток строки, без первой буквыdown;//ниже следующий уровень дерева(sw.isEmpty()) return;_add_let = sw.charAt(0);(curr_add_let== 'ё') curr_add_let = 'е';= getIndexbyLetter(curr_add_let);(index 32) throw new Exception("Такие буквы недопустимы -"+sw);{_elem = alpha[index];(watching_elem.getFlagIn_Use())
{(sw.length() != 1 )
{= sw.substring(1);= watching_elem.getNextLevel();(down != null)
Рисунок 27 - Программная реализация класс Btree
_elem.getNextLevel().backSearch(h,d);(watching_elem.getFlagBase())
{.setListOsnov(watching_elem);.setCurrentBase(sw);.out.println("Обновил тут");
} } } } }
//добавляет новое слово, возможно помечает его как основу
//или как главное слово в группе морфологически родственных словvoid addNewWord(String sw, boolean poss_osn, boolean poss_main,int ui ) throws Exception
{curr_add_let; //добавляемая в данный момент букваwatching_elem;//объект класса, содержащий эту буквуindex;//номер объекта в алфавитеh;//остаток строки, без первой буквыdown;//ниже следующий уровень дерева_add_let = sw.charAt(0);(curr_add_let== 'ё') curr_add_let = 'е';= getIndexbyLetter(curr_add_let);(index 32) throw new Exception("Такие буквы недопустимы");{_elem = alpha[index];_elem.setFlagIn_Use(true);
//если текущая буква последняя в добавляемом слове(sw.length() == 1 )
{(poss_osn) watching_elem.setFlagOsnova(true);watching_elem.setFlagEndWord(true);(poss_main) watching_elem.setFlagMainWord(true);_elem.setUin(ui);
}
{= sw.substring(1);= watching_elem.getNextLevel();
//если текущая вершина была листом, создадим новый уровень(down == null)
{= new btree();
//down.level = (byte) (level +1);_elem.setNextLevel(down);
}_elem.getNextLevel().addNewWord(h,poss_osn,poss_main,ui);
} } }void Crawl(DefaultListModel lis,String word)
{
//tree s;//просматриваемый на данном этапе алфавитd;//просматриваемый елемент
Рисунок 28 - Программная реализация класс Btree
(int i = 0;i<32;i++)
{= this.alpha[i];(d.getFlagIn_Use())
{(d.getFlagEndWord())
{(d.getFlagIn_MainWord()).insertElementAt(word+getLetterByIndex(i), 0);.addElement(word+getLetterByIndex(i));
}(d.getNextLevel() != null).getNextLevel().Crawl(lis,word+getLetterByIndex(i));
}
}
}void CrawlforMM(DefaultListModel lis,String word,int ui)
{d;//просматриваемый елемент(int i = 0;i<32;i++)
{= this.alpha[i];(d.getFlagIn_Use())
{(d.getFlagEndWord())
{(d.getUin() == ui){(d.getFlagIn_MainWord()).insertElementAt(word+getLetterByIndex(i), 0);.addElement(word+getLetterByIndex(i));
}
}(d.getNextLevel() != null).getNextLevel().CrawlforMM(lis,word+getLetterByIndex(i),ui);
}
}
}
2.7 Тестовые примеры анализа
В качестве входных данных для первого теста выбран текстовый фрагмент, не содержащий морфологически родственных слов: Предложение не всегда выражает мысль, оно может содержать вопрос, побуждение, волю, эмоции.. На рисунке 30 приведен внешний вид формы после завершения анализа.
Рисунок 30 - Форма после завершения анализа. Тест №1
В таблице 13 приведены результаты работы программы(1) и частотного анализа, проведенного вручную(2).
Таблица 13 - Результаты анализа для теста №1
СловоЧастота 1Частота 2Предложение11мысль11выражать11вопрос11побуждение11воля11эмоция11содержать11
Алгоритм работает корректно.
В качестве входных д