Stanford TokensRegex:如何使用NER注释的标准化输出设置标准化注释?

时间:2015-07-06 00:04:01

标签: stanford-nlp

我正在创建一个TokensRegex注释器来提取建筑物的楼层数(仅举例说明我的问题)。我有一个简单的模式,将“4层”和“4层”识别为我的自定义实体“FLOORS”的实例。 我还想添加一个NormalizedNER注释,使用表达式中使用的数字实体的规范化值,但我无法按照我想要的方式工作:

ner = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation" }
normalized = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation" }
tokens = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$TokensAnnotation" }

ENV.defaults["ruleType"] = "tokens"

{
  pattern: ( ( [ { ner:NUMBER } ] ) /floor(s?)/ ),
  action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $$1.text) ) 
}

上述规则仅将输出中的NormalizedNER字段分别设置为上述示例的数字“4”和“4”的文本值。有没有办法使用NUMBER实体的规范化值(“4”和“4”都是“4.0”)作为我的“FLOORS”实体的规范化值?

提前致谢。

3 个答案:

答案 0 :(得分:1)

尝试更改

action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $$1.text) )

action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $$1.normalized) )

Annotate需要三个参数

  • arg1 =要注释的对象(通常是由$ 0指示的匹配令牌)
  • arg2 =注释字段
  • arg3 = value(在这种情况下,您需要NormalizedNER字段而不是文本字段)

答案 1 :(得分:0)

  

按照你的建议使用$$ 1. normalized,运行输入" The   建筑有七层楼#34;产生以下错误消息:   注释文件test.txt {从七中提取注释时出错   楼层}

可能是因为NamedEntityTagAnnotation所代表的令牌尚未存在$$1密钥。我想,在运行TokensRegex之前,你要确保你的数字代币 - 要么是"四"或" 4"在这种情况下 - 具有相应的标准化值 - " 4.0"在这种情况下 - 设置为NamedEntityTagAnnotation密钥。

  

另外,请你指点我到哪里可以找到更多信息   关于Annotate()可能的第三个参数?你的Javadoc页面   TokensRegex表达式没有列出$$ n.normalized(也许它需要   更新?)

我相信,$$n.normalized将会做的是检索在Java代码中等于coreLabel.get(edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation.class) coreLabel CoreLabel类型{{1}的值的值与TokensRegex中的$$n对应。 这是因为TokensRegex中的以下行:normalized = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation" }

答案 2 :(得分:0)

正确的答案是基于@AngelChang的回答和评论,我只是为了ordeliness而在这里张贴。

必须修改规则,以便第二个Annotate()动作的第三个参数是$1[0].normalized

{
  pattern: ( ( [ { ner:NUMBER } ] ) /floor(s?)/ ),
  action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $1[0].normalized) ) 
}

根据@Angel的评论:

  

$ 1 [0]。normalized是"标准化"第1个第0个标记的字段   捕获组(作为CoreLabel)。 $$ 1让你回来了   MatchedGroupInfo具有"文本"字段但不是规范化的   字段(因为它在实际令牌上)