2009-08-03 18 views
1

Ich beginne mit einem Lucene-Index, den jemand anders erstellt hat. Ich möchte alle Wörter finden, die einem bestimmten Wort folgen. Ich habe den Begriff (org.apache.lucene.index.Term) von Interesse aus dem Index herausgezogen, und ich kann die Dokumente finden, die diesen Begriff enthalten:Wie bekomme ich den nächsten Begriff aus einem Lucene-Index?

segmentTermDocs = segmentReader.termDocs(term); 
while (segmentTermDocs.next) { 
     doc = segmentReader.document(segmentTermDocs.doc); 
... 
} 

Gibt es eine Möglichkeit für mich zu finden, die Positionen des Begriffs im Dokument und extrahieren die folgenden Begriffe?

Antwort

1

Da die Indexierung der N-Gramme in Ihrer Situation keine Option ist, ist eine gewisse Brute Force erforderlich. Sie könnten die IndexReader's terms and termPositions aufzählen, aber das wäre wahrscheinlich äußerst langsam.

Ein schnellerer Ansatz wäre die Implementierung eines Divide-and-Conquer-Suchalgorithmus durch Aufzählung der Terme und die Verwendung einer MultiPhraseQuery, um eine Gruppe auf einmal zu überprüfen. Teilen Sie alle möglichen Begriffe in Gruppen mit vernünftiger Größe auf (sagen wir 1000) und führen Sie eine MultiPhraseQuery-Suche mit jedem Chunk und Ihrem Präfixwort durch. Wenn es Treffer gibt, rufen Sie Untergruppen rekursiv auf, bis Sie einen einzelnen Begriff erreichen.

+0

Danke für die Ideen! Dies dient zum Generieren eines Berichts, daher ist die Leistung nicht wirklich ein Problem. Am Ende habe ich eine Brute-Force-Suche gemacht und PhraseQuerys erstellt, die aus dem Begriff des Interesses und jedem anderen Begriff im Index bestanden. Diejenigen Abfragen, die Treffer hatten, zeigten die Begriffe an, die dem Begriff von Interesse folgten. –

Verwandte Themen