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