首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯坦福大学TokensRegex:如何使用NER注释的规范化输出设置规范化注释?

斯坦福大学TokensRegex:如何使用NER注释的规范化输出设置规范化注释?
EN

Stack Overflow用户
提问于 2015-07-06 00:04:00
回答 3查看 663关注 0票数 0

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

代码语言:javascript
复制
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“的文本值。有没有办法使用数字实体的归一化值("4.0“表示"4”和“4”)作为我的“楼层”实体的规范化值?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-27 10:14:13

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

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

代码语言:javascript
复制
{
  pattern: ( ( [ { ner:NUMBER } ] ) /floor(s?)/ ),
  action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $1[0].normalized) ) 
}

根据@Angel的评论:

$1.归一化是第一个捕获组(作为CoreLabel)的第0标记的“规范化”字段。$$1返回MatchedGroupInfo,它有"text“字段,但没有规范化字段(因为这是在实际的令牌上)。

票数 0
EN

Stack Overflow用户

发布于 2015-07-06 18:01:45

试着改变

代码语言:javascript
复制
action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $$1.text) )

代码语言:javascript
复制
action: ( Annotate($0, ner, "FLOORS"), Annotate($0, normalized, $$1.normalized) )

注释包含三个参数

  • arg1 =要注释的对象(通常是由$0指示的匹配标记)
  • arg2 =注释字段
  • arg3 = value (在本例中,您希望使用NormalizedNER字段而不是文本字段)
票数 1
EN

Stack Overflow用户

发布于 2015-07-22 20:09:36

按照您的建议使用$$1.normalized,在输入“建筑物有七层楼”上运行会产生以下错误消息:注释文件test.txt {从七层楼提取注释错误}

这可能是因为NamedEntityTagAnnotation键尚未出现在由$$1表示的令牌中。我想,在运行TokensRegex之前,您应该确保您的数字标记--在本例中为"4“或”4“--将相应的规范化值"4.0”设置为其NamedEntityTagAnnotation键。

另外,你能告诉我在哪里可以找到更多关于注释()的第三个参数的信息吗?TokensRegex表达式的Javadoc页面没有列出$$n.normalized (可能需要更新吗?)

我相信,$$n.normalized所要做的就是检索值,在coreLabel.get(edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation.class)代码中,这个值相当于coreLabel.get(edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation.class),其中coreLabelCoreLabel类型的,对应于TokensRegex中的$$n。这是因为您的TokensRegex中有以下一行:normalized = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation" }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31236221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档