Algoritma Nagao digunakan untuk menghitung frekuensi masing -masing sub -string, dan kemudian berdasarkan statistik frekuensi ini, frekuensi kata, jumlah tetangga dari masing -masing string, entropi kiri dan kanan, dan informasi interaktif (kondensasi internal) dari setiap string.
Penjelasan kata benda:
Algoritma Nagao: Teks statistik cepat dari semua algoritma frekuensi sub -string dalam teks. Algoritma terperinci dapat terlihat http://www.doc88.com/p-664123446503.html
Frekuensi kata: berapa kali string muncul dalam dokumen. Semakin banyak kali, semakin penting.
Jumlah tetangga di sebelah kiri dan kanan: jumlah karakter yang berbeda di sebelah kiri dan kanan string dalam dokumen. Semakin banyak tetangga di kiri dan kanan, semakin tinggi probabilitas kata string.
Entropi kiri dan kanan: Jumlah karakter di sebelah kiri dan kanan string dalam dokumen mendistribusikan jumlah karakter dalam karakter yang berbeda. Mirip dengan indikator di atas, ada perbedaan tertentu.
Informasi Interaktif: Setiap kali string dibagi menjadi dua bagian, setengah kiri dari string dan setengah kanan dari string, menghitung probabilitas yang muncul pada saat yang sama, kecuali untuk probabilitas independensi masing -masing, dan akhirnya mengambil probabilitas minimum di semua divisi. Semakin besar nilai ini, semakin tinggi kondensasi string, semakin besar kemungkinannya.
Proses algoritma spesifik:
1. Baca file input satu per satu, sesuai dengan karakter non-Cina ([^/u4e00-/u9fa5]+) dan hentikan kata-kata "? Dan apakah tidak akan mengatakannya setelah Anda pergi."
Bagilah menjadi string, kodenya adalah sebagai berikut:
String [] frase = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+"]);
Kata -kata berhenti dapat dimodifikasi.
2. Dapatkan tusuk sate kiri dan kanan dari semua string potong, tambahkan ptabel kiri dan kanan masing -masing
3. Urutkan Ptable dan Hitung Ltable. Ltable mencatat bahwa dalam Ptable yang diurutkan, sub -skewer berikutnya memiliki jumlah yang sama dengan karakter yang sama dengan karakter yang sama
4. Melintasi Ptable dan Ltable, Anda bisa mendapatkan kata -kata yang sering dari semua sub -string, tetangga
5. Menurut frekuensi kata string, tetangga kiri dan kanan, frekuensi kata, jumlah tetangga, entropi kiri dan kanan, dan informasi interaktif dari string output
1. Nagaoalgorith.java
Paket Com.Ango. ArrayList; Public Nagaoalgorithm {private int n; sangat bagus? );} // frase terbalik Private String Reverse (Frase String) {StringBuilder Reversephrase = New StringBuilder (); ); length (), s2.length ()); // PERPEKATAN LINE AKUN KE DALAM TERKAIRAN TIDAK ADA STRING KARAKTER CINA [] frasees = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+"" "); for (string e: frase) {for (int (int) i = 0; ++) Leftptable .add (Reversephrase.substring (i)); int i = 1; .size ()]; untuk (int i = 1; i <leftptable.size (); i ++) leftltable [i] = coprefixlength i)); Diurutkan Ptable dan dihitung dengan ltable kiri dan kanan "); T Hasil statistik: TF, Distribusi tetangga Private void countfneighbor () () {// Dapatkan TF dan tetangga kanan untuk (int pindex = 0; pindex <rightptable.size () ; = frase.substring (0, panjang); .Length; Charaat (panjang));} lain break;} wordtfneighbor.put (word, tfneighbor);}} // Dapatkan tetangga untuk (int pindex = 0; pindex <leftptable.size (); pindex ++) {string phrase = leftptable.get (pindex); untuk (int int = 1+leftltab le [pindex]; panjang <= n && length <= frase.length (); panjang ++) {string word = reverse (frase.substring (0, panjang); .Length; ;} Lain break;}} System.out.println ("Info: [Algoritma Nagao Langkah 3]]: Setelah menghitung TF dan tetangga");} // Menurut Wordfneighbor, Count Mi dari Word Private Double Countmi (String Word) {if (word.length () <= 1) return 0; ; Leftpart) .gettf ()/WordNumber; Simpan TF, (kiri dan kanan) Nomor tetangga, entropi tetangga, informasi timbal balik pribadi membatalkan string out, string stoplist, string [] threshold) {coba {// baca stop words file set <strong> stopwords = hashset baru <string> ( ); , MI bufferedwriter bw = baru bufferedwriter (fileWriter baru (owriter (owriter (o ut); for (peta .ntry <string, tfneighbor> entri: wordtfneighbor.entryset ()) {if (entry.getkey (). panjang () <) <) <) <) <) <) < = 1 ||. ); .parseInt (threshold [3]) {) {) {) {) {) {) {) {) {) {StringBuilder SB = new StringBuilder (); ""). "). Append (mi) .Appnd ("/n "); bw.write (sb.tostring ());}}} bw.close ();} catch (ioException e) {lempar runtimeException baru (e); } System.out.println ("Info: [Algoritma Nagao Langkah 4]: Memiliki Simpan untuk File"); Langkah 1: Tambahkan frase ke garis string Ptable; untuk (string in: input) {coba {bufferedReader br = Buf fereadReader baru (filerereader baru (IN)); nagao.addtoptable (line);} br.close ();} catch (ioException e) {lempar runtimeException baru ();}}}} tln ("info: [[[[[[[[Nagao Algoritma Langkah 1] Menambahkan semua substring kiri dan kanan ke Ptable "); // Langkah 2: Urutkan Ptable dan Hitung Ltable Nagao.countltAbable (); // Langkah3: Cou nt TF dan tetangga Nagao.counttfneighbor (); // Langkah4: Simpan TF NeighliTinfo dan Mi nagao.savetfneighborinfomi (out, stoplist, "20,3,3,5" .split (","); uts, string out, string stoplist, int n, file string) {nagaoalgorithm nagao = new nagaoalgorithm (); .setn (n); string [] threshold = filter.split (",", "); h! = 4) {System.out. println (" Kesalahan: Filter harus memiliki 4 angka, dipisahkan dengan ',' ") ; )! "); // Langkah 2: Urutkan Ptable dan Hitung Ltable ao.countlTable (); // Langkah3: Hitung TF dan tetangga Nagao.counttfneighbor (); // Langkah4: Simpan TF Neighborinfo dan Mi Nagao.Savetfneighborinfi (Out, Stoplist, Threshold);} e void setn (int n) {n = n;} public static void main (string [] args) {string [] ins = {"e: //test/ganfen.txt"}; , "e: //test/out.txt", "e: // test /// stoplist.txt");}}
2. Tfneighbor.java
Paket Com.Ango.Word; {leftneighbor = hashmap baru <charactor, integer> (); + Leftneighbor.getordefault (Word, 0)); {//rightneighbor.put (word, 1 + rightneighbor.getonterfault (word, 0)); } // Meningkatnya tf void incrementtf () {tf ++;} public int getleftleneighbornumber () {return leftneighbor.size (); = 0; Publik getRightneighborentRopy () {entropy ganda = 0; ) Return 0;
3. Main.java
paket com.algo.word; terpecah dengan ',', seperti belw: // kata, frekuensi istilah, nomor tetangga kiri, nomor tetangga kanan, entropi tetangga kiri, entropi tetangga kanan, saling beralih // argumen ketiga adalah stop words list if (args.length == 3) nagaoalgorith.applynagao (args [0] .split (","), args [1], args [2]); , Default adalah "20,3,3,5" // output tf> 20 && (kiri | kanan) nomor tetangga> 3 && mi> 5 lain jika (args.length == 5) .split (","), args [1], args [2], integer.parseint (args [3]), args [4]);}}}
Di atas adalah semua isi artikel ini.