Ich muss alle englischen Verben aus einem gegebenen Text extrahieren und ich frage mich, wie ich das machen könnte ... Auf den ersten Blick ist es meine Idee, reguläre Ausdrücke zu verwenden, da alle englischen Zeitformen den Mustern folgen, aber vielleicht gibt es eine andere Möglichkeit, dies zu tun. Was ich dachte, ist einfach:
Was denkst du? Ich denke, das ist kein effizienter Weg, aber ich kann mir keinen anderen vorstellen.
Vielen Dank im Voraus!
PS:
Sprachteil-Tagger
Das Identifizieren und dann Extrahieren aller Verben in einem Text ist sehr einfach mit einem < stark> Sprachteil (POS) -Tagger . Solche Tagger bezeichnen alle Wörter in einem Text mit Wortarten, die angeben, ob es sich um Verben, Substantive, Adjektive, Adverbien usw. handelt. Moderne POS-Tagger sind sehr genau. Zum Beispiel, Toutanova et al. 2003 berichtet Stanfords Open-Source-POS-Tagger weist den Newswire-Daten das korrekte Tag 97,24% der Zeit zu zu.
POS-Tagging durchführen
Java Wenn Sie Java verwenden, ist das Stanford-Protokoll ein gutes Paket für das POS-Tagging -linearer Wortart-Tagger . Matthew Jockers hat ein tolles Tutorial zur Verwendung dieses Taggers zusammengestellt, das Sie hier finden können.
Python Wenn Sie Python bevorzugen, können Sie den POS-Tagger verwenden, der im Natural Language Toolkit (nltk) enthalten ist. . Ein Code-Snippet, das zeigt, wie das POS-Tagging mit diesem Paket durchgeführt wird, finden Sie unten:
%Vor% Die resultierenden POS-markierten Token sind ein Array von Tupeln, wobei der erste Eintrag in jedem Tupel die Identität des markierten Wortes ist und der zweite Eintrag das POS-Tag des Wortes ist, z. Für das obige Code-Snippet wird pos_tagged_tokens
auf:
Den Tag-Satz verstehen
Sowohl der Stanford POS-Tagger als auch die NLTK verwenden den Penn Treebank-Tagsatz . Wenn Sie nur daran interessiert sind, die Verben zu extrahieren, ziehen Sie alle Wörter heraus, die ein POS-Tag haben, das mit einem "V" beginnt (z. B. VB, VBD, VBG, VBN, VBP und VBZ).
Parsen natürlicher Sprache mit Regex ist unmöglich. Vergiss es.
Als ein drastisches Beispiel: Wie finden Sie die Verben (mit Sternchen markiert) in diesem Satz?
Buffalo Buffalo Buffalo Buffalo Büffel * Büffel * Büffel Büffel
Während Sie extreme Fälle wie diesen kaum finden werden, gibt es Dutzende von Verben, die auch Substantive, Adjektive usw. sein können, wenn Sie nur auf das Wort schauen.
Sie benötigen einen Parser für natürliche Sprache wie Stanford NLP . Ich habe noch nie einen benutzt, also weiß ich nicht, wie gut deine Ergebnisse sein werden, aber besser als mit Regex kann ich dir das sagen.
Dies ist eine sehr schwierige Aufgabe in NLP (Natural Language Processing). Reguläre Ausdrücke auf eigene Faust werden nicht ausreichen. Nehmen Sie zum Beispiel das Wort "Training" - es kann entweder als Verb oder Nomen verwendet werden ("Ich gehe zur Trainingseinheit"). Offensichtlich wird ein regulärer Ausdruck nicht in der Lage sein, den Unterschied zwischen den beiden zu unterscheiden. Es gibt auch Probleme, das "-ed" ist eine übliche Art, Vergangenheitsverben zu beenden, wird aber im Falle von "angewidert" scheitern.
Es gibt einige Techniken, die Ihnen gute (nicht perfekte, aber gute) Hinweise geben können, ob ein gegebenes Wort ein Verb ist oder nicht - sie können auch sehr rechenintensiv sein.
Die erste Frage, die Sie sich stellen sollten (meiner Meinung nach), ist die Qualität der Antwort im Vergleich zur Bearbeitungszeit.
Obwohl ein Jahr später, aber ich fand ein sehr nützliches Werkzeug von der Northwestern University namens MorphAdorner .
Es behandelt alle Arten von Situationen, z.B. Lemmatisierung, Spracherkennung, Namenserkennung, Parser, Satzteiler, etc ..
Einfach zu bedienen.