UIMA Ruta只注释最长匹配

问题描述:

我正在使用RUTA并为提取相同的实体写了很多不同的规则。例如,我将提取“卫生纸工厂”。目前我的规定将导致卫生纸厂,造纸厂工厂。但我只对最长的比赛感兴趣。UIMA Ruta只注释最长匹配

我创建了一个小例子:

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

我的测试字符串:以上

lower lower Upper Upper Upper lower 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鲁塔开发商

+0

谢谢:) - 有需要的第一个解决方案特殊技援股的版本?我正在使用2.3.1 第二种解决方案有效 - 但正如您所说的那样缓慢。 – PascalTurbo

+0

对于第一种解决方案,UIMA Ruta 2.5.0是必需的。您也可以为2.3.1重写此规则,例如,使用BLOCK和UNMARK中的类型 –