我正在尝试在两个注释之间注释一些Text。尽管这看起来很简单,但我想明确排除包含其他注释的文本段落。
比方说,我之前对文档的最后一个令牌和一些POI进行了注释,作为其他一些注释。现在,我想将文档的最后一个POI注释移至该令牌。但是该文本中不得包含其他POI。
我目前正在做什么:
POI1 {->SHIFT(POI1,1,3)} ANY*?{-CONTAINS(POI2)} EndToken;
Ruta仍将使用此规则对其他所有包含POI2注释的文本进行注释。
我想念什么?
答案 0 :(得分:1)
您的规则将不起作用,因为ANY*
没有塞子,因此贪婪的量词*
将覆盖EndToken
。另外,您通常会使用CONTAINS
在另一个内部排他检查注释。因此,PARTOF
条件适用于您的情况。
在UIMA Ruta中,您可以使用至少两种方法来解决您的问题:
1。)边界匹配-注释预定义边界之间的文本
(Annotation1 ANY+{-PARTOF(Annotation2)} Annotation3){-> Annotation4};
2。)转换-修改目标注释的偏移量(您的解决方案)
Annotation1{->SHIFT(Annotation1,1,2)} Annotation2;
如果您的目标是仅更改POI1批注的偏移量,则以下规则应适用:
POI1{->SHIFT(POI1,1,3)} ANY*?{-PARTOF(POI2), -PARTOF(EndToken)} EndToken;