如何对 NER 标签进行分组以便从整个句子中获取数据?

How to group up NER tags in order to get data from sentence as a whole?

通过 CoreNLP 库,在 CoreLabel 上调用 ner() 时,我收到一个指示其命名实体标签的字符串(例如 PERSONDATE)。

但是,我不知道如何将句子中的标记相互比较。例如:(用反引号包围的标记文本)

`Ellen` PERSON
`Wexler `PERSON
`,` O
`February` DATE
`9` DATE
`,` DATE
`2016` DATE

通过 CoreNLP,如何将人物标签分组以获得姓名 Ellen Wexler?或者日期标签以获得 February 9, 2016,或者我最终可以在 Java 中变成 Date/Calendar 对象的另一种表示形式? 我已经查看了给出的示例 here,但是这只会找到每个单独核心标签的 ner 标签。它没有为我提供一种将连续的、相同的 ner 标签组合在一起的方法。

我试过的: 我写了一个 for 循环,它遍历句子并找到 X 个连续的、相同的 ner 标签(所以如果 X 是 2 并且 ner 标签是 PERSON,它会找到 2 个连续的 PERSON)。在这种情况下,即 Ellen Wexler。然而,当标点符号发挥作用时,这种情况就失效了,因为根据上下文,标点符号被赋予其相邻标记的 ner 标签。此外,必须有一些方法可以通过 CoreNLP 来做到这一点。

我的研究This 类似的问题还没有人回答。 CoreNLP 主页没有提供答案,因为它只提供了有关单个核心分析的示例 labels/tokens。

更传统的做法是使用 entitymentions 注释器。

在刚刚发布的 3.9.0 版本中,ner 注释器将自动创建实体提及,其中 link 个标记一起属于同一实体提及。

您可以查看新 API 的一些示例用法,了解如何轻松访问实体提及项。此 class 的某些功能不在网站上的 3.9.0 测试版中,但很快就会添加到更新版本中。

有用的演示代码:

https://github.com/stanfordnlp/CoreNLP/blob/master/src/edu/stanford/nlp/examples/BasicPipelineExample.java