НЛТК назвал сущность признанным в голландском
Я пытаюсь извлечь именованные объекты из голландского текста. Я использовал nltk-trainer для обучения тегера и чанка на голландском корпусе conll2002. Однако метод синтаксического анализа от блока не обнаруживает никаких именованных объектов. Вот мой код:
str = 'Christiane heeft een lam.'
tagger = nltk.data.load('taggers/dutch.pickle')
chunker = nltk.data.load('chunkers/dutch.pickle')
str_tags = tagger.tag(nltk.word_tokenize(str))
print str_tags
str_chunks = chunker.parse(str_tags)
print str_chunks
И вывод этой программы:
[('Christiane', u'N'), ('heeft', u'V'), ('een', u'Art'), ('lam', u'Adj'), ('.', u'Punc')]
(S Christiane/N heeft/V een/Art lam/Adj ./Punc)
Я ожидал, что Кристиан будет обнаружена как именованная сущность. Любая помощь?
1 ответ
conll2002
Корпус имеет как испанский, так и голландский текст, поэтому вы должны обязательно использовать fileids
параметр, как в python train_chunker.py conll2002 --fileids ned.train
, Обучение на испанском и голландском будет иметь плохие результаты.
Алгоритм по умолчанию - Chunker на основе Tagger, который плохо работает на conll2002. Вместо этого используйте чанкер на основе классификатора, такой как NaiveBayes, чтобы полная команда могла выглядеть следующим образом (и я подтвердил, что полученный чанкер действительно распознает "Кристиан" как "PER"):
python train_chunker.py conll2002 --fileids ned.train --classifier NaiveBayes --filename ~/nltk_data/chunkers/conll2002_ned_NaiveBayes.pickle