簡體   English   中英

UIMA Ruta:通過在普通 Java 中組合現有注釋的功能來創建新注釋

[英]UIMA Ruta: Creating new annotations by combining existing annotation's features in plain Java

我正在嘗試將以下邏輯轉換為 UIMA Ruta 規則:

Sentence {->NewAnnotation} IF Sentence.part1包含Constituent.label="VB" AND Sentence.part2包含Constituent.label="VBZ"

換句話說,我需要從整個 Sentence 中創建一個新注釋,其特征part1 (和part2 )包含組合/一系列特定的 posTag(Constituent.label)。

起初,對我來說一個直觀的答案是以下列方式使用CONTAINS條件和STRINGLIST (和配置參數):

STRINGLIST posList; //assuming it is declared
Sentence{-> NewAnnotation} <-{Sentence.part1{CONTAINS(posList, Constituent.label)};};

但它不會產生任何注釋(但它不會失敗)。

然后我考慮了GETFEATURE操作,方法是將Sentence特征( Sentence.part1 )存儲在一個字符串變量中並單獨使用它(在主要規則中)。 但是,由於GETFEATURESTRING格式保存該功能,因此我無法使用它來生成注釋(因為我需要ANNOTATION類型)。 MATCHEDTEXT操作MATCHEDTEXT發生同樣的情況。

我知道想要構建的規則非常復雜,但我相信 Ruta 是此類任務的最合適選擇。 那么,您能否就如何處理我的問題提出任何建議?

正如@PeterKluegl 已經說過的,原始問題的解決方案是:

Sentence{-> NewAnnotation} <-{Sentence.part1<-{Constituent.label=="VB";} %
                              Sentence.part2<-{Constituent.label=="VB";};};

請注意,只有當Sentence特征(即part1 )是注釋而不是字符串時,這條規則才有效,就像我的情況一樣。

因此,對於潛在感興趣的人,我還發布了在我的案例中采用的解決方案:

  • Sentence特征存儲在單獨的注釋中,但保持Sentence.part1與其父Sentence之間的鏈接(這在 UIMA 中可以通過父指針實現)。
  • 應用以下規則:

     String rutaRule = "STRING id;" + "STRING part1Id;" + "STRING part2Id;" + "Sentence{->GETFEATURE(\\"matchId\\", id)};" + "part1{->GETFEATURE(\\"parent\\", part1Id)};" + "part2{->GETFEATURE(\\"parent\\", part2Id)};" + "Sentence{AND(IF(id == part1Id), IF(id == part2Id))-> NewAnnotation} <-" + "{part1<-{Constituent.label == \\"VBD\\";} % " + "part2<-{Constituent.label == \\"MD\\" # Constituent.label == \\"VBN\\";};};"; Ruta.apply(cas,rutaRule);

希望這能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM