nlp - 具有正则表达式的正规表达式 命名实体识别: NLTK

  显示原文与译文双语对照的内容

我一直在玩NLTK工具包。 我经常遇到这个问题,在网上寻找解决方案,但我没有得到满意的答案。 所以我把我的查询放在这里。

许多时候,NER不把连续的NNPs标记为一个网络。 我认为编辑NER使用RegexpTagger也可以提高。

例如:

输入:

巴拉克。奥巴马是一个伟大的人。

输出:

Tree,Tree,Tree,(',(',,,'),,。

位置

输入:

前副总裁迪克Cheney告诉保守广播主持人劳拉 Ingraham,他在时要与Darth进行比较。

输出:

,在 vbd ('conservative honored honored compared nn nn compared compared Tree conservative Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree Tree compared compared compared compared compared compared compared compared compared compared compared

这里是 vice/NNP,总统/NNP,( 。NNP/,cheney/NNP ),被正确提取。

所以我认为如果首先使用 nltk.ne_chunk,那么如果两个连续树是 NNP,那么这两个实体都有很高。

任何建议都会非常感激。 我在寻找我方法中的缺陷。

谢谢。

时间: 原作者:


from nltk import ne_chunk, pos_tag, word_tokenize


from nltk.tree import Tree



def get_continuous_chunks(text):


 chunked = ne_chunk(pos_tag(word_tokenize(text)))


 prev = None


 continuous_chunk = []


 current_chunk = []



 for i in chunked:


 if type(i) == Tree:


 current_chunk.append("".join([token for token, pos in i.leaves()]))


 elif current_chunk:


 named_entity ="".join(current_chunk)


 if named_entity not in continuous_chunk:


 continuous_chunk.append(named_entity)


 current_chunk = []


 else:


 continue



 return continuous_chunk



txt ="Barack Obama is a great person." 


print get_continuous_chunks(txt)



[out]:

 
['Barack Obama']



 

但是要注意,如果连续块不应该是单个的,那么你将把多个into组合在一起。 我不能想象这样的例子,但我相信它会发生。 但是如果它们不连续,那么上面的脚本就很好:


>>> txt ="Barack Obama is the husband of Michelle Obama." 


>>> get_continuous_chunks(txt)


['Barack Obama', 'Michelle Obama']



原作者:
...