将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" }
答案 0 :(得分:0)
您应该使用GitHub上的最新版本或3.9.2版。货币不再标准化,因此默认情况下英镑符号将不再变成“#”。
您应该能够做类似的事情
originalWord = { type: "CLASS", value: edu.stanford.nlp.ling.CoreAnnotations$OriginalTextAnnotation }
然后,您可以将规则中的word
替换为originalWord
。