1

仅当该术语背后的术语与我相关时,我才想匹配某些术语。所以我创建了一个最小的例子:

这是我的测试数据:

small Large
Large
small

我想标记术语small LargeLarge但不是“small”。

所以我想,这样的事情应该有效:

DECLARE Test;
(SW*? CW) {-> CREATE(Test)};

但 RUTA 只匹配“small Large”。

对于测试,我用“W”替换了“SW”,它会做我不想要的。

4

1 回答 1

0

不幸的是,如果规则开始与第一个规则元素匹配,则规则开头的可选量词不是可选的。这意味着您要么需要两个规则,要么需要更改规则元素匹配的顺序。

更改规则元素匹配的顺序会导致不同的规则匹配,因为并非所有SWs 的增量序列都在CW. 但是,无论如何,这通常是人们更喜欢的。规则如下所示:

(SW* @CW) {-> CREATE(Test)};

这两种规则方法看起来像:

(SW+? CW) {-> CREATE(Test)};
CW {-> CREATE(Test)};

我建议避免使用不情愿的量词,如果它不是真正需要的,因为额外的计算是不必要的。宁可使用 PARTOF 条件,即使它看起来不太好。

免责声明:我是 UIMA Ruta 的开发人员

于 2016-11-15T08:32:33.100 回答