在斯坦福重写TokensRegex的默认环境设置

时间:2019-01-17 02:40:03

标签: stanford-nlp

edu.stanford.nlp.ling.CoreAnnotations$TextAnnotation设置为 edu.stanford.nlp.ling.CoreAnnotations$OriginalTextAnnotation 添加令牌正则表达式规则时。

示例:

#123456在斯坦福大学被标记为MONEY,因此,为了克服NER行为,我编写了将123456标记为NUMBER而不是MONEY的规则。作为副作用,£20.49之后的标签现在被标记为NUMBER。

我调试了代码,并意识到在应用模式时edu.stanford.nlp.ling.CoreAnnotations$TextAnnotation用于匹配。因此,在£20.49是输入£edu.stanford.nlp.ling.CoreAnnotations$OriginalTextAnnotation的值而#edu.stanford.nlp.ling.CoreAnnotations$TextAnnotation的值的情况下。

是否存在用于更改此行为的环境设置?

样本规则

# make all patterns case-sensitive
ENV.defaultStringMatchFlags = 0
ENV.defaultStringPatternFlags = 0

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

normalizedValue = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NormalizedNamedEntityTagAnnotation" }

{ ruleType: "tokens", pattern: (([{word:"#"}]) ([{ner:"MONEY"}])), action: (Annotate($1, ner, "IGNORE"), Annotate($2, ner, "NUMBER"), Annotate($0, normalizedValue, "TOKENS_REGEX")), result: "NUMBER" }

1 个答案:

答案 0 :(得分:0)

您应该使用GitHub上的最新版本或3.9.2版。货币不再标准化,因此默认情况下英镑符号将不再变成“#”。

您应该能够做类似的事情

originalWord = { type: "CLASS", value: edu.stanford.nlp.ling.CoreAnnotations$OriginalTextAnnotation }

然后,您可以将规则中的word替换为originalWord