Wie kann ich die Liste der eindeutigen Begriffe aus einem bestimmten Feld in Lucene abrufen?

7

Ich habe einen Index von einem großen Korpus mit mehreren Feldern. Nur eines dieser Felder enthält Text. Ich muss die eindeutigen Wörter aus dem gesamten Index basierend auf diesem Feld extrahieren. Weiß jemand, wie ich das mit Lucene in Java machen kann?

    
Hossein 18.01.2012, 12:19
quelle

4 Antworten

8

Sie suchen Begriffsvektoren (eine Menge aller Wörter, die waren im Feld und die Anzahl der Male, die jedes Wort verwendet wurde, ausgenommen Stoppwörter). Sie verwenden IndexReaders getTermFreqVector (docid, field) für jedes Dokument im Index und füllen Sie HashSet mit ihnen.

Die Alternative wäre terms () und wählen Sie nur Begriffe für das Feld aus, an dem Sie interessiert sind:

%Vor%

Dies ist nicht die optimale Lösung, Sie lesen und löschen dann alle anderen Felder. Es gibt eine Klasse Fields in Lucene 4, die Begriffe (Feld) nur für ein einzelnes Feld.

    
milan 18.01.2012, 12:26
quelle
25

Wenn Sie die Lucene 4.0 API verwenden, müssen Sie die Felder aus dem Index-Reader holen. Die Felder bietet dann die Möglichkeit, die Begriffe für jedes Feld im Index zu erhalten. Hier ist ein Beispiel, wie man das macht:

%Vor%

Schließlich können Sie für die neue Version von Lucene die Zeichenfolge vom Aufruf BytesRef abrufen:

%Vor%

statt

%Vor%

Wenn Sie die Dokumenthäufigkeit abrufen möchten, können Sie Folgendes tun:

%Vor%     
pokeRex110 17.12.2012 09:50
quelle
3

Das gleiche Ergebnis, nur ein bisschen sauberer, ist die Verwendung von LuceneDictionary im Paket lucene-suggest . Es kümmert sich um ein Feld, das keine Begriffe enthält, indem es BytesRefIterator.EMPTY zurückgibt. Das spart dir eine NPE:)

%Vor%     
RobAu 26.04.2013 14:49
quelle
0

Die Antworten, die TermsEnum und terms.next() verwenden, haben einen kleinen Fehler. Dies liegt daran, dass TermsEnum bereits auf den ersten Term zeigt, sodass while(terms.next()) dazu führt, dass der erste Term übersprungen wird.

Verwenden Sie stattdessen eine for-Schleife:

%Vor%

Um den Code von der akzeptierten Antwort zu ändern:

%Vor%     
Owen Pauling 14.12.2017 11:43
quelle

Tags und Links