2
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 做过

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

但是如果是 A 类型的未知序列呢?如下所示,如何将所有 A 存储在特征中?特征的数量也是未知的。在plan java中,我们声明String数组并可以添加元素,但在Ruta中似乎没有这样的过程。

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

1 回答 1

1

UIMA 中的注释指的是从开始偏移到结束偏移的完整跨度。所以,如果你想用两个元素指定一些东西,那么一个简单的注释是不够的。您不能创建涵盖第一个 A 和 B 但不涵盖第二个 A 的 C 类型注释。

但是,您可以将重要信息存储在特征值中。如何实现它取决于各种事情。

如果您总是要记住两个注释,则将两个特征添加到类型 C 并在给定规则中分配特征值,例如,通过 CREATE(C,1,3,"first" = A, "second" =乙)。

您还可以使用不同的操作,例如 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、A B”之类的文本,则最后一条规则会创建一个类型为 C 的注释,该注释将三个 A 注释存储在特征“as”中,一个 B 注释存储在特征“b”中

于 2014-09-26T11:13:34.350 回答