UIMA Ruta 只标注最长匹配

UIMA Ruta Only annotate longest match

我正在使用 RUTA 并编写了很多不同的规则来提取相同的实体。例如,我将提取 "toilet paper factory"。目前我的规则将导致 toilet paper factorypaper factoryfactory。但我只对最长的比赛感兴趣。

我创建了一个最小示例:

DECLARE Test;
(CW CW) {-> CREATE(Test)};
(CW CW CW) {-> CREATE(Test)};

我的测试字符串:

lower lower Upper Upper Upper lower Upper

上面的规则将匹配 Upper UpperUpper Upper Upper。但在这种情况下,我只对最后一条规则的结果感兴趣。

是否可以删除较短的匹配项?

有几个选项可以避免额外的匹配并删除额外创建的注释。

您可以删除附加注释,例如:

Test->{ANY t:@Test{-> UNMARK(t)};t:@Test{-> UNMARK(t)} ANY;};

此规则检查所有测试注释并在该范围内应用两个规则。每个规则搜索前面或后面有任何内容的 Test 注释,这意味着这个比第一个小。如果匹配,则删除注释。

还有PARTOFNEQ条件,但是比较慢:

Test{PARTOFNEQ(Test)->UNMARK(Test)};

如果您想避免创建注释,您需要更改规则的顺序并首先应用更具体的规则。您可以通过多种方式更改匹配过程,例如,使用 PARTOF 条件、MARKONCE 操作或设置 GREEDYANCHORING。

一个例子:

(CW{-PARTOF(Test)} CW CW) {-> CREATE(Test)};
(CW{-PARTOF(Test)} CW) {-> CREATE(Test)};

在你的例子中,你当然可以这样做:

CW[2,3]{-PARTOF(Test)-> Test};

但这可能不是这个问题背后的想法。

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