2009-11-03 9 views
18

Ich bin auf der Suche nach einer Klasse oder Methode, die eine lange Reihe von vielen 100 Wörter Wörter und Tokenizes, entfernt die Stoppwörter und Stiele für die Verwendung in einem IR-System.Tokenizer, Stoppwortentfernung, Stemming in Java

Zum Beispiel:

„Die große fette Katze, sagte:‚Ihr lustigste Kerl ich weiß‘zum Känguru ...“

die tokenizer die Interpunktion entfernen würde und Rückkehr ein ArrayList von Wörtern

das Stoppwort-Entferner Wörter wie „der“, „zu“, etc

entfernen würde

der Stemmer würde jedes Wort ihre 'Wurzel' reduzieren, zum Beispiel 'am lustigsten' würde lustig werden

Vielen Dank im Voraus.

Antwort

8

AFAIK Lucene kann tun, was Sie wollen. Mit StandardAnalyzer und StopAnalyzer können Sie das Wort entfernen entfernen. In Kombination mit dem Projekt Lucene contrib-snowball (das Arbeiten von Snowball umfasst) können Sie auch die Stammdaten bearbeiten.

Aber ergeben auch diese Antwort berücksichtigen: Stemming algorithm that produces real words

+0

hey! @jitter gehen Lucene hilft nicht?muss spezifischer verlinken. – jsroyal

6

Dies sind Standardanforderungen in Natural Language Processing, also würde ich in solchen Toolkits suchen. 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 „Ihre lustigste Kerl ich weiß“ ist nicht Standard-Syntax und diese macht es schwieriger zu verarbeiten als "Du bist der lustigste Typ, den ich kenne". Nicht unmöglich, aber viel schwieriger. Ich kenne kein System, das "dein" mit "du bist" gleichsetzen würde.

+0

http://en.wikipedia.org/wiki/Natural_language_processing_toolkits – Fedearne

+0

Gibt es eine Themenmodellierung in openNLP? habe das in der Beschreibung nicht gesehen. –

0

Hier ist ein umfassende Liste von NLP tools. Manchmal macht es Sinn, diese selbst zu erstellen, da sie leichter sind und Sie mehr Kontrolle über die inneren Abläufe haben: Verwenden Sie einen einfachen regulären Ausdruck für Tokenisierungen. Für Stoppwörter drücken Sie einfach die Liste oder eine andere Liste zu einem HashSet:

common-english-words.txt

Hier ist eine von vielen Java implementation of porter stemer).

1

Ich habe das Problem mit einer Reihe von Aufgaben, mit denen ich gearbeitet habe, behandelt, also lassen Sie mich einen Tokenizer-Vorschlag geben. Da ich es nicht direkt als Antwort sehe, verwende ich oft edu.northwestern.at.utils.corpuslinguistics.tokenizer.* als meine Familie von Tokenizern. Ich sehe eine Reihe von Fällen, wo ich die PennTreebankTokenizer Klasse verwendet habe. Hier ist, wie Sie es verwenden:

WordTokenizer wordTokenizer = new PennTreebankTokenizer(); 
    List<String> words = wordTokenizer.extractWords(text); 

Der Link zu dieser Arbeit ist here. Nur ein Disclaimer, ich habe keine Verbindung mit Northwestern, der Gruppe oder der Arbeit, die sie machen. Ich bin nur jemand, der den Code gelegentlich verwendet.

+0

Wo kann ich die nordwestlichen Tokenizer herunterladen? – Hector

+0

@Hector Versuchen Sie unter https://bitbucket.org/pibburns/morphadorner/src/9c3188655f6386e65c93f315f86b3a176607c8f7/src/edu/northwestern/at/morphadorner/corpuslinguistics/tokenizer/?at=default. Vielleicht habe ich das falsche Paket gegeben. Nach 4 Jahren ist es schwer zu sehen, ob sich das Paket geändert hat oder ich ursprünglich falsch lag – demongolem