Я проверил предыдущие связанные темы, но не решил свою проблему. Я написал код, чтобы получить NER из текста.nltk NER word extract
text = "Stallone jason's film Rocky was inducted into the National Film Registry as well as having its film props placed in the Smithsonian Museum."
tokenized = nltk.word_tokenize(text)
tagged = nltk.pos_tag(tokenized)
namedEnt = nltk.ne_chunk(tagged, binary = True)
print namedEnt
namedEnt = nltk.ne_chunk(tagged, binary = False)
, который дает этот короткий результата
(S
(NE Stallone/NNP)
jason/NN
's/POS
film/NN
(NE Rocky/NNP)
was/VBD
inducted/VBN
into/IN
the/DT
(NE National/NNP Film/NNP Registry/NNP)
as/IN
well/RB
as/IN
having/VBG
its/PRP$
film/NN
props/NNS
placed/VBN
in/IN
the/DT
(NE Smithsonian/NNP Museum/NNP)
./.)
в то время как я ожидаю только NE в результате, как
Stallone
Rockey
National Film Registry
Smithsonian Museum
, как добиться этого?
UPDATE
result = ' '.join([y[0] for y in x.leaves()]) for x in namedEnt.subtrees() if x.node == "NE"
print result
дает ошибку Syntext, что правильный способ, чтобы написать это?
UPDATE2
текст = «фильм Сталлоне Ясона Рокки был введен в Национальный реестр кинокартин, а также с его фильма реквизит помещается в Смитсоновском музее.»
tokenized = nltk.word_tokenize(text)
tagged = nltk.pos_tag(tokenized)
namedEnt = nltk.ne_chunk(tagged, binary = True)
print namedEnt
np = [' '.join([y[0] for y in x.leaves()]) for x in namedEnt.subtrees() if x.node == "NE"]
print np
ошибка:
np = [' '.join([y[0] for y in x.leaves()]) for x in namedEnt.subtrees() if x.node == "NE"]
File "/usr/local/lib/python2.7/dist-packages/nltk/tree.py", line 198, in _get_node
raise NotImplementedError("Use label() to access a node label.")
NotImplementedError: Use label() to access a node label.
поэтому я попытался с
np = [' '.join([y[0] for y in x.leaves()]) for x in namedEnt.subtrees() if x.label() == "NE"]
, которая дает пуста результата
Большое спасибо, но как это использовать? Я обновил вопрос, по-прежнему получаю ошибку с этим – puncrazy
Его понимание списка, поэтому вам нужно встроить его в '[]', как 'result = ['. .Join ([y [0] для y в x.leaves ()]) для x в namedEnt.subtrees(), если x.node == "NE"] ' – Phani
Также используйте это с' binary = True' – Phani