2014-09-09 5 views
6

Derzeit verwende ich 'Lucene' und 'Elasticsearch', und habe nächstes Problem. Ich brauche stemmed Form oder Lemma für diminutive Wort. Zum Beispiel:Diminutive Wörter stemming/Lemmatisierung

  • Hündchen -> Hund
  • kitty -> cat

usw.

Aber ich nächste Ergebnisse erhalten:

  • Hündchen -> doggi
  • kitty -> kitti

Gibt es eine Möglichkeit (nicht wichtig bereit Bibliothek zu verwenden, jeden Algorithmus, Ansatz etc.) root/ursprüngliche Wortform für diminutive Wortformen zu bekommen?

Zielsprache: Russisch. Zum Beispiel:

  • собачка -> собака
  • кошечка -> кошка

Vielen Dank im Voraus!

+0

Welche Art von Kette haben Sie für englische Stemming verwendet? Ich wäre überrascht, wenn Sie das mit 'PorterStemFilter' gemacht hätten. – mindas

+0

Du kannst (und solltest) nicht * cat * aus * kitty * mit Stemming oder Lemmatisierung bekommen: "cat" ist weder das Lemma noch der Stamm von "kitty". –

Antwort

3

Erstens, als eine Randnotiz: Was Sie versuchen, wird in der Regel nicht Stemming oder Lemmatisierung genannt.

Ihre erste Frage würde das Token beobachtet werden Abbildung (zB собачка) in seine normalisierte Form (zB собака) - Naiv, könnte dies durch eine SynonymFilter zu schaffen gemacht werden, die eine SynonymMap Zuordnung zu dimunitive Formen verwendet, um ihre kanonische Formen. Sie werden jedoch wahrscheinlich Probleme mit jeder natürlichen Sprache haben, da nicht alle Ableitungen eindeutig sind: Zum Beispiel könnte Mädel ('Mädchen'/'Lass') eine kleine Form von Magd (ein archaischer Wortbedeutung 'junge Frau'/'Magd') oder von Hergestellt ('Made').

Eine Möglichkeit, diese beiden Formen der Disambiguierung die Wahrscheinlichkeit jeder kanonischen Form im gegebenen Kontext erscheinen zu berechnen wäre (zB der Geschichte des vorangehenden n Tokens) und dann mit der wahrscheinlichsten kanonischen Form der dimunitive Form ersetzen (Verwenden Sie dazu eine maßgeschneiderte TokenFilter) - Siehe z the Wikipedia entry for word-sense disambiguation für verschiedene Ansätze.