实体提及检测不适用于TokensRegex

时间:2019-01-11 17:24:54

标签: stanford-nlp

实体化似乎无效。我遵循此处提到的类似方法,将entitymentions添加为annotators

之一

How can I detect named entities that have more than 1 word using CoreNLP's RegexNER?

输入:“这是您的24美元”

我有一个TokensRegex:

{ ruleType: "tokens", pattern: ([{ner:"NUMBER"}] + [{word:"USD"}]), action: Annotate($0, ner, "NEW_MONEY"), result: "NEW_MONEY_RESULT" }

初始化管道:

props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,tokensregex,entitymentions");
props.setProperty("tokensregex.rules", "basic_ner.rules");

我仍然有2个CoreEntityMention而不是1个。

两者对于edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation具有相同的值,即NEW_MONEY

但是它们有不同的edu.stanford.nlp.ling.CoreAnnotations$EntityMentionIndexAnnotation

0的{​​{1}}

24 for 1

由于它们都具有相同的实体标签注释,因此如何合并它们。

使用

USD版的斯坦福图书馆。

1 个答案:

答案 0 :(得分:1)

问题在于数字具有标准化的名称实体标签。

这是一个可以工作的规则文件:

# these Java classes will be used by the rules
ner = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation" }
normNER = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation" }
tokens = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$TokensAnnotation" }

# rule for recognizing company names
{ ruleType: "tokens", pattern: ([{ner:"NUMBER"}] [{word:"USD"}]), action: (Annotate($0, ner, "NEW_MONEY"), Annotate($0, normNER, "NEW_MONEY")), result: "NEW_MONEY" }

您不应在末尾添加额外的tokensregex注释符和entitymentions注释符。 ner注释器将它们作为子注释器运行。

这是一个示例命令:

java -Xmx10g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -ner.additional.tokensregex.rules new_money.rules -file new_money_example.txt -outputFormat text

更多文档在这里:

https://stanfordnlp.github.io/CoreNLP/tokensregex.html

https://stanfordnlp.github.io/CoreNLP/ner.html