UIMA Ruta 只标注最长匹配
UIMA Ruta Only annotate longest match
我正在使用 RUTA 并编写了很多不同的规则来提取相同的实体。例如,我将提取 "toilet paper factory"。目前我的规则将导致 toilet paper factory、paper factory 和 factory。但我只对最长的比赛感兴趣。
我创建了一个最小示例:
DECLARE Test;
(CW CW) {-> CREATE(Test)};
(CW CW CW) {-> CREATE(Test)};
我的测试字符串:
lower lower Upper Upper Upper lower Upper
上面的规则将匹配 Upper Upper 和 Upper 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 的开发者
我正在使用 RUTA 并编写了很多不同的规则来提取相同的实体。例如,我将提取 "toilet paper factory"。目前我的规则将导致 toilet paper factory、paper factory 和 factory。但我只对最长的比赛感兴趣。
我创建了一个最小示例:
DECLARE Test;
(CW CW) {-> CREATE(Test)};
(CW CW CW) {-> CREATE(Test)};
我的测试字符串:
lower lower Upper Upper Upper lower Upper
上面的规则将匹配 Upper Upper 和 Upper 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 的开发者