检查特定大小的字母数字UIMA RUTA

时间:2018-09-07 07:17:27

标签: uima ruta

我是UIMA RUTA的新手。 我正在尝试执行一项基本任务,该任务应与特定大小的字母数字字符匹配。 例如: 123Abcd

我尝试了以下代码:

DECLARE VarA;
ANY{REGEXP("([A-Za-z0-9]{7})")->MARK(VarA)};

它没有按预期工作。 请让我知道我在做什么错。 相同的REGEX在RUTA以外的其他REGEX引擎中均可使用。

谢谢。

1 个答案:

答案 0 :(得分:2)

这是因为Ruta将文档分成小片段/令牌/基本注释(请参见this)。如果种子是数字和字符的组合,则默认的播种器实现会将单词拆分。可以由自己的播种器以不同的行为来更改默认的播种器实现。

您的示例“ 123Abcd”将被解析为以下标记(并非所有级别都在列表中-有关更多信息,请参见链接):

Document -> Complete document "123Abcd"
NUM -> 123
CW -> Abcd

输入“ 45 abcd 5”的另一个示例变为:

Document -> Complete document "45 abcd 5"
NUM -> 45
SPACE -> The spacer between 45 and abcd // Not visible by default
SW -> abcd
SPACE -> The spacer between abcd and 5 // Not visible by default
NUM -> 5

在您的示例中,您尝试将正则表达式与Any令牌匹配。该文档包含2个任何令牌(NUM和CW),并且因为该模式不匹配(不是1个令牌而是被拆分了)

您可以执行以下示例,以获取正确的结果:

DECLARE VarA, VarB, VarC, VarD;

// Option 1 (execute regex on the complete input document
// I think this is not a good solution because this can be slow
Document{REGEXP("([A-Za-z0-9]{7})") -> MARK(VarA)};

// Option 2 (match with regex on each annotation type)
(NUM{REGEXP("[0-9]{3}")} CW{REGEXP("[a-zA-Z]{4}")}){ -> MARK(VarB)};

// Option 3 (first match a pattern of annotations and then match the 
// regex on the complete pattern)
(NUM CW){REGEXP("([A-Za-z0-9]{7})") -> MARK(VarC)};

// Option 4 (only check if its a "number + capital word")
(NUM CW){ -> MARK(VarD)};