2016-11-14 61 views
2

我正在使用RUTA併爲提取相同的實體寫了很多不同的規則。例如,我將提取「衛生紙工廠」。目前我的規定將導致衛生紙廠,造紙廠工廠。但我只對最長的比賽感興趣。UIMA Ruta只註釋最長匹配

我創建了一個小例子:

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

我的測試字符串:以上

lower lower Upper Upper Upper lower Upper 

規則將匹配上上上上上。但在這種情況下,我只對最後一條規則的結果感興趣。

是否可以刪除較短的匹配?

回答

1

有幾個選項可以避免附加匹配並刪除額外創建的註釋。

你可以像刪除附加註釋:

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中的類型 –