2016-04-05 12 views
0

Ich bin neu in Nltk und Python. Ich habe versucht, die Evaluierungsfunktion zu verwenden, um die Genauigkeit des Textdokuments zu testen, das ich gelesen habe. Das habe ich bisher.mit der Evaluierungsfunktion in Nltk markierte Dokumente

from nltk.tag import UnigramTagger 
    from nltk.corpus import treebank 
    from nltk.tokenize import word_tokenize 
    train_sents = treebank.tagged_sents() 
    tagger = UnigramTagger(train_sents) 
    text1 = "This is the first sentence. Now this is another one! 
       How many do you plan to write?" 
    words = word_tokenize(text1) 
    value = tagger.tag(words) 
    accuracy = tagger.evaluate(words) 

Ich bin nicht in der Lage, die Genauigkeit zu berechnen, mit dieser. Ich erhalte den folgenden Fehler.

ValueError: benötigt mehr als 1 Wert zum Entpacken.

Ich bin mir nicht sicher, wie das zu korrigieren ist. Vielen Dank.

+0

Tagger Auswertung Eingang ist eine Liste von Tupeln =) – alvas

Antwort

0

trainieren und einen UnigramTagger mit NLTK zu verwenden:

>>> from nltk.tag import UnigramTagger 
>>> from nltk.corpus import treebank 
>>> from nltk import word_tokenize 
>>> sent1 = "This is the first sentence." 
>>> train_sents = treebank.tagged_sents() 
>>> tagger = UnigramTagger(train_sents) 
>>> tagger.tag(word_tokenize(sent1)) 
[('This', u'DT'), ('is', u'VBZ'), ('the', u'DT'), ('first', u'JJ'), ('sentence', u'NN'), ('.', u'.')] 

die Tagger zu bewerten, müssen Sie kommentierten Sätze haben die Tags aus dem Tagger zu validieren. Die Eingabe in die UnigramTagger.evaluate() ist eine Liste von Tupeln, wobei das erste Element in dem Tupel das Wort und das zweite Element in dem Tupel das POS ist (d.h. der gleiche Eingabetyp wie die UnigramTagger.train()-Funktion). .

Siehe https://github.com/nltk/nltk/blob/develop/nltk/tag/api.py#L53 Also lassen Sie uns zuerst die Baumbank Sätze in 2 Teile geteilt, 90% und 10%:

>>> train_sents = treebank.tagged_sents() 
>>> treebank_sents = treebank.tagged_sents() 
>>> len(treebank_sents) 
3914 
>>> int(0.9 * len(treebank_sents)) 
3522 
>>> train_sents = treebank.tagged_sents()[:3522] 
>>> test_sents = treebank.tagged_sents()[3522:] 
>>> tagger = UnigramTagger(train_sents) 
>>> tagger.evaluate(test_sents) 
0.8647328244274809 
+0

Vielen Dank für Ihre Antwort. Ich sehe, dass der Befehl 'evaluate' für Daten im Corpus funktioniert. Ich habe mich gefragt, ob es einen Weg gibt, es für meinen Satz zu verwenden, also für Daten, die nicht im Korpus vorhanden sind. –

+0

Sie müssen Ihren Korpus manuell annotieren, um 'evaluate()' – alvas

+0

in Ordnung zu verwenden, danke, ich werde das versuchen. –

Verwandte Themen