如何从一堆文本中提取完整实体(不是部分实体)
问题描述:
这可能是一个经典的NLP问题,但是如何在一堆推文中提取完整实体?如何从一堆文本中提取完整实体(不是部分实体)
例如,假设有一堆推文提到“波士顿”和“马拉松”,都在同一条推文中。我怎么知道我应该提取“波士顿马拉松”,而不是波士顿或马拉松?
同样,假设有很多鸣叫提到“权力的游戏”。我怎么会知道要提取的实体是权力的游戏,而不仅仅是游戏?
答
大多数命名实体识别器都使用所谓的IOB(内部 - 外部 - 开始)标记方案,这完全是因为您所询问的场景。例如,句子
John saw Game of Thrones.
应被标记为
John/B-PERSON saw/O Game/B-MISC of/I-MISC Thrones/I-MISC.
注意如何“权力的游戏”的第二个和第三个令牌被标记为被命名实体,它开始于“游戏内”。当然,不能保证你使用的标签器会产生这个确切的标签序列。
您可以在NLTK book中了解更多关于IOB的信息。
答
我目前正在从事件DATABSE提取命名实体。我已经尝试过几个库NLTK,PHP脚本等。但我找到的最好的是斯坦福大学NER:http://nlp.stanford.edu:8080/ner/。
english.all.3class.distsim.crf.ser.gz
<PERSON>John</PERSON> saw Game of Thrones.
english.conll.4class.distsim.crf.ser.gz
John saw <ORGANIZATION>Game of Thrones</ORGANIZATION>.
简单地忽略这个分类的类型。
我使用不同的分类器从文本中提取实体。从那以后,我使用斯坦福解析器:http://nlp.stanford.edu:8080/parser/
类型化的依赖性,倒塌
nsubj(saw-2, John-1)
root(ROOT-0, saw-2)
dobj(saw-2, Game-3)
prep_of(Game-3, Thrones-5)
http://nlp.stanford.edu/software/dependencies_manual.pdf
指定我想还是不其命名实体。