Frage

Ich habe eine Seite, die Lucene durchsuchbar werden. Ich habe von den Protokollen bemerkt, dass Benutzer manchmal nicht finden, was sie suchen, weil sie einen einzigartigen Begriff eingeben, sondern nur die Plural-Version dieses Begriffs wird auf der Website verwendet. Ich möchte die Suche Verwendungen von anderen Formen eines Wortes zu finden als auch. Dies ist ein Problem, das ich bin sicher, dass viele Male, so was sind die besten Praktiken für das?

gelöst wurde

. Bitte beachten: Diese Website hat nur Englisch Inhalt

Einige Ansätze habe ich gedacht:

  1. das Wort in einer Art Thesaurus-Datei nachschlagen, um alternative Formen eines gegebenen Wortes zu bestimmen.
    • Einige Beispiele:
      • Suchen nach „Auto“, auch hinzufügen, „Autos“, um die Abfrage an.
      • Suchen nach „tragen“, auch hinzufügen „trägt“ und „getragen“, um die Abfrage.
      • Suchen nach „small“, auch hinzufügen „klein“ und „kleinst“ der Abfrage.
      • Sucht „kann“, auch hinzufügen „kann nicht“, „nicht“, „Dosen“ und „Konserven“ auf die Abfrage.
      • Und es sollte in umgekehrter Richtung (für das heißt suchen „trägt“ sollte hinzufügen, „tragen“ und „getragen“) arbeitet.
    • Nachteile:
      • Ist für viele neue technische Worte nicht funktionieren, wenn das Wörterbuch / Thesaurus häufig aktualisiert wird.
      • Ich bin über die Leistung des Suchens die Thesaurus-Datei nicht sicher.
  2. Generieren Sie die alternativen Formen algorithmisch, basierend auf einige Heuristiken.
    • Einige Beispiele:
      • Wenn das Wort in "s" oder "es" oder "ed" oder "er" oder "est" endet, fallen das Suffix
      • Wenn das Wort in "n" oder "IED" oder "ier" oder "iest" endet, konvertieren zu "y"
      • Wenn das Wort in "y" endet, konvertieren "n", "IED", "ier" und "iest"
      • Versuchen Sie "s", "es", "er" und "est", um das Wort hinzuzufügen.
    • Nachteile:
      • Erzeugt viele Nicht-Wörter für die meisten Eingänge.
      • Man fühlt sich wie ein Hack.
      • Sieht aus wie etwas, das Sie auf TheDailyWTF.com finden würde. :)
  3. Etwas viel anspruchsvoller?

Ich denke, eine Art Kombination der ersten beiden Ansätze zu tun, aber ich bin nicht sicher, wo eine Thesaurus-Datei zu finden (oder was es heißt, als „Thesaurus“ nicht ganz richtig ist, aber weder "dictionary").

War es hilfreich?

Lösung

Betrachten Sie die PorterStemFilter in Ihrer Analyse-Pipeline. Achten Sie darauf, die gleiche Analyse auf Abfragen auszuführen, die verwendet wird, wenn der Index zu bauen.

Ich habe auch die Lancaster stamm Algorithmus mit guten Ergebnissen. Mit Hilfe der PorterStemFilter als Führer, ist es einfach, mit Lucene zu integrieren.

Andere Tipps

Wort arbeitet stamm OK für Englisch, aber für Sprachen, in denen Wort stammt fast unmöglich ist (wie bei mir) Option # 1 lebensfähig ist. Ich kenne zumindest eine solche Umsetzung für meine Sprache (isländisch) für Lucene, die sehr gut zu funktionieren scheint.

Einige von denen aussehen recht ordentlich Ideen. Persönlich würde ich nur hinzufügen, einige Tags auf die Abfrage (Query-Transformation), um es unscharf zu machen, oder Sie können die eingebaute FuzzyQuery , die Levenshtein bearbeiten Entfernungen verwendet, die für mispellings helfen würde.

Mit Fuzzy-Suche ' Abfrage Tags ', Levenshtein wird auch verwendet. Betrachten Sie eine Suche nach ‚Auto‘. Wenn Sie die Abfrage zu ändern ‚Auto ~‘, es wird ‚Auto‘ und ‚Autos‘ und so weiter finden. Es gibt noch andere Transformationen auf die Abfrage, die fast alles im Griff sollten Sie benötigen.

Wenn Sie in einem bestimmten Fachgebiet arbeiten (Ich tat dies mit Gartenbau) oder mit einer Sprache, die mit normalen Methoden ergeben spielt schön does't Sie die Abfrage-Protokollierung verwenden könnten eine manuelle stamm Tabelle zu erstellen.

Nur ein Wort erstellen -> Stamm-Mapping für alle Fehlpaarungen können Sie denken / Menschen suchen, dann, wenn die Indizierung oder die Suche jedes Wort ersetzen, die mit dem entsprechenden Stamm in der Tabelle auftritt. Dank Query-Caching ist dies eine ziemlich billige Lösung.

Entstanden ist ein ziemlich Standard Weg, um dieses Problem zu beheben. Ich habe festgestellt, dass der Porter stemmer Weg für Standard-Keyword-Suche zu aggressiv ist. Es endet Wörter zusammen conflating, die unterschiedliche Bedeutungen haben. Versuchen Sie, den KStemmer Algorithmus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top