模式未按预期运行

Patterns do not behave as expected

实际的模式不是英文的,所以我创建了这个简化的例子来重现这个问题:有 3 级注释(实际应用需要)并且第 3 级模式没有按预期工作。 要识别的短语是: a b c

我的期望:

# 1.
{  pattern: (/a/), action: (Annotate([=10=], name, "A")) }
{  pattern: (/b/), action: (Annotate([=10=], name, "B")) }
# 2.
{  pattern: (([name:A]) ([name:B])), action: (Annotate([=10=], name, "AB")) }
# 3.
{  pattern: (([name:AB]+) /c/), action: (Annotate([=10=], name, "C")) }

#1 和#2 有效并且 "a b" 被注释: 匹配的令牌:NamedEntitiesToken{word='a' name='AB' beginPosition=0 endPosition=1} 匹配的令牌:NamedEntitiesToken{word='b' name='AB' beginPosition=2 endPosition=3} 但是 #3 模式不起作用,即使可以看到我们有 2 个 "AB" 注释标记,这正是 #3 模式所期望的。 如果我将 #1​​ 更改为

甚至更多
{  pattern: (/a/), action: (Annotate([=11=], name, "AB")) }
{  pattern: (/b/), action: (Annotate([=11=], name, "AB")) }

模式 #3 工作正常: 匹配的令牌:NamedEntitiesToken{word='a' name='C' beginPosition=0 endPosition=1} 匹配的令牌:NamedEntitiesToken{word='b' name='C' beginPosition=2 endPosition=3} 匹配的令牌:NamedEntitiesToken{word='c' name='C' beginPosition=4 endPosition=5}

我在使用

时找不到匹配的标记之间的任何区别
# In this case #3 pattern works
{  pattern: (/a/), action: (Annotate([=12=], name, "AB")) }
{  pattern: (/b/), action: (Annotate([=12=], name, "AB")) }

或者当我使用

# In this case #3 pattern doesn't work
# 1.
{  pattern: (/a/), action: (Annotate([=13=], name, "A")) }
{  pattern: (/b/), action: (Annotate([=13=], name, "B")) }
# 2.
{  pattern: (([name:A]) ([name:B])), action: (Annotate([=13=], name, "AB")) }

在这两种情况下,我得到了相同的注释,但第一种情况有效而第二种情况无效。 我做错了什么?

这对我有用:

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

ENV.defaults["stage"] = 1

{ ruleType: "tokens", pattern: (/a/), action: Annotate([=10=], ner, "A") }
{ ruleType: "tokens", pattern: (/b/), action: Annotate([=10=], ner, "B") }

ENV.defaults["stage"] = 2

{ ruleType: "tokens", pattern: ([{ner: "A"}] [{ner: "B"}]), action: Annotate([=10=], ner, "AB") }

ENV.defaults["stage"] = 3

{ ruleType: "tokens", pattern: ([{ner: "AB"}]+ /c/), action: Annotate([=10=], ner, "ABC") }

这里有一篇关于 TokensRegex 的文章:

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