по умолчанию nltk.pos_tag
был обучен для английского текста, вы должны обучить новый Tagger на alpino
корпус катиться ваш собственный голландский теггер.
Но обратите внимание, что модель будет столь же хороша, как:
- какие данные он обучается на
- , какой алгоритм он тренировался с
От UnigramTagger
и BigramTagger
Например:
>>> 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)]
С 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')
Как отметил @WasiAhmed, это еще один хороший пример: https://github.com/evanmiltenburg/Dutch-tagger и, как @evanmiltenburg указано на GitHub, попробуйте использовать более быстрый taggger в производстве.
EDITED
Чтобы оценить Tagger, вы можете дотягивает test_set
как таковой:
>>> 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:]
Затем используйте функцию tagger.evaluate()
, чтобы получить точность, вход для функции .evaluate()
является то же, что и вход для функции .train()
, то есть список предложений, и каждое предложение представляет собой список из ('word', 'tag')
кортежей:
>>> tagger = PerceptronTagger(load=False)
>>> tagger.train(train_set)
>>> tagger.evaluate(test_set)
0.927672285043738
См. Http://stackoverflow.com/questions/14732465/nltk-tagging-spanish-words-using-a-corpus и https://github.com/alvations/spaghetti-tagger – alvas