【问题标题】:How to match specific tokens in UIMA Ruta?如何匹配 UIMA Ruta 中的特定令牌?
【发布时间】:2014-09-30 16:44:56
【问题描述】:
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)};

【问题讨论】:

    标签: uima ruta


    【解决方案1】:

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

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

    如果您总是要记住两个注解,则将两个特征添加到类型 C 并在给定规则中分配特征值,例如,通过 CREATE(C,1,3,"first" = A, "第二" = 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, A B”之类的文本,最后一条规则会创建一个类型为 C 的注释,该注释在特征“as”中存储三个 A 注释,在特征“b”中存储一个 B 注释

    【讨论】:

    • 我对 GATHER 做过,因为 Ruta 网页上也有教程。但是,我现在被困在另一个问题(编辑问题)上。在任何类型的未知序列的情况下,如何将它们全部存储在相关类型的特征中。特征也是任意的。
    • 我的第一个猜测:使用 FSArray 功能和 CREATE 操作。该操作注意到该要素能够存储多个注释,然后将匹配窗口内的所有 A 类注释分配给该要素。我稍后会扩展答案。
    • 创建动作默认只接受第一个注解。例如在上面例如如果在功能中我放了 A,那么它只会是第一个 A。无论如何,现在我有兴趣只获取最后一个注释并使用 CREATE 放入功能。所以如果在上面,例如B 也是 A 但最终如何获得最后一个 A 并作为 C 注释的特征放入?
    • 我尝试过的一个肮脏的解决方案是循环遍历该特定 C 的所有 A,当循环停止时,可以使用我存储在任何 String 中的最后一个。似乎没有标准方法可以像普通 Java 那样按索引获得最后一个。
    • 是的,目前还没有标准方法。我通常做的是用 A 的子类型注释最后一个 A,如 Alast: ((A COMMA)+ A{-> Alast} B){-> CREATE(C, "as" = A, "last" =最后,"b" = B)};
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多