Nagaoアルゴリズムは、各サブストリングの周波数をカウントするために使用され、これらの周波数統計、単語頻度、各文字列の近隣数、左右のエントロピー、およびインタラクティブな情報(内部凝縮)に基づいて使用されます。各文字列。
名詞の説明:
Nagaoアルゴリズム:テキスト内のすべてのサブストリング周波数アルゴリズムの高速統計テキスト。詳細なアルゴリズムは、http://www.doc88.com/p-664123446503.htmlに見えます
単語頻度:文字列がドキュメントに表示される回数。回数が多いほど重要です。
左右の隣人の数:ドキュメント内の文字列の左右に異なる文字の数。左右に隣の隣人が多いほど、単語の文字列の確率が高くなります。
左右のエントロピー:文書の文字列の左と右側の文字の数は、異なる文字の文字の数を分散します。上記の指標と同様に、特定の違いがあります。
インタラクティブな情報:文字列が文字列の左半分と文字列の右半分の2つの部分に分割されるたびに、それぞれの独立性の確率を除いて、同時に表示される確率を計算し、最終的に服用します。すべての部門の最小確率。この値が大きいほど、弦の凝縮が高くなるほど、可能性が高くなります。
アルゴリズムの特定のプロセス:
1。中国人以外の文字([^/u4e00-/u9fa5]+)によると、入力ファイルを1つずつ読み、単語を止めてください。
文字列に分割すると、コードは次のとおりです。
string [] frase = line.split( "[^/u4e00-/u9fa5]+| ["+stopwords+"]);
ストップワードを変更できます。
2.すべてのカットストリングの左右の串を取得し、それぞれ左と右のptableを追加します
3. ptableを並べ替えて、ltableを計算します。 ltableは、ソートされたptableでは、次のサブスケワーが同じ文字を持つ同じ数の同じ数字を持っていることを記録します
4. ptableとltableを横断すると、すべてのサブストリング、隣人の頻繁な言葉を得ることができます
5。文字列の頻度、左右の隣人、単語の頻度、隣人の数、左右のエントロピー、および出力文字列のインタラクティブな情報に応じて
1。Nagaoalgorithm.java
com.algo.io.io.io.filenotfoundection; ArrayList。 Public Class nagaoalgorithm非常に良いですが、それは良くない= new ArrayList = rightptable = new hashmap < );} //リバースフレーズプライベート文字列reverse(string frase){stringbuilder reversephrase = new StringBuilder(); ); reversePhrase.tstring();} // s1およびs2 private int coprefixlength(string s2){int i = 0; i <math.min(s1。 length()、length(); //連続した漢文字文字列[] frasees = line.split( "[^/u4e00-/u9fa5]+| ["+stopwords+"" "); for(string e:frase){for(int(int) i = 0; ++)左翼(reversephrase.substring(i)); int i = 1; .size()];ソートされたptableおよびカウントされた左右のltable "); t統計結果:tf、隣接分布private void countfneighbor()(){// tfを取得し、右隣に; pindex ++){string frase = rightpable.get(pindex); = substring(0、length); .lendex ++){lindex]> = ling){tfnegrementtf(); charat(length));} else break;} wordtfneighbor.put(word、tfneighbor);}} //(int pindex = 0; pindex <leftptable.size(); pindex ++){string frase = leftptable.get(pindex);長さ)); tfneighbor = wordtfneighbor.get(frase).length(length)tfneighbor.addtoleftneighbor .lengthex ++){leftltable [lindex]> = lestpta ble.get(lindex); ;} else break;}} system.out.println( "info:[nagao algorithm step 3]]:wordtfneighborによると、tfとneightを数えました");} // {if(word.length()<= 1)return 0; ; for (int POS = 1; POS <Word.length (); POS ++) {string leftpart = word.substring (0, POS); string ghtpart = Word.substring (POS); Double LeftProbability = Wordtfneighbor.get ( leftpart).gettf()/wordnumber; tf、(左と右)を保存します。近隣番号、隣人エントロピー、相互情報プライベートボイド文字列、文字列ストップリスト、文字列[]しきい値{//停止単語ファイルセット<strong> stopwords = new Hashset <string>( )bufferedReader <(line = null){line.length()> 1) 、Mi BufferedWriter bw = new BufferedWriter(new FileWriter(owriter(owriter(o ut); for)) = 1 || );右bornumber = tfneighbornumber(); .parseint(threshold [3]){){){){){){){StringBuilder(); "、")。 ")。append(mi).appnd("/n "); bw.write(sb.tostring());}}} bw.close();} catch(ioexception e){throw new runtimeexception(e); } system.out.println( "info:[nagao algorithm st wased to file");ステップ1:Ptable String Line; for(inputs){bufferedreader br = new buf fereadreader(new filerereader(in)); nagao.addtoptable(line);} br.close();} catch(ioexception e){throw new runtimeexception();}}}}} tln( "info:[[[[[[[nagao algorithm step 1]]:すべての左右のサブストリングをptableに追加しました "); //ステップ2:ptableをソートし、ltable nagao.countltapable(); // step3:cou nt tf and neighbor nagao.counttfneighbor(); // step4:tf neighboriNfoと保存mi nagao.savetfneighborinfomi(out、stoplist、 "20,3,3,5" .split( "、"); uts、string stoplist、int n、string file){nagaoalgorithm nagao = new nagaoalgorithm(); .setn(n); string = filter.split( "、"、 "); h!= 4){system.out。println(" error:filterは '、'、 '" ; )= null){nagao.addtoptable(line);} <system.out.println( "info:[nagao algorithmステップ1]: "); //ステップ2:ptableを並べ替えてltable ao.countltable(); // step3:count tf and neighbor nagao.counttfneighbor(); // step4:tf neighboryinfo and mi nagao.savetfneighborinfomi(out、stoplist、しきい値);} e void setn(int n){n = n;} public static void main(string [] string [] ins = {"e://test/ganfen.txt"}; 、 "e://test/out.txt"、 "e:// test /// stoplist.txt");}}
2。Tfneighbor.java
com.algo.util.hava.util.map; {Leftneighbor = new Hashmap <charactor、integer>(); + leftneighbor.getordefault(word、0); {//rightneighbor.put(word、righneighbor.getonterfault(word、0)); } //インクリメントTF public void incrementtf(){tf ++;} public int getLeftleneighbornumber(){return leftneighbor.size(); = 0; public double getReighborentropy(){double entropy = 0; )0;
3。main.java
パッケージcom.algo.word; public static void main(string [] args){// 3項目の場合、最初の引数は '、'、// 2番目の引数は出力ファイル//出力7列ですbelw:// word、用語頻度、左隣接番号、右隣接番号、左隣人エントロピー、右隣のエントロピー、相互inf ormation // 3番目の引数はstop words list if(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]);}}}}}
上記は、この記事のすべての内容です。