如何比较Ruta规则中两个不同注释的特征?

时间:2016-09-30 15:49:15

标签: java uima ruta

我正在使用UIMA Ruta处理文本,并希望删除重复的注释。如果某些功能(例如名称)具有相同的值,我认为注释是重复的。我尝试了不同的方法但未成功,但我希望以下示例能够说明我想要做的事情:

STRING nameVal;
Person {-> GETFEATURE("name", nameVal)}  
ANY+? 
Person.name == nameVal {-> UNMARK(Person)};

我也尝试过这种变化:

STRING nameVal;
Person {-> GETFEATURE("name", nameVal)}  
ANY+? 
Person {-> UNMARK(Person)} <- { Person.name == nameVal; };

如果我用一个文字替换变量nameVal(参见下一个例子),规则运作良好,似乎接近我想要的,但不完全。

Person
ANY+? 
Person.name == "Mustermann" {-> UNMARK(Person)};

我相信,问题在于,在评估比较时,尚未初始化全局变量。在Ruta中有没有办法将第一个匹配的注释的特征与同一规则中最后匹配的注释的特征进行比较?

1 个答案:

答案 0 :(得分:0)

是的,问题是在评估完所有条件后完整规则匹配时执行操作。您需要一个操作来将特征值分配给变量,但是您需要一个条件来将变量与另一个特征进行比较。

然而,有许多方法可以在Ruta中解决这个问题,例如,有更多规则,BLOCK或动作内联规则。最好的方法是标签表达。 UIMA Ruta 2.5.0让我们的生活更轻松。你可以这样写:

p1:Person # p2:Person{p1.name == p2.name -> UNMARK(Person)};

p1:Person # Person.name==p1.name{ -> UNMARK(Person)};

如果使用STRINGLIST,您可以编写更快的规则:如果值包含在列表中,则取消标记注释,如果没有,则将值添加到列表中。

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