Tokenizer, Stoppwort Entfernung, Stemming in Java
-
12-09-2019 - |
Frage
Ich suche nach einer Klasse oder Methode, die eine lange Reihe von vielen 100s von Wörtern und tokenizes nimmt, entfernt die Stoppwörter und Stiele für die Verwendung in einem IR-System.
Zum Beispiel:
"Die große fette Katze, sagte: 'Ihr lustigste Kerl ich weiß' zum Känguru ..."
die tokenizer würde die Interpunktion entfernen und eine ArrayList
von Wörtern zurückkehren
die Stoppwort-Entferner würden Worte wie „die“, „zu“, etc
entfernendie stemmer würde jedes Wort reduzieren die ihre ‚Wurzel‘, zum Beispiel ‚lustigsten‘ würde lustig
Vielen Dank im Voraus.
Lösung
Lucene können tun, was Sie wollen. Mit StandardAnalyzer
und StopAnalyzer
Sie können auf das Stoppwort Entfernung. In Kombination mit dem Lucene contrib-snowball
(die Arbeit umfasst von Schneeball ) Projekt, das Sie zu dem stamm tun können.
Aber ergeben betrachten auch diese Antwort an: Algorithmus abstammend, die produziert echte Worte
Andere Tipps
Dies sind Standardanforderungen in Natural Language Processing, so würde ich in einem solchen Toolkits aussehen. Da Sie Java erfordern würde ich mit OpenNLP starten: http://opennlp.sourceforge.net/
Wenn Sie in anderen Sprachen sehen kann, gibt es auch NLTK (Python)
Beachten Sie, dass „Ihr lustigste Typ, den ich kenne“ keine Standard-Syntax ist, und das macht es schwieriger zu verarbeiten als „Du bist der lustigste Typ, den ich kenne“. Nicht unmöglich, aber sehr viel schwieriger. Ich weiß nicht, von jedem System, das „Ihr“ auf „Sie“.
entspräche Ich habe mit dem Thema auf einer Reihe von Aufgaben behandelt mit denen ich gearbeitet habe, so lassen Sie mich einen tokenizer Vorschlag geben. Da ich es nicht direkt als Antwort gegeben sehen, verwende ich oft edu.northwestern.at.utils.corpuslinguistics.tokenizer.*
als meine Familie von Tokenizer. Ich sehe eine Reihe von Fällen, in denen ich die PennTreebankTokenizer
Klasse verwendet. Hier ist, wie Sie es verwenden:
WordTokenizer wordTokenizer = new PennTreebankTokenizer();
List<String> words = wordTokenizer.extractWords(text);
Der Link zu dieser Arbeit ist hier . Nur ein Haftungsausschluss, habe ich keine Verbindung mit der Northwestern, der Gruppe oder der Arbeit, die sie tun. Ich bin nur jemand, der den Code gelegentlich verwendet.
Hier ist umfassende Liste der NLP-Tools . Manchmal macht es Sinn, diese selbst zu schaffen, wie sie leichter sein wird, und würden Sie mehr Kontrolle das Innenleben haben: mit einfachen regulären Ausdruck für tokenizations. Für nur Stoppwörter in der Liste unten oder eine andere Liste in eine HashSet drücken:
Dies ist eine von vielen Java-Implementierung von Porter Stemer ).