Распознавание именованных сущностей для NLTK в Python. Идентификация NE

Мне нужно классифицировать слова по частям речи. Как глагол, существительное, наречие и т. Д. Я использовал

nltk.word_tokenize() #to identify word in a sentence 
nltk.pos_tag()       #to identify the parts of speech
nltk.ne_chunk()      #to identify Named entities. 

На выходе получилось дерево. Например,

>>> sentence = "I am Jhon from America"
>>> sent1 = nltk.word_tokenize(sentence )
>>> sent2 = nltk.pos_tag(sent1)
>>> sent3 =  nltk.ne_chunk(sent2, binary=True)
>>> sent3
Tree('S', [('I', 'PRP'), ('am', 'VBP'), Tree('NE', [('Jhon', 'NNP')]), ('from', 'IN'), Tree('NE', [('America', 'NNP')])])

При доступе к элементу в этом дереве я сделал это следующим образом:

>>> sent3[0]
('I', 'PRP')
>>> sent3[0][0]
'I'
>>> sent3[0][1]
'PRP'

Но при доступе к Именованному объекту:

>>> sent3[2]
Tree('NE', [('Jhon', 'NNP')])
>>> sent3[2][0]
('Jhon', 'NNP')
>>> sent3[2][1]    
Traceback (most recent call last):
  File "<pyshell#121>", line 1, in <module>
    sent3[2][1]
  File "C:\Python26\lib\site-packages\nltk\tree.py", line 139, in __getitem__
    return list.__getitem__(self, index)
IndexError: list index out of range

Я получил указанную выше ошибку.

Я хочу получить вывод как ' NE 'похож на предыдущий' PRP ', поэтому я не могу определить, какое слово является именованным объектом. Есть ли способ сделать это с помощью NLTK в python? Если да, опубликуйте команду. Или в древовидной библиотеке есть функция для этого? Мне нужно значение узла «NE»

20
задан Asl506 18 April 2011 в 20:14
поделиться