tengo un Lucene-índice con los siguientes documentos:¿Cómo se cuenta la frecuencia de los términos para el conjunto de documentos?
doc1 := { caldari, jita, shield, planet }
doc2 := { gallente, dodixie, armor, planet }
doc3 := { amarr, laser, armor, planet }
doc4 := { minmatar, rens, space }
doc5 := { jove, space, secret, planet }
por lo que estos 5 documentos utilizan 14 términos diferentes:
[ caldari, jita, shield, planet, gallente, dodixie, armor, amarr, laser, minmatar, rens, jove, space, secret ]
la frecuencia de cada término:
[ 1, 1, 1, 4, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1 ]
para una fácil lectura:
[ caldari:1, jita:1, shield:1, planet:4, gallente:1, dodixie:1,
armor:2, amarr:1, laser:1, minmatar:1, rens:1, jove:1, space:2, secret:1 ]
Lo que sí quiero saber ahora es, ¿cómo obtener el término vector de frecuencia para un conjunto de documentos ?
por ejemplo:
Set<Documents> docs := [ doc2, doc3 ]
termFrequencies = magicFunction(docs);
System.out.pring(termFrequencies);
daría lugar a que la salida:
[ caldari:0, jita:0, shield:0, planet:2, gallente:1, dodixie:1,
armor:2, amarr:1, laser:1, minmatar:0, rens:0, jove:0, space:0, secret:0 ]
quitan todos los ceros:
[ planet:2, gallente:1, dodixie:1, armor:2, amarr:1, laser:1 ]
Aviso, que la vetor resultado contiene sólo las frecuencias plazo de el conjunto de documentos . ¡NO las frecuencias generales de todo el índice! El término 'planeta' está presente 4 veces en todo el índice, pero el conjunto fuente de los documentos solo lo contiene 2 veces.
Una implementación ingenua sería simplemente iterar sobre todos los documentos en el conjunto docs
, crear un mapa y contar cada término. Pero necesito una solución que también funcione con un tamaño de conjunto de documentos de 100.000 o 500.000.
¿Existe alguna función en Lucene que pueda usarse para obtener este vector de términos? Si no existe tal característica, ¿cómo se vería una estructura de datos como que alguien pueda crear en el momento del índice para obtener dicho vector de términos fácil y rápido?
No soy el experto en Lucene, entonces lamento si la solución es obvia o trivial.
Tal vez vale la pena mencionar: la solución debe funcionar lo suficientemente rápido para una aplicación web, aplicada a consultas de búsqueda de clientes.
Así que hay 500 mil documentos, qué tan grande es su lista de términos? – Justin
Sé exactamente lo que estás tratando de lograr, lástima que no tengo una respuesta a tu pregunta :) – Esko
@Justin: tengo alrededor de 2.000 términos diferentes, máximo absoluto en unos años tal vez 10.000 pero con certeza no más . – ManBugra