2016-09-30 85 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