仅当该术语背后的术语与我相关时,我才想匹配某些术语。所以我创建了一个最小的例子:
这是我的测试数据:
small Large
Large
small
我想标记术语small Large和Large但不是“small”。
所以我想,这样的事情应该有效:
DECLARE Test;
(SW*? CW) {-> CREATE(Test)};
但 RUTA 只匹配“small Large”。
对于测试,我用“W”替换了“SW”,它会做我不想要的。
不幸的是,如果规则开始与第一个规则元素匹配,则规则开头的可选量词不是可选的。这意味着您要么需要两个规则,要么需要更改规则元素匹配的顺序。
更改规则元素匹配的顺序会导致不同的规则匹配,因为并非所有SW
s 的增量序列都在CW
. 但是,无论如何,这通常是人们更喜欢的。规则如下所示:
(SW* @CW) {-> CREATE(Test)};
这两种规则方法看起来像:
(SW+? CW) {-> CREATE(Test)};
CW {-> CREATE(Test)};
我建议避免使用不情愿的量词,如果它不是真正需要的,因为额外的计算是不必要的。宁可使用 PARTOF 条件,即使它看起来不太好。
免责声明:我是 UIMA Ruta 的开发人员