¿Cuál es la estructura de algoritmo / datos utilizada por Lucene para calcular el término frecuencia de los documentos?

Los términos y sus frecuencias se denotan mediante Vectores almacenados en invertedIndex.

Un término es la unidad básica de búsqueda que consiste en un par de elementos de cadena: . Un vector de términos es una colección de términos. El índice invertido asigna términos a documentos. Para cada término T, debe almacenar el conjunto de todos los documentos que contienen ese término. Por lo tanto, es deber del analizador buscar los términos en los documentos y crear una secuencia de tokens para poder asignarlos. Los términos se almacenan en segmentos y se ordenan.

El archivo .frq contiene los identificadores de los documentos que contienen cada término, junto con la frecuencia del término en ese documento.

Lucene almacena el término datos en formato de índice invertido como se describe en la imagen a continuación:

TermDocs proporciona el TF de un término determinado en cada documento que contiene el término. Podemos obtener el término documentos de un IndexReader, utilizando el término de interés. Espero que el siguiente código lo haga fácil de entender.

  Lista  termlist = new ArrayList  ();
     IndexReader reader = IndexReader.open (indexFolder);
     TermEnum terms = reader.terms ();
     while (terms.next ()) 
     {
       Término plazo = terms.term ();
       Cadena termText = term.text ();
       int frecuencia = reader.docFreq (término);
       termlist.add (termText);
     }
     lector.close ();

Lucene utiliza el índice invertido ( http://en.wikipedia.org/wiki/Inv …) para almacenar vectores de término. Para obtener más detalles, consulte el wiki de lucid imagination ( http://www.lucidimagination.com/ …, http://www.lucidimagination.com/ …) y la documentación de Lucene ( http://lucene.apache.org/core/ol …)