如何在Ruta脚本中匹配可选数字和字母数字

时间:2019-03-26 11:05:14

标签: nlp ruta pega

我正在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位数字开头,则无法正常工作。

请帮助编写正确的图案。 预先感谢。

1 个答案:

答案 0 :(得分:0)

UIMA Ruta种子批注NUM,覆盖整个数字。因此,Ruta无法在子注释中拆分诸如23456123456之类的示例。

一种解决方案是使用纯正则表达式注释所有上述示例:

"\\w{2,3}[\\-|\\s]?\\w{2,3}" -> EntityType;