这可能是一个经典的 NLP 问题,但是如何在一堆推文中提取 FULL 实体?
例如,假设有一堆推文提到“波士顿”和“马拉松”,两者都在同一条推文中。我怎么知道我应该提取“波士顿马拉松”,而不仅仅是波士顿或马拉松?
同样,假设有很多推文提到“权力的游戏”。我怎么知道要提取的实体是《权力的游戏》,而不仅仅是《游戏》?
这可能是一个经典的 NLP 问题,但是如何在一堆推文中提取 FULL 实体?
例如,假设有一堆推文提到“波士顿”和“马拉松”,两者都在同一条推文中。我怎么知道我应该提取“波士顿马拉松”,而不仅仅是波士顿或马拉松?
同样,假设有很多推文提到“权力的游戏”。我怎么知道要提取的实体是《权力的游戏》,而不仅仅是《游戏》?
另一件要尝试的事情可能是提取搭配。有关此方法的介绍,请参阅以下文章。
大多数命名实体识别器使用所谓的 IOB(inside-outside-beginning)标记方案正是因为您要询问的场景。例如,句子
John saw Game of Thrones.
应标记为
John/B-PERSON saw/O Game/B-MISC of/I-MISC Thrones/I-MISC.
请注意“权力的游戏”的第二个和第三个标记是如何被标记为在一个命名实体内的,该实体从“游戏”开始。当然,不能保证您使用的标记器会产生这个精确的标记序列。
您可以在NLTK book中阅读有关 IOB 的更多信息。
You can also try with DBpedia-Spotlight endpoint..
我目前正在从事件数据库中提取命名实体。我已经尝试了几个库 NLTK、PHP 脚本等。但我发现最好的是斯坦福 NER:http ://nlp.stanford.edu:8080/ner/ 。
English.all.3class.dissim.crf.ser.gz
<PERSON>John</PERSON> saw Game of Thrones.
英语.conll.4class.dissim.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
指定我想要或不想要的命名实体。