Алгоритм Nagao используется для подсчета частоты каждого суб -стрижки, а затем на основе этой частотной статистики, частоты слов, количества соседей каждой строки, левой и правой энтропии и интерактивной информации (внутренняя конденсация) каждая строка.
Существительное объяснение:
Алгоритм Нагао: быстрый статистический текст всех алгоритмов частоты подсасывания в тексте. Подробный алгоритм можно увидеть http://www.doc88.com/p-664123446503.html
Частота слов: количество раз, когда строка появляется в документе. Чем больше раз, тем важнее.
Количество соседей слева и вправо: количество различных символов слева и справа от строки в документе. Чем больше соседей слева и справа, тем выше вероятность слова строки.
Энтропия слева и правой: количество символов слева и справа от строки в документе распределяет количество символов в разных символах. Аналогично приведенным выше показателям, есть определенные различия.
Интерактивная информация: каждый раз, когда строка делится на две части: левая половина строки и правая половина строки, рассчитывает вероятность того, что она появляется одновременно, за исключением вероятности их соответствующей независимости и, наконец, принять Минимальная вероятность во всем разделении. Чем больше это значение, тем выше конденсация строки, тем более вероятно, что оно.
Конкретный процесс алгоритма:
1. Прочитайте входной файл один за другим в соответствии с некитайскими символами ([^/u4e00-/u9fa5]+) и остановите слова »? И не говорите это после того, как вы уйдете».
Разделите на строку, код выглядит следующим образом:
String [] фразы = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+"]);
Слова остановки могут быть изменены.
2. Получите левый и правый шашлык всей струны, добавьте левый и правый Ptables соответственно
3. Сортируйте Ptable и вычислите Ltable. Ltable записывает, что в сортированной Ptable следующие подзадачи имеют одинаковое количество одного и того же символа с тем же символом
4. Переход PTABLE и LTABLE, вы можете получить частые слова всех суб -стрижков, соседей
5. В соответствии с частотой словесной строки, левой и правой соседей, частота слова, количество соседей, левая и правая энтропия и интерактивная информация выходной строки
1. Нагаолгоритм. Ява
Пакет Com.alge.word; Arraylist; Общественный класс Нагаолгоритм очень хорошо? );} // обратная фраза частная строка обратная (строканая фраза) {stringBuilder revershphrase = new StringBuilder (); ); Length (), s2.length ()); // Раздельная линейная учетная запись, чтобы последовательно нет китайской строки символов [] phrasees = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+""); for (string e: фразы) {for (int i = 0; ++) левш. int i = 1; .size ()]; Сортированная PTABLE и COTRED LEFT и RIGHT LTABLE "); T Статистический результат: TF, соседское распределение Private void Countfneighbor () () {// Получить TF и правого соседа для (int pindex = 0; pindex <righteptable.size () ; = phrase.substring (0, длина); .Length; Charat (length));} else break;} wordtfneighbor.put (word, tfneighbor);}} // Получить оставшийся сосед LEANDPTABLE.GET (PINDEX); Длина); .Length; ;} Else Break;}} System.out.println ("info: [Алгоритм nagao Шаг 3]]]: с подсчетом TF и соседом");} // Согласно Wordtfneighbor, Count mi of Word Private Double Countmi (String Word) {if (word.length () <= 1) return 0; ; левая) .gettf ()/wordnumber; Сохранить TF, (слева и справа) номер соседа, соседняя энтропия, взаимная информация private void string out, string stoplist, string [] threshold) {try {// read stop words set file set <strong> stopwords = new hashset <string> ( ); , mi bufferedwriter bw = new BufferedWriter (новый файл -автора (OWRITER (OWRITER (O UT); для (map .ntry <String, tfneighbor> intpirt: wordtfneighbor.entryset ()) {if (entry.getkey (). = 1 || ); .parseInt (Threshold [3]) {) {) {) {) {) {) {) {) {) {StringBuilder SB = new StringBuilder (); ","). "). Append (mi) .appnd ("/n "); bw.write (sb.tostring ());}}} bw.close ();} catch (ioexception e) {throw new runtimeexception (e); } System.out.println ("Информация: [Алгоритм Нагао Шаг 4]: Сохраняется в файле"); Шаг 1: добавить фразы в строку Ptable; nagao.addtoptable (line);} br.close ();} catch (ioexception e) {throw new runtimeexception ();}}}} tln ("info: [[[[[[[[nagao algorithm Шаг 1]: Добавлены все левые и правые подстроки в Ptable "); // Шаг 2: Сортировать Ptable и Countable ltable nagao.countltapable (); // step3: count tf и соседка nagao.counttfneighbor (); // step4: Сохраните Tf and and Mi nagao.savetfneighborinfomi (out, stoplist, "20,3,3,5" .split (","); UTS, String Out, String Stoplist, int n, String File) {nagaoalgorithm nagao = new Nagaoalgorithm (); .setn (n); ; )! "); // Шаг 2: Сортировать ptable и count ltable ao.countltable (); // step3: count tf и сосед Nagao.countfneighbor (); // step4: Сохранить Tf oute and mi nagao.savetfneighborinfomi (out, остановка, Threshold);} e void setn (int n) {n = n;} public void main (string [] args) {string [] ins = {"e: //test/ganfen.txt"}; , "e: //test/out.txt", "e: // test /// stoplist.txt");}}
2. Tfneighbor.java
Пакет com.algo. {Leatseneighbor = new Hashmap <charactor, Integer> (); + Leftneighbor.getordefault (Word, 0)); {//rightneighbor.put (Word, 1 + Rightneighbor.getOnterfault (Word, 0)); } // urgent tf public void incrementtf () {tf ++;} public int getleftleneighbornumber () {return Leathenge.size (); = 0; Public Double GetrightNeighborentRopy () {Double Entropy = 0; ) Return 0;
3. main.java
пакет com.algo.word; Разделен с ',', как Belw: // Word, частота терминов, номер левого соседа, номер правого соседа, энтропия левого соседа, энтропия правого соседа, взаимная инфуза // Третий аргумент - список остановки слов, если (args.length == 3) nagaoalgorithm.applynagao (args [0] .split (","), args [1], args [2]); , По умолчанию «20,3,3,5» // Выход TF> 20 && (слева | справа) Номер соседа> 3 && mi> 5 else if (args.length == 5) .split (","), args [1], args [2], integer.parseint (args [3]), args [4]);}}}
Выше всего содержимое этой статьи.