2016-09-30 87 views
1

我正在使用UIMA Ruta处理文本,并希望删除重复的注释。如果某些特征(例如名称)具有相同的值,我认为注释是重复的。我曾经失败尝试了不同的方法,但我希望下面的例子将给出什么,我试图做一个想法:如何比较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中有没有办法将第一个匹配注释的特征与同一规则中最后一个匹配注释的特征进行比较?

回答

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鲁塔

+0

的感谢您的快速解答开发者。其实,我也试过了。它只在UIMA Ruta 2.5.0中工作吗(我还没有升级)?将Ruta嵌入AE中时,是否需要某些配置?我明天将在工作中检查出来。 – Santam

+0

是的,它只适用于UIMA Ruta 2.5.0,它支持像p1.name这样的标签表达式上的功能epxressions。 –

+0

我现在做了一些测试,不幸的是它没有工作。在更新eclipse插件之后,我得到一个'IllegalArgumentException',并且提示“Passed arguments are invalid!”当使用Ruta Workbench在测试项目上运行Ruta时。在一个嵌入了Ruta egine的项目中,一组在Ruta 2.4.0下运行良好的规则会在Ruta 2.5.0下生成一个“RutaParseRuntimeException”。我正在使用Eclipse Mars.2 Release(4.5.2),Ruta Workbench 2.5.0和UIMA Tools以及runtime 2.9.0。我应该注意哪些问题? – Santam