Der Nagao -Algorithmus wird verwendet, um die Frequenz jeder Sub -String und dann auf diesen Frequenzstatistiken, der Worthäufigkeit, der Anzahl der Nachbarn jeder Zeichenfolge, der linken und rechten Entropie und der interaktiven Informationen (interne Kondensation) von basierend Jede Zeichenfolge.
Substantive Erklärung:
Nagao -Algorithmus: Ein schneller statistischer Text aller Sub -String -Frequenzalgorithmen im Text. Detaillierter Algorithmus kann sichtbar sein http://www.doc88.com/p-664123446503.html
Wortfrequenz: Die Anzahl, mit der die Zeichenfolge im Dokument angezeigt wird. Je mehr Male ist, desto wichtiger.
Anzahl der Nachbarn links und rechts: Die Anzahl der verschiedenen Zeichen links und rechts im Dokument. Je mehr Nachbarn links und rechts, desto höher ist die Wahrscheinlichkeit des Worts.
Links und rechts Entropie: Die Anzahl der Zeichen links und rechts im Dokument verteilt die Anzahl der Zeichen in verschiedenen Zeichen. Ähnlich wie die obigen Indikatoren gibt es bestimmte Unterschiede.
Interaktive Informationen: Jedes Mal, wenn eine Zeichenfolge in zwei Teile unterteilt ist, die linke Hälfte der Zeichenfolge und die rechte Hälfte der Zeichenfolge, berechnen Sie die Wahrscheinlichkeit, dass sie gleichzeitig erscheint, mit Ausnahme der Wahrscheinlichkeit ihrer jeweiligen Unabhängigkeit und schließlich zu nehmen Die Mindestwahrscheinlichkeit in der gesamten Teilung. Je größer dieser Wert ist, desto höher ist die Kondensation der Zeichenfolge, desto wahrscheinlicher ist es.
Der spezifische Algorithmusprozess:
1. Lesen Sie die Eingabedatei nacheinander gemäß nicht-chinesischen Zeichen ([^/u4e00-/u9fa5]+) und stoppen Sie Wörter "und sagen Sie sie nicht, nachdem Sie gehen."
In eine Zeichenfolge teilen, ist der Code wie folgt:
String [] phrasen = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+"]);
Die Stoppwörter können geändert werden.
2. Holen Sie sich die linken und rechten Spieße aller Schnittzeichenfolge und fügen Sie links und rechts Ptables hinzu
3. Sortieren Sie die PTABLE und berechnen Sie Ltable. Ltable erfasst, dass in der sortierten PTABLE die nächsten Sub -Keewers die gleiche Anzahl des gleichen Zeichens mit demselben Charakter haben
4. Durchqueren Sie Ptable und Ltable, Sie können die häufigen Wörter aller Sub -String, Nachbarn, erhalten
5. Gemäß der Häufigkeit der Wortfolge, der linken und rechten Nachbarn, der Wortfrequenz, der Anzahl der Nachbarn, der linken und rechten Entropie und interaktiven Informationen der Ausgabezeichenfolge
1. Nagaoalgorithm.java
Paket Com.Algo.Word; Arraylist; Öffentliche Klasse Nagaoalgorithmus {private int n; Sehr gut? );} // Reverse Phrase private String reverse (String-Phrase) {StringBuilder ReversePhrase = new StringBuilder (); ); Länge (), S2.Length ()); // Split-Line-Konto für aufeinanderfolgende chinesische Zeichenstring [] phrasees = line.split ("[^/u4e00-/u9fa5]+| ["+Stopwords+""); für (String E: Phrasen) {für (int (int (int) (int (int (int) i = 0; ++) links. int i = 1; .SIZE ()] für (int i = 1; i <linkss Sortiertes PTABLE und Counted Links und Right Ltable "); t Statistisches Ergebnis: TF, Nachbarverteilung Private void Countfneighbor () () {// Get TF und Right Neighbor for (int pindex = 0; Pindex <rechts.SIZE.SIZE.SIZE () ; = Phrase.Substring (0, Länge); .Length; Charat (länge));} else break;} wordtfneighbor.put (word, tfneighbor);}} // linke Nachbarn für (int pindex = 0; pindex <linksPLEIS.SIZE (); pindex ++) {String Phrase = links.get (pindex); Länge)); .Length; lindex ++) {if (linksable [lindex]> = Länge) {String cophrase = LeftAn.get (lindex); ;} Else break;}} system.out.println ("Info: [Nagao -Algorithmus Schritt 3]]: Nachdem TF und Nachbar gezählt haben"); {if (Word.Length () <= 1) return 0; ; LeftPart) .gettf ()/WordNumber; Speichern Sie TF, (links und rechts) Nachbarnummer, Nachbarentropie, gegenseitige Informationen privater void String, String -Stoplist, String [] Schwelle) {try {// Stop -Word -Datei set <strong> Stopwords = New Hashset <string> ( ); , Mi BufferedWriter bw = neuer Bufferer -Writer (neuer FileWriter (Owriter (Owriter (o ut); für (Karte .Ntry <String, tfneighbor> Eintrag: Wordtfneighbor.EntrySet ()) {if (Entry.Getkey (). Länge () <) < = 1 ||. ); .ParseInt (Schwelle [3]) {) {) {) {) {) {) {) {) {) {StringBuilder sb = new StringBuilder (); ","). "). Append (mi) .Appnd ("/n "); bw.write (sb.toString ());}}} bw.close ();} catch (ioException e) {werfen neu runimeexception (e); } System.out.println ("Info: [Nagao -Algorithmus Schritt 4]: SPARED in Datei"); Schritt 1: Hinzufügen von Phrasees zu PTABLE -STRING -Zeile; nagao.addtoptable (line);} br.close ();} catch (ioException e) {werfen neuer runTimeexception ();}}}} tln ("info: [[[[[[[[[[Nagao -Algorithmus Alle linken und rechten Substrings zu ptable hinzugefügt "); // Schritt 2: Sortieren Sie Ptable und Count Ltable nagao.countltapable (); // Schritt 3: Cou nt tf und Neighbor nagao.countTfneighbor (); // Schritt 4: Sparen Sie TF NeighboInfo und Save TF NeighboInfo und Mi nagao.savetfneighborinfomi (out, stopplist, "20,3,3,5" .Split (","); UTS, String Out, String Stoplist, int n, String -Datei) {Nagaoalgorithm Nagao = New Nagaoalgorithm (); .setn (n); ; )! "); // Step 2: Sort ptable and count ltable aO.COUNTLTable (); // Step3: Count tf and neighbor nagao.counttfneighbor (); // Step4: Save TF Neighborinfo and Mi Nagao.saVetfneighborinfomi (out, Stoplist, Schwelle);} 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.Algo.Word; {linkNeighbor = neuer Hashmap <Characctor, Integer> (); + LinkNeighbor.getOrdefault (Word, 0)); {//RightNeighbor.put (Word, 1 + rechts. } // Inkrement tf public void incrementtf () {tf ++;} public int getleftlenighBornumber () {return linkNeighbor.size (); = 0; Public double righthoreighborentropy () {Double Entropy = 0; ) Return 0;
3. JAIN.JAVA
Paket com.algo.word; Aufgeteilt mit ',', wie Belw: // Wort, Term Frequenz, linke Nachbarnzahl, rechter Nachbarnnummer, linke Nachbarentropie, rechte Nachbarentropie, gegenseitige Inf Ormation // Dritte Argument ist Stop -Word -Liste, wenn (args.length == 3) nagaoalgorithm.applynagao (args [0] .Split (","), args [1], args [2]); , Standard ist "20,3,3,5" // Ausgabe tf> 20 && (links | rechts) Nachbarnummer> 3 && mi> 5 else if (argsgth == 5) .Split (","), args [1], args [2], Integer.ParseInt (args [3]), args [4]);}}}
Das obige ist der gesamte Inhalt dieses Artikels.