Классификатор семи классов не дает желаемых результатов в StanfordNLP python

Я пытаюсь использовать Стэнфордский распознаватель сущностей. Я хочу использовать классификатор 7 классов, потому что я даже хочу определить время (или дату) и другие вещи в предложении. При вводе предложения:

"He was born on October 15, 1931 at Dhanushkothi in the temple town Rameshwaram in Tamil Nadu."

в онлайн-демонстрации на сайте Stanford NLP (http://nlp.stanford.edu:8080/ner/process), он правильно классифицирует, как видно на этом изображении (демонстрация на сайте Стэнфорда для приведенной выше строки):

Демо на сайте Стэнфорда для строки выше

Но когда я пытаюсь запустить код в своей системе с помощью NLTL и StanfordTagger, я получаю неверный результат. Я получаю вывод как:

[(u'He', u'O'), (u'was', u'O'), (u'born', u'O'), (u'on', u'O'), (u'1931-10-15', u'O'), 
(u'at', u'O'), (u'Dhanushkothi', u'O'), (u'in', u'O'), (u'the', u'O'), 
(u'temple', u'O'), (u'town', u'O'), (u'Rameshwaram', u'O'), (u'in', u'O'), 
(u'Tamil', u'ORGANIZATION'), (u'Nadu', u'ORGANIZATION'), (u'.', u'O')]

Здесь неправильно указывается дата как «другое» и даже Тамил Наду как организация, а не местонахождение. Код, который я использовал, приведен ниже:

from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.tag import StanfordNERTagger

st = StanfordNERTagger('english.muc.7class.distsim.crf.ser.gz','stanford-ner.jar')

i= "He was born on October 15, 1931 at Dhanushkothi in the temple town Rameshwaram in Tamil Nadu."

words = nltk.word_tokenize(i)
namedEnt = st.tag(words)

print namedEnt 

Может ли кто-нибудь указать ошибку, которую я делаю (если есть), или какой-либо другой способ определить место и время в предложении? Я новичок в НЛП, и любая помощь в этом будет оценена по достоинству.


person LSahni    schedule 06.01.2017    source источник


Ответы (1)


Я попытался запустить ваш код и обнаружил некоторые проблемы с word_tokenize.

Попробуйте этот код:

from nltk import sent_tokenize, word_tokenize
from nltk.tag import StanfordNERTagger

st = StanfordNERTagger('english.muc.7class.distsim.crf.ser.gz','stanford-ner.jar')

i= "He was born on October 15, 1931 at Dhanushkothi in the temple town Rameshwaram in Tamil Nadu."

words = word_tokenize(i)
namedEnt = st.tag(words)

print namedEnt

Вот мой результат:

[(u'He', u'O'), (u'was', u'O'), (u'born', u'O'), (u'on', u'O'), (u'October', u'DATE'), (u'15', u'DATE'), (u',', u'DATE'), (u'1931', u'DATE'), (u'at', u'O'), (u'Dhanushkothi', u'O'), (u'in', u'O'), (u'the', u'O'), (u'temple', u'O'), (u'town', u'O'), (u'Rameshwaram', u'O'), (u'in', u'O'), (u'Tamil', u'ORGANIZATION'), (u'Nadu', u'ORGANIZATION'), (u'.', u'O')]
person Anish    schedule 12.01.2017