UIMA RUTA规则匹配两个Dependency注解失败问题咨询
问题原因
你遇到的匹配失败问题本质是RUTA默认连续匹配规则的偏移约束和Dependency注解的偏移特性不匹配:
- RUTA默认
(TypeA TypeB)的连续匹配规则,要求前一个注解的结束偏移和后一个注解的起始偏移严格紧邻,且默认会跳过空白字符 - 你之前
W W匹配成功,是因为单词注解W的偏移是严格前后衔接的,刚好满足上述约束 - DKPro的
Dependency类型注解的偏移范围会覆盖其依存关系涉及的所有token(比如支配词到依存词的全部文本范围),相邻的Dependency注解偏移通常是重叠或交叉的,不可能满足偏移严格紧邻的要求,所以连续匹配规则失效。你尝试的dep.Dependency[2,3]、dep.Dependency WS dep.Dependency写法也都基于偏移连续的前提,自然无法匹配。
解决方法
如果你的需求是匹配按起始偏移排序的两个连续Dependency注解,不需要偏移严格紧邻,可以用显式条件约束的写法:
a:dep.Dependency b:dep.Dependency{a.begin < b.begin -> LOG("match two dependencies successfully") };
如果你的需求是匹配覆盖在连续两个token上的Dependency注解,可以基于W锚定编写规则:
(W W){-> MARK(TwoToken, 1, 2)}; TwoToken{CONTAINS(dep.Dependency, 2) -> LOG("match two dependencies on consecutive tokens") };
如果需要批量调整连续匹配的偏移约束,可以在规则文件头部添加配置关闭严格锚定:
ANCHORING false; // 后续规则的连续匹配不再要求偏移严格紧邻 (dep.Dependency dep.Dependency){-> LOG("match success after adjust anchoring") };
内容的提问来源于stack exchange,提问作者RodP
相关产品推荐
相关产品推荐

