Система контент-анализа естественно-языковых текстов

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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

Алгоритм работает корректно.

В качестве входных д