Der Standard nltk.pos_tag
für englischen Text ausgebildet wurde, würden Sie einen neuen Tagger auf dem alpino
corpus trainieren müssen, um rollen Sie Ihre eigener niederländischer Tagger.
Aber beachten Sie, dass das Modell so gut sein wird wie:
- welche Daten es auf
- trainiert wird, der Algorithmus mit
Von UnigramTagger
und BigramTagger
Beispiel trainiert wird:
>>> from nltk.corpus import alpino as alp
>>> from nltk.tag import UnigramTagger, BigramTagger
>>> training_corpus = alp.tagged_sents()
>>> unitagger = UnigramTagger(training_corpus)
>>> bitagger = BigramTagger(training_corpus, backoff=unitagger)
>>> pos_tag = bitagger.tag
>>> sent = 'NLTK is een goeda taal voor NLP'.split()
>>> pos_tag(sent)
[('NLTK', None), ('is', u'verb'), ('een', u'det'), ('goeda', None), ('taal', u'noun'), ('voor', u'prep'), ('NLP', None)]
Mit PerceptronTagger
:
>>> from nltk.tag import PerceptronTagger
>>> from nltk.corpus import alpino as alp
>>> training_corpus = list(alp.tagged_sents())
>>> tagger = PerceptronTagger(load=True)
>>> tagger.train(training_corpus)
>>> sent = 'NLTK is een goeda taal voor het leren over NLP'.split()
>>> tagger.tag(sent)
[('NLTK', u'noun'), ('is', u'verb'), ('een', u'det'), ('goeda', u'adj'), ('taal', u'noun'), ('voor', u'prep'), ('het', u'det'), ('leren', u'noun'), ('over', u'prep'), ('NLP', u'noun')
Wie @WasiAhmed erwähnt, dies ist ein weiteres gutes Beispiel: https://github.com/evanmiltenburg/Dutch-tagger und als @evanmiltenburg auf der GitHub angegeben, versucht, eine schnellere taggger in der Produktion zu verwenden.
EDITED
einen Tagger zu bewerten, können Sie ein test_set
als solches durchhalten:
>>> from nltk.tag import PerceptronTagger
>>> from nltk.corpus import alpino as alp
>>> alp_tagged_sents = list(alp.tagged_sents())
>>> len(alp_tagged_sents)
7136
>>> last_train_sent = int(len(alp_tagged_sents)/10 * 9)
>>> train_set = alp_tagged_sents[:last_train_sent]
>>> test_set = alp_tagged_sents[last_train_sent:]
dann die tagger.evaluate()
Funktion verwenden, um die Genauigkeit zu erhalten, der Eingang für die .evaluate()
Funktion ist das gleiche wie die Eingabe für die .train()
Funktion, dh eine Liste von Satz, und jeder Satz ist eine Liste von ('word', 'tag')
Tupel:
>>> tagger = PerceptronTagger(load=False)
>>> tagger.train(train_set)
>>> tagger.evaluate(test_set)
0.927672285043738
Siehe http://stackoverflow.com/questions/14732465/nltk-tagging-spanish-words-using-a-corpus und https://github.com/alvations/spaghetti-tagger – alvas