UIMA Ruta。检索由WS分隔的短语(空格,中断等)

时间:2016-12-19 19:45:00

标签: uima ruta

我要检索由空格,符号和其他标点符号分隔的短语。

我花了很多时间试图找到最佳方法。

选项1.最简单的方法。

DECLARE T1, T2;
"cool rules" -> T1;
"cool rule" -> T2;

输入:" 123cool规则"。 结果:触发T1和T2;

选项2.使用WORDLIST和WORDTABLE。

让wordlist 1.txt包含2行:

cool rules
cool

提取代码如下

WORDLIST WList = '1.txt';
DECLARE W1;
Document{-> MARKFAST(W1, WList, true, 2)};

输入:"酷炫规则"。 结果:仅提取第一行。我想在这种情况下,不会触发相交的规则。

选项3.标记两个令牌的组合

DECLARE T1;
("cool" "rule") {-> T1};

输入:"酷炫规则酷规则1cool规则" 结果:2个注释:酷规则+ 1cool规则。提取速度损失10倍。

选项4. REGEXP匹配 也许有可能匹配这样的模式" cool \\ srule",但我不知道如何定义类型表达式。 SW * {REGEXP(" cool \\ srule") - > T1}不提供结果。

如您所见,我试图解决一项非常简单的任务,但尚未成功。选项3是一个非常好的方法,但提取过程会变慢10倍。

1 个答案:

答案 0 :(得分:0)

如果要识别特定短语,则应使用字典查找,而不是直接规则。

因此,我建议使用MARKFAST选项2.但是,有两个问题:(a)仅支持最长匹配且(b)您要么需要更改分段(标记化),要么进行一些后期处理。

(a)这无法解决。如果确实需要,则应使用不同的字典注释器。参见例如UIMA邮件列表。

(b) MARKFAST适用于为每个最小部分自动创建的RutaBasic注释。由于默认的播种机,令牌" 1cool"由两个RutaBasics组成,一个用于NUM,一个用于SW。如果您不想更改预处理,则可以简单地应用修复该规则的规则,如

RETAINTYPE(WS);
ANY{-PARTOF(WS)} t:@T1{-> UNMARK(t)};
顺便说一下,选项4不会起作用,因为REGEXP条件检查匹配的注释SW的覆盖文本,该注释仅代表一个标记。如果您执行类似(SW+){REGEXP("cool\\srule")->T1}的操作,那么如果之后有另一个SW,则规则将不匹配。

免责声明:我是UIMA Ruta的开发者