如何为CoreNLP提供一些预先标记的命名实体?

2024-03-28 15:45:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用standfordcorenlp来提取引用,并开始处理预标记文本的依赖性。我最终希望在相关命名实体之间建立图节点和边。我使用python,但是使用nltk的java函数调用斯坦福大学.StanfordCoreNLP管道“直接jar(这也是nltk在幕后所做的)。在

我的预标记文本采用以下格式:

PRE-LABELED:  During his youth, [PERSON: Alexander III of Macedon] was tutored by [PERSON: Aristotle] until age 16.  Following the conquest of [LOCATION: Anatolia], [PERSON: Alexander] broke the power of [LOCATION: Persia] in a series of decisive battles, most notably the battles of [LOCATION: Issus] and [LOCATION: Gaugamela].  He subsequently overthrew [PERSON: Persian King Darius III] and conquered the [ORGANIZATION: Achaemenid Empire] in its entirety.

我试图自己将句子标记化,构建一个IOB格式的元组列表:[(“During”,“O”),(“his”,“O”),(“youth”,“O”),(“Alexander”,“B-PERSON”),(“III”,“I-PERSON”),…]

不过,最初我不能把这些标记为核心词的句子,作为一个新的标记,我不能把它们命名为新的符号。很明显,我试着简单地剥离我的标签,让CoreNLP自己来做,但是CoreNLP在查找命名实体方面不如人类标记的预标记文本好。在

我需要如下输出。我知道用这种方式使用依赖关系来获取边是很困难的,但是我需要看看我能达到什么程度。在

^{pr2}$

我如何向CoreNLP提供一些预先标识的命名实体,并仍然获得有关其他命名实体、共指引用和基本依赖项的帮助?

请注意,这不是NLTK Named Entity Recognition with Custom Data的副本。我不想用预先标记的NER训练一个新的分类器,我只想在运行同指(包括提及)和对给定句子的依赖时添加CoreNLP。在


Tags: ofthe标记文本实体格式location命名
1条回答
网友
1楼 · 发布于 2024-03-28 15:45:02

答案是用Additional TokensRegexNER Rules生成一个规则文件。在

我用正则表达式把标记的名字分组。在此基础上,我构建了一个rules temp文件,并用-ner.additional.regexner.mapping mytemprulesfile传递给corenlp jar。在

Alexander III of Macedon    PERSON      PERSON,LOCATION,ORGANIZATION,MISC
Aristotle                   PERSON      PERSON,LOCATION,ORGANIZATION,MISC
Anatolia                    LOCATION    PERSON,LOCATION,ORGANIZATION,MISC
Alexander                   PERSON      PERSON,LOCATION,ORGANIZATION,MISC
Persia                      LOCATION    PERSON,LOCATION,ORGANIZATION,MISC
Issus                       LOCATION    PERSON,LOCATION,ORGANIZATION,MISC
Gaugamela                   LOCATION    PERSON,LOCATION,ORGANIZATION,MISC
Persian King Darius III     PERSON      PERSON,LOCATION,ORGANIZATION,MISC
Achaemenid Empire           ORGANIZATION    PERSON,LOCATION,ORGANIZATION,MISC

为了可读性,我已将此列表对齐,但这些值是制表符分隔的值。

一个有趣的发现是,一些多单词的预标记实体保持原来的多单词标记,而运行corenlp而不使用规则文件有时会将这些标记拆分为单独的实体。在

我本来想明确地标识命名实体标记,认为这会使引用更容易,但我想现在就可以了。不管怎样,在一个文档中实体名相同但不相关的频率是多少?在

示例(执行需要约70秒)

^{pr2}$

输出

{'id': 0, 'label': 'Alexander III of Macedon', 'tag': 'PERSON'}
{'id': 1, 'label': 'Aristotle', 'tag': 'PERSON'}
{'id': 2, 'label': 'his', 'tag': 'PERSON'}
{'id': 3, 'label': 'Anatolia', 'tag': 'LOCATION'}
{'id': 4, 'label': 'Alexander', 'tag': 'PERSON'}
{'id': 5, 'label': 'Persia', 'tag': 'LOCATION'}
{'id': 6, 'label': 'Issus', 'tag': 'LOCATION'}
{'id': 7, 'label': 'Gaugamela', 'tag': 'LOCATION'}
{'id': 8, 'label': 'Persian King Darius III', 'tag': 'PERSON'}
{'id': 9, 'label': 'Achaemenid Empire', 'tag': 'ORGANIZATION'}
{'id': 10, 'label': 'He', 'tag': 'PERSON'}

相关问题 更多 >