El algoritmo Nagao se usa para contar la frecuencia de cada subcondeña, y luego en base a estas estadísticas de frecuencia, la frecuencia de las palabras, el número de vecinos de cada cadena, la entropía izquierda y derecha, y la información interactiva (condensación interna) de cada cadena.
Explicación sustantivo:
Algoritmo de Nagao: un texto estadístico rápido de todos los algoritmos de frecuencia de subtracción en el texto. El algoritmo detallado puede ser visible http://www.doc88.com/p-664123446503.html
Frecuencia de palabras: el número de veces que aparece la cadena en el documento. Cuanto más sea el número de veces, más importante.
Número de vecinos a la izquierda y a la derecha: el número de diferentes caracteres a la izquierda y a la derecha de la cadena en el documento. Cuantos más vecinos a la izquierda y a la derecha, mayor sea la probabilidad de la palabra cadena.
Entropía izquierda y derecha: el número de caracteres a la izquierda y a la derecha de la cadena en el documento distribuye el número de caracteres en diferentes caracteres. Similar a los indicadores anteriores, hay ciertas diferencias.
Información interactiva: cada vez que una cadena se divide en dos partes, la mitad izquierda de la cadena y la mitad derecha de la cadena, calcule la probabilidad de que aparezca al mismo tiempo, excepto por la probabilidad de su respectiva independencia, y finalmente tome La probabilidad mínima en toda la división. Cuanto mayor sea este valor, mayor será la condensación de la cadena, más probabilidades es.
El proceso específico de algoritmo:
1. Lea el archivo de entrada uno por uno, de acuerdo con los caracteres no chinos ([^/u4e00-/u9fa5]+) y detenga las palabras "? Y no lo diga después de usted".
Divida en una cadena, el código es el siguiente:
String [] frases = line.split ("[^/u4e00-/u9fa5]+| ["+Palabras de parada+"]);
Las palabras de parada se pueden modificar.
2. Obtenga las brochetas izquierda y derecha de todas las cuerdas cortadas, agregue Ptables izquierda y derecha respectivamente
3. Ordene el Ptable y calcule Ltable. Registros de Ltable que en el Ptable ordenado, los siguientes sub -Skewers tienen el mismo número del mismo personaje con el mismo personaje
4. Atraviando a Ptable y Ltable, puede obtener las palabras frecuentes de todos los vecinos de la sub (Subling
5. Según la frecuencia de la cadena de palabras, los vecinos izquierdo y derecho, la frecuencia de la palabra, el número de vecinos, la entropía izquierda y derecha e información interactiva de la cadena de salida
1. Nagaoalgorithm.Java
paquete com.algo.word; ArrayList; Clase pública nagaoalgorithm {private int n; muy bueno? );} // frase inversa de cadena privada inversa (frase de cadena) {stringBuilder reinsverphrase = new StringBuilder (); ); longitud (), s2.length ()); // Cuenta de línea dividida a ninguna cadena de caracteres chino consecutivo [] frasees = line.split ("[^/u4e00-/u9fa5]+| ["+palabras de parada+"" "); para (cadena e: frases) {para (int (int (int (int (int (int (int (int (int (int (int (int ( i = 0; ++) izquierda. int i = 1; .size ()]; Tabla ordenada y contenido de izquierda y derecha "); t Resultado estadístico: tf, distribución vecina private countfneighbor () () {// Obtener tf y derecho vecino para (int pindex = 0; pindex <rectable.size () ; pindex ++) {string frase = rectable.get (pindex); = frase.substring (0, longitud); .Length; Charat (longitud));} else break;} wordtfneighbor.put (word, tfneighbor);}} // gire vecino para (int pindex = 0; pindex <leftable.size (); pindex ++) {string frase = LeftPable.get (pindex); longitud)); .Length; ;} Else break;}} System.out.println ("Información: [Algoritmo Nagao Paso 3]]: Habiendo contado tf y vecino");} // Según Wordtfneighbor, Conte MI de Word Private Double CountMi (String Word) {if (word.length () <= 1) return 0; ; LeftPart) .Gettf ()/WordNumber; Guardar tf, (izquierda y derecha) Número de vecino, entropía vecina, información de información mutua privada void string out, string stopList, string [] umbral) {try {// lea las palabras de detención de palabras conjunto <strong> stopwords = new Hashset <tring> ((String> (( ); , MI BufferedWriter bw = new BufferedWriter (New FileWriter (Owriter (Owriter (o ut); para (map .ntry <string, tfneighbor> Entry: wordtfneighbor.entryset ()) {if (entry.getkey (). longitud () <) <). = 1 || ); .ParseInt (umbral [3]) {) {) {) {) {) {) {) {) {) {StringBuilder sb = new StringBuilder (); ","). "). Append (mi) .appnd ("/n "); bw.write (sb.ToString ());}}} bw.close ();} catch (ioException e) {lanzar nueva runtimeException (e); } System.out.println ("Información: [Algoritmo NAGAO Paso 4]: tener guardado en el archivo"); Paso 1: Agregar frases a la línea de cadena Ptable; nagao.AddTOptable (línea);} br.close ();} catch (ioException e) {Throw New RuntimeException ();}}}} tln ("Información: [[[[[[[[NAGAO ALGORIMA PASO 1]: Tener tener Se agregaron todas las sustras izquierda y derecha a Ptable "); // Paso 2: Ordenar Ptable y contar Ltable nagao.countltapable (); // paso3: cou nt tf y vecino nagao.counttfneighbor (); // step4: guardar tf vecino y tf y Mi nagao.savetfneighborinfomi (Out, stopList, "20,3,3,5" .split (","); uts, sting out, string stopList, int n, string file) {nagaoalgorithm nagao = nuevo nagaoalgorithm (); .setn (n); ; ) "); // Paso 2: Ordene Ptable y Count Ltable ao.countltable (); // Paso3: Conte TF y vecino Nagao.counttfneighbor (); // Paso4: Guardar tf Vecinfo y Mi Nagao.Savetfneighborinfomi (Out, Stoplist,,,, Umbral);} 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
paquete com.algo.word; {LeftNeighbor = New HashMap <Charactor, Integer> (); + LeftNeighbor.getorDefault (palabra, 0)); {//rightneighbor.put (Word, 1 + RightNeighbor.getonterfault (palabra, 0)); } // increment tf public void incrementTf () {tf ++;} public int getleftleneighbornumber () {return leftneighbor.size (); = 0; Public Double GetRightNeighborStropy () {Double Entropy = 0; ) Return 0;
3. Main.java
paquete com.algo.word; dividido con ',', como belw: // palabra, frecuencia de término, número de vecino izquierdo, número de vecino derecho, entropía vecina izquierda, entropía vecina derecha, influencia mutua // El tercer argumento es la lista de palabras de detener si (args.length == 3) nagaoalgorithm.applynagao (args [0] .split (","), args [1], args [2]); , Predeterminado es "20,3,3,5" // salida tf> 20 && (izquierda | derecha) número vecino> 3 && mi> 5 else if (args.length == 5) .split (","),, Args [1], args [2], integer.parseint (args [3]), args [4]);}}}
Lo anterior es todo el contenido de este artículo.