Frage

Ich brauche einen Absatz des Textes zu nehmen und daraus eine Liste von „Tags“ zu extrahieren. Das meiste ist ziemlich geradlinig. Allerdings brauche ich etwas Hilfe jetzt die resultierende Wortliste stammen Duplikate zu vermeiden. Beispiel: Gemeinschaft / Gemeinschaften

Ich habe eine Implementierung von Porter Stemmer-Algorithmus (Ich schreibe in PHP by the way) verwendet

http://tartarus.org/~martin/PorterStemmer/php.txt

Das funktioniert, bis zu einem Punkt, ist aber nicht „real“ Worte zurück. Das obige Beispiel ist dämmt „commun“.

Ich habe versucht, "Schneeball" (in einem anderen Stack-Überlauf-Thread vorgeschlagen).

http://snowball.tartarus.org/demo.php

Für mein Beispiel (Gemeinde / Gemeinden), Schneeball Stämme auf "communiti".

Frage

Gibt es andere ergeben Algorithmen, die dies tun wird? Hat jemand dieses Problem gelöst?

Mein aktuelles Denken ist, dass ich einen Algorithmus ergibt Duplikate zu vermeiden verwenden könnte und dann das kürzeste Wort nimmt mir das eigentliche Wort zu begegnen angezeigt werden soll.

War es hilfreich?

Lösung

Der Kern hier Problem ist, dass stamm Algorithmen arbeiten auf einer Laut Basis rein auf der Grundlage der Rechtschreibregeln der Sprache ohne tatsächliches Verständnis der Sprache, mit denen sie arbeiten. Um echte Worte zu produzieren, werden Sie wahrscheinlich die stemmer die Ausgabe mit irgendeiner Form von Lookup-Funktion verschmelzen müssen konvertieren die zurück auf reale Wörter stammt. Ich kann im Grunde zwei mögliche Wege finden, dies zu tun:

  1. Suchen oder ein großes Wörterbuch erstellen, die wieder zu einem tatsächlichen Wort jeden möglichen Stamm abbildet. (Z.B. communiti -> Community)
  2. Erstellen Sie eine Funktion, die jeden Stamm auf eine Liste der Wörter vergleicht, die zu diesem Stamm wurden reduziert und versucht, zu bestimmen, welche am ähnlichsten ist. (Zum Beispiel „communiti“ gegen „Gemeinschaft“ und „Communities“ in einer solchen Art und Weise zu vergleichen, dass „Gemeinschaft“ wird als weitere ähnliche Option erkannt werden)

Ich persönlich denke, die Art, wie ich es eine dynamische Form # 1 wäre tun würde, ein eigenes Wörterbuch-Datenbank durch die Aufnahme jedes Wort zusammen mit untersucht den Aufbau, was es dämmt und dann unter der Annahme, dass die häufigste Wort ist das ein das sollte verwendet werden. (ZB Wenn mein Körper von Quelltext verwendet „Communities“ häufiger als „Gemeinschaft“, dann map communiti -> Gemeinden.) Ein Wörterbuch-basierten Ansatz in der Regel genauer sein wird und den Aufbau auf der Grundlage des stemmer Eingang wird Ergebnisse liefern individuell auf Ihre Texte, mit der Hauptnachteil der Platzbedarf ist, die in diesen Tagen im allgemeinen kein Problem ist.

Andere Tipps

Wenn ich richtig verstehe, dann, was Sie brauchen, ist kein stemmer aber ein Lemmatizer. Lemmatizer ist ein Werkzeug, mit dem Wissen über Endungen wie -en -ed , etc. und außergewöhnliche Wortformen wie geschrieben , usw. Lemmatizer bilden die Eingabewortform zu seinem Lemma, die ein „echtes“ Wort sein garantiert.

Es gibt viele lemmatizers für Englisch, ich habe allerdings nur verwendet morpha. Morpha ist nur eine große lex-Datei, die Sie in eine ausführbare Datei kompilieren können. Anwendungsbeispiel:

$ cat test.txt 
Community
Communities
$ cat test.txt | ./morpha -uc
Community
Community

Sie können morpha von http erhalten: // www .informatics.sussex.ac.uk / Forschung / Gruppen / nlp / carroll / morph.html

Hey, weiß ich nicht, ob das vielleicht zu spät ist, aber es gibt nur ein PHP-Skript stammt, die echte Wörter produziert: http: // phpmorphy .sourceforge.net / - es hat mir Alter, es zu finden. Alle anderen Abbeermaschinen haben danach zusammengestellt und sogar werden sie arbeiten nur nach Porter-Algorithmus, der Stämme erzeugt, nicht Lemmata (das heißt community = communiti). PhpMorphy man funktioniert sehr gut, es ist einfach zu installieren und zu initialisieren und hat Englisch, Russisch, Deutsch, Ukrainisch und Estnisch Wörterbücher. Es kommt auch mit einem Skript, das Sie andere Wörterbuch kompilieren können. Die Dokumentation ist in russischer Sprache, sondern setzte es durch Google übersetzen und es sollte einfach sein.

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