2015-05-03 15 views
6

Nach mehreren anderen Posts [z. Detect English verb tenses using NLTK, Identifying verb tenses in python, Python NLTK figure out tense] Ich schrieb den folgenden Code angespannt einen Satzes in Python zu bestimmen, unter Verwendung von POS-Tagging:Bestimmen der Zeitform eines Satzes Python

from nltk import word_tokenize, pos_tag 

def determine_tense_input(sentance): 
    text = word_tokenize(sentance) 
    tagged = pos_tag(text) 

    tense = {} 
    tense["future"] = len([word for word in tagged if word[1] == "MD"]) 
    tense["present"] = len([word for word in tagged if word[1] in ["VBP", "VBZ","VBG"]]) 
    tense["past"] = len([word for word in tagged if word[1] in ["VBD", "VBN"]]) 
    return(tense) 

einen Wert für die Nutzung der Vergangenheit/Gegenwart/Zukunft Verben Dies gibt, die ich nehme in der Regel dann der Maximalwert von als die Zeit der Sentanz. Die Genauigkeit ist mäßig gut, aber ich frage mich, ob es einen besseren Weg dafür gibt.

Zum Beispiel, gibt es jetzt zufällig ein Paket geschrieben, das mehr auf das Extrahieren der Zeitform einer Sentance gewidmet ist? [Anmerkung - 2 der 3 Stapelüberlaufpfosten sind 4 Jahre alt, so dass sich die Dinge jetzt vielleicht geändert haben]. Oder alternativ, sollte ich einen anderen Parser aus nltk verwenden, um die Genauigkeit zu erhöhen? Wenn nicht, hoffe der obige Code kann jemand anderem helfen!

+0

Vielleicht können Sie versuchen, einen feinkörnigeren Tagger zu finden. Entweder indem Sie Ihr eigenes Training anhand eines markierten Corpus durchführen oder indem Sie etwas aus Stanford verwenden, z. Ich finde, dass für einige Zwecke (wie diese) das grobe Tagging von nltk.pos_tag (oder die verfügbaren Korpora in nltk_data) nicht wirklich viel hilft. Die Verwendung eines Taggers mit anderen Klassen hat mir in ähnlichen Szenarien schon geholfen. Dies alles hängt von der Verfügbarkeit von normalerweise ziemlich domänenspezifischen annotierten Korpora ab. – Igor

+1

Für einen genaueren Ansatz müssen Sie zwischen Primär- und Sekundärform unterscheiden. Meine Antwort zu einer ähnlichen Frage könnte helfen: http://Stackoverflow.com/a/22146151/1011791 –

+0

@ChthonicProject - Danke - Ich hatte diesen Beitrag nicht gesehen, und es hilft mir, in die richtige Richtung zu zeigen – kyrenia

Antwort

0

Sie können Ihren Ansatz auf verschiedene Arten stärken. Du könntest mehr über die Grammatik des Englischen nachdenken und einige Regeln hinzufügen, die auf dem basieren, was du beobachtest; oder Sie könnten den statistischen Ansatz forcieren, weitere (relevante) Merkmale extrahieren und das ganze Los auf einen Klassifikator werfen. Die NLTK gibt Ihnen viele Klassifikatoren, mit denen Sie spielen können, und sie sind im NLTK-Buch gut dokumentiert.

Sie können das Beste aus beiden Welten haben: Handgeschriebene Regeln können in Form von Features vorliegen, die dem Klassifikator zugeführt werden, der entscheidet, wann er sich darauf verlassen kann.

1

Sie könnten Stanford Parser verwenden, um eine Abhängigkeitsanalyse des Satzes zu erhalten. Die Wurzel der Abhängigkeitsparse ist das "primäre" Verb, das den Satz definiert (ich bin mir nicht sicher, was der spezifische linguistische Ausdruck ist). Sie können dann das POS-Tag für dieses Verb verwenden, um seine Zeitform zu finden und diese zu verwenden.

Verwandte Themen