微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中命名为NLTK的实体识别标识NE

如何解决在Python中命名为NLTK的实体识别标识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\'),[(\'America\',\'NNP\')])])
当访问该树中的元素时,我按如下方式进行操作:
>>> sent3[0]
(\'I\',\'PRP\')
>>> sent3[0][0]
\'I\'
>>> sent3[0][1]
\'PRP\'
但是,当访问命名实体时:
>>> sent3[2]
Tree(\'NE\',\'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
我收到上述错误。 我想要得到的输出类似于前一个\'PRP \'的\'NE \',因此我无法确定哪个单词是命名实体。 有没有办法用python中的NLTK做到这一点?如果是这样,请发布命令。还是树库中有一个函数可以做到这一点?我需要节点值\'NE \'

解决方法

这个答案可能不正确,在这种情况下,我将其删除,因为我没有在此处安装NLTK进行尝试,但是我认为您可以这样做:
   >>> sent3[2].node
   \'NE\'
sent3[2][0]
返回树的第一个子节点,而不是节点本身 编辑:我回到家时尝试过这种方法,确实可以工作。,下面是我的代码:
chunks = ne_chunk(postags,binary=True)
for c in chunks:
  if hasattr(c,\'node\'):
    myNE.append(\' \'.join(i[0] for i in c.leaves()))
,这会工作
for sent in chunked_sentences:
  for chunk in sent:
    if hasattr(chunk,\"label\"):
        print(chunk.label())
,我同意bdk
sent3[2].node
O / P-\'NE \' 我认为nltk中没有任何功能可以执行上述解决方案,但作为参考,您可以在这里查看 对于循环问题,你可以做:-
 for i in range(len(sent3)):
     if \"NE\" in str(sent3[i]):
          print sent3[i].node
我已经在nltk中执行了它,并且效果很好。,现在send3 [2] .node已过时。 使用send3 [2] .label()代替

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。