使用ruta注释包含注释的行并提取所需数据

时间:2019-11-05 12:04:34

标签: uima ruta

注释包含特定注释的行以提取文本。为借款人和共同借款人注释行并获取各自的SSN

Borrower Name: Alice Johnson                           SSN: 123-456-7890  
Co-Borrower Name: Bob Symonds                          SSN: 987-654-3210

代码

PACKAGE uima.ruta.test;
TYPESYSTEM utils.PlainTextTypeSystem;
ENGINE utils.PlainTextAnnotator;
EXEC(PlainTextAnnotator, {Line});
DECLARE Borrower, Name;
DECLARE BorrowerName(String value, String label);
CW{REGEXP("\\bBorrower") -> Borrower} CW{REGEXP("Name") -> Name};
Borrower Name COLON n:CW[1,3]{-> CREATE(BorrowerName, "label"="Borrower Name", "value"=n.ct)};
DECLARE SSN;
DECLARE BorrowerSSN(String label, String value);
W{REGEXP("SSN") -> SSN};
SSN COLON n:NUM[3,3]{-> CREATE(BorrowerSSN, "label"="Borrower SSN", "value"=n.ct)};
DECLARE Co;
CW{REGEXP("Co") -> Co};
DECLARE CoBorrowerName(String label, String value);
Co Borrower Name COLON n:CW[1,3]{-> CREATE(CoBorrowerName, "label"="Co-Borrower Name", "value"=n.ct)};
DECLARE BorrowerLine;
Line{CONTAINS(Borrower),CONTAINS(Name)->MARK(BorrowerLine)};

请建议如何注释包含注释的行,并获取所需注释的特定标签值。

2 个答案:

答案 0 :(得分:0)

为了避免处理单独的字符串,您可以将所有指示符收集到一个单词列表(即,每行包含一个指示符的文本文件),并将其放置在项目的 resources 文件夹中(请参见this了解更多信息)。然后,您可以将所有指标标记为所需的指标类型:

WORDLIST IndicatorList ='IndicatorList.txt';
DECLARE Indicator;
Document{->MARKFAST(Indicator, IndicatorList )};

这会输出Indicator个辅助注释,例如“借款人名称”。

有了这些,就可以遍历所有行并找到目标注释。

DECLARE Invisible;
SPECIAL{-PARTOF(Invisible), REGEXP("[-]")-> Invisible};
BLOCK(line) Line{CONTAINS(Indicator)}{

    //Ex. pattern: Borrower Name: Alice Johnson         SSN: 123-456-7890
    Indicator COLON c:CW[1,3]{-> CREATE(BorrowerName, "label"="Borrower Name", "value"=c.ct)} Indicator;
    FILTERTYPE(Invisible);
    Indicator COLON n:NUM[3,3]{-> CREATE(BorrowerSSN, "label"="BorrowerSSN", "value"=n.ct)};
    REMOVEFILTERTYPE(Invisible);
}

希望这会有所帮助。

答案 1 :(得分:0)

补充Viorel的答案:

PlainTextAnnotator创建类型为Line的注释,这些注释覆盖了整行,这意味着还包括前导或尾随空格。结果,对于以下规则,结果注释不可见。为了避免此问题,您可以例如修剪以下批注中的空格:

EXEC(PlainTextAnnotator, {Line});
ADDRETAINTYPE(WS);
Line{-> TRIM(WS)};
REMOVERETAINTYPE(WS);