Vergleich von Lucene-Analysatoren

104

Kann jemand bitte den Unterschied zwischen den verschiedenen Analysatoren in Lucene erklären? Ich erhalte eine maxClauseCount-Ausnahme und verstehe, dass ich dies durch die Verwendung eines KeywordAnalyzer vermeiden kann, aber ich möchte nicht vom StandardAnalyzer wechseln, ohne die Probleme im Zusammenhang mit Analysatoren zu verstehen. Vielen Dank.

Geselle
quelle

Antworten:

209

Im Allgemeinen ist jeder Analysator in Lucene ein Tokenizer + Stemmer + Stoppwortfilter.

Der Tokenizer teilt Ihren Text in Blöcke auf. Da verschiedene Analysatoren möglicherweise unterschiedliche Tokenizer verwenden, können Sie verschiedene Ausgabe- Token-Streams abrufen , dh Sequenzen von Textblöcken. Sie haben beispielsweise KeywordAnalyzererwähnt, dass der Text überhaupt nicht aufgeteilt wird und das gesamte Feld als einzelnes Token verwendet wird. Gleichzeitig verwenden StandardAnalyzer(und die meisten anderen Analysatoren) Leerzeichen und Interpunktion als Teilungspunkte. Zum Beispiel wird für die Phrase "Ich bin sehr glücklich" die Liste ["i", "bin", "sehr", "glücklich"] (oder so ähnlich) erstellt. Weitere Informationen zu bestimmten Analysatoren / Tokenisierern finden Sie in den Java-Dokumenten .

Stemmers werden verwendet, um die Basis eines fraglichen Wortes zu erhalten. Dies hängt stark von der verwendeten Sprache ab. Zum Beispiel wird für die vorherige englische Phrase etwas wie ["i", "be", "veri", "happi"] produziert und für das französische "Je suis très heureux" eine Art französischer Analysator (wie SnowballAnalyzerinitialisiert) mit "Französisch") wird ["je", "être", "tre", "heur"] produzieren. Wenn Sie den Analysator einer Sprache verwenden, um Text in einer anderen Sprache zu speichern, werden natürlich Regeln aus der anderen Sprache verwendet, und der Stemmer kann zu falschen Ergebnissen führen. Es ist nicht das ganze System fehlerhaft, aber die Suchergebnisse sind dann möglicherweise weniger genau.

KeywordAnalyzerverwendet keine Stemmers, es übergibt das gesamte Feld unverändert. Wenn Sie also einige Wörter im englischen Text suchen möchten, ist es keine gute Idee, diesen Analysator zu verwenden.

Stoppwörter sind die häufigsten und fast nutzlosesten Wörter. Auch hier kommt es stark auf die Sprache an. Für Englisch sind diese Wörter "a", "the", "I", "be", "have" usw. Stoppwortfilter entfernen sie aus dem Token-Stream, um das Rauschen in den Suchergebnissen zu verringern, also schließlich unsere Phrase "I. bin sehr glücklich "mit StandardAnalyzerwird in Liste [" veri "," happi "] umgewandelt.

Und macht KeywordAnalyzerwieder nichts. Wird KeywordAnalyzeralso für Dinge wie ID oder Telefonnummern verwendet, aber nicht für üblichen Text.

Und was Ihre maxClauseCountAusnahme betrifft, ich glaube, Sie bekommen es bei der Suche. In diesem Fall liegt es höchstwahrscheinlich an einer zu komplexen Suchabfrage. Versuchen Sie, es auf mehrere Abfragen aufzuteilen, oder verwenden Sie Funktionen auf niedrigerer Ebene.

Freund
quelle
1
@ffriend: Ich glaube nicht, dass Stemmer (mit Schneeball oder anderen Algorithmen) am konvertieren kann -> sein, weil es ein Job von Lemmatizer ist. Sie können es hier ansehen snowball.tartarus.org/demo.php
Tho
Wo passt Tika dazu? Ist es nicht technisch ein Analysator?
Anon
1
@anon: Tika ist ein separates Projekt mit mehreren Hauptmerkmalen. Angenommen, Sie meinen Tika-Parser, würde ich sagen, dass Tika einen Byte-Stream verwendet und Text + Metadaten ausgibt, während Lucene-Analysatoren Text verwenden und einen verarbeiteten Token-Stream ausgeben. Beispielsweise können Sie zuerst PDF- oder XML-Dateien mit Tika analysieren, Dokumente mit Feldern wie "Titel", "Autor" und "Text" erstellen und dann einige oder alle dieser Felder mit Lucene-Analysatoren analysieren.
Freund
Ich frage mich nur, "sehr" und "glücklich" sind keine abgelehnten Wörter. Warum werden sie in "veri" und "happi" umgewandelt? Ist es passend zu meinen Unterschieden, da sie ähnlich klingen?
Oguzalb
0

Aus meiner Sicht habe ich StandAnalyzerund verwendet SmartCNAnalyzer. Da muss ich Text auf Chinesisch suchen. Offensichtlich SmartCnAnalyzerist besser im Umgang mit Chinesisch. Für verschiedene Zwecke müssen Sie den besten Analysator auswählen.

neal
quelle