0

我正在 Pega 中进行实体提取。我需要匹配一个包含 3 个部分的保单号码:

1) 可选地 1 将是策略中的第一个字符。它是可选的

2) 长度为 2 的字母数字,后跟可选的连字符或空格

3) 长度为 3 的字母数字

所以一些格式的例子是:

AB-CDE、AB-CDE、ABCDE、1AB-CDE

23-456、23 456、23456、123456

AB-2B4、AB-B2C、A1-2B4、2A-34B、12A-34B、123-45C等

每当保单编号以 2 位或 3 位数字开头或没有任何空格或连字符时,我都会遇到问题。

例如 12A-34B、123-45C、23456、123456。

我写了下面的脚本:

PACKAGE uima.ruta.example;
Document{-> RETAINTYPE(SPACE)};


("1")+? ((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,4)};

((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,3)};

此代码适用于具有空格/连字符的模式,例如:AB-CDE、AB CDE、1AB-CDE。但如果没有空格且连字符或模式以 2 或 3 位数字开头,则不起作用。

请帮助编写正确的模式。提前致谢。

4

1 回答 1

0

UIMA Ruta 种子注释 NUM 涵盖了整个数字。因此,像23456,这样的例子123456不能被 Ruta 分割成子注释。

一个解决方案是使用纯正则表达式来注释所有提到的示例:

"\\w{2,3}[\\-|\\s]?\\w{2,3}" -> EntityType;
于 2019-04-01T11:07:43.583 回答