2014-09-25 62 views
1
DECLARE A,B; 
DECLARE Annotation C(Annotation firstA, Annotation secondA,...); 
"token1|token2|...|tokenn" -> A; 
"token3|token4" -> B; 

A A B {->MARK(C,1,3)}; 

我就與GATHER如何匹配UIMA Ruta中的特定標記?

(A COMMA A B) {-> GATHER(C,1,4,"firstA"=1,"secondA" = 3,"B"=4)}; 

但如何在A型未知序列的情況下?如下所示,如何將所有A存儲在功能中?功能的數量也是未知的。在計劃Java中,我們聲明String數組並且可以添加元素,但是在Ruta中似乎沒有這樣的過程。

(A (COMMA A)+ B) {-PARTOF(C) -> GATHER(C,beginPosition,endPosition,"firstA"=1,"secondA" = 3,"thirdA"=?,so on)}; 

回答

0

UIMA中的註釋是指從開始偏移量到結束偏移量的完整跨度。所以,如果你想用兩個元素來指定一些東西,那麼簡單的註釋是不夠的。您不能創建類型C的註釋,其中包含第一個A和B,但不包含第二個A.不過,您可以將重要信息存儲在要素值中。如何實現它取決於各種事情。

如果總是有兩個註釋需要記住,那麼將兩個特徵添加到C中,並在給定的規則中分配特徵值,例如,通過CREATE(C,1,3,「first」= A, 「second」= B)。

您還可以使用不同的操作,如GATHER,或使用一個FSArray功能來存儲註釋。

與FSArray一個完整的例子:

DECLARE A, B; 
DECLARE Annotation C (FSArray as, B b); 
"A" -> A; 
"B" -> B; 
(A (COMMA A)+ B){-PARTOF(C) -> CREATE(C, "as" = A, "b" = B)}; 

如果應用在如 「A,A,AB」 一文中,最後一條規則創建C型的一個註解,在功能「存儲三個A註解作爲「和」B「中的一個B註釋

+0

由於Ruta網頁上還有教程,因此我使用了GATHER。但是,我現在被困在另一個問題上(編輯問題)。在任何類型的序列未知的情況下,如何將它們全部存儲在相關類型的特徵中。功能也是任意的。 – xavi 2014-09-28 20:46:29

+0

我的第一個猜測:使用FSArray功能和CREATE操作。該動作注意到該功能可以存儲多個註釋,然後將匹配窗口中的所有類型A註釋分配給該功能。我會在稍後延長答案。 – 2014-09-29 09:12:19

+0

默認情況下,創建操作只需要第一個註釋。對於例如在上面例如如果在功能中我放了A,那麼它將是第一個A。無論如何,現在我只想獲取最後一個註釋並使用CREATE創建功能。所以如果在上面例如B也是A,但是到最後,如何獲得最後一個A,並將其作爲C註釋的特徵? – xavi 2014-10-01 09:52:56