如何声明#除换行符以供以后使用?

时间:2019-09-06 14:07:15

标签: uima ruta

我在规则元素之间的文本上使用了跳过通配符#
但是,我总是标记每行,因此我可以使用#{-CONTAINS(BREAK)}
例如RuleElementA #{-CONTAINS(BREAK)} RuleElementB必须在一行上
如何声明/保存#{-CONTAINS(BREAK)},以便以后可以使用诸如
之类的快捷方式 RuleElementA sc RuleElementB吗?

1 个答案:

答案 0 :(得分:1)

您应该先注释您的构造块(即线),然后根据该注释创建目标注释(UIMA Ruta中所谓的自下而上匹配策略)。

因此,您可以采用一种简单的方法来注释输入文档中的所有行:

DECLARE Line;
ADDRETAINTYPE(BREAK);
BREAK #{-> MARKONCE(Line)} @BREAK;
REMOVERETAINTYPE(BREAK);

这将允许您在创建目标注释时停留在行级别。然后,您可以遍历文档中的所有Line,以确保范围的正确性:

BLOCK (forEach) Line{CONTAINS(W)}{
    RuleElementA # RuleElementB
}

或者,您可以使用默认情况下作为UIMA Ruta安装包一部分的PlainTextAnnotator。这种方法可以保证您更好地进行线路检测:

ENGINE utils.PlainTextAnnotator;
TYPESYSTEM Utils.PlainTextTypeSystem;

EXEC(PlainTextAnnotator, {Line, EmptyLine});
DECLARE FreeLine, LineFree;
ADDRETAINTYPE(WS);
EmptyLine Line{-> FreeLine};
Line{-> LineFree} BREAK[1,2] @EmptyLine;
Line{-> TRIM(WS)};
FreeLine{-> TRIM(WS)};
LineFree{-> TRIM(WS)};
REMOVERETAINTYPE(WS);