使用Ruta,获取下一行带注释的关键字中的数据

问题描述 投票:1回答:2

如何获取其他行中存在于注释关键字上方/下方的数据?我可以注释关键字,但无法获取信息

示例文本:

Underwriter's Name    Appraiser's Name          Appraisal Company Name
Alice Wheaton Cooper  Bruce Banner               Stark Industries

代码

TYPESYSTEM utils.PlainTextTypeSystem;
ENGINE utils.PlainTextAnnotator;

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

DECLARE UnderWriterKeyword, NameKeyword, UnderWriterNameKeyword;
DECLARE UnderWriterName(String label, String value);

CW{REGEXP("\\bUnderwriter") -> UnderWriterKeyword};
CW{REGEXP("Name")->NameKeyword};
(UnderWriterKeyword SW NameKeyword){->UnderWriterNameKeyword};
ADDRETAINTYPE(SPACE);
Line{CONTAINS(UnderWriterNameKeyword)} Line -> {
    (CW SPACE)+ {-> MARK(UnderWriterName)};
    };
REMOVERETAINTYPE(SPACE)

预期输出:

Underwriter's Name: Alice Wheaton Cooper    
Appraiser's Name: Bruce Banner
Appraisal Company Name: Stark Industries

[请提出在RUTA中是否可行?如果为true,如何获取数据?

uima ruta
2个回答
0
投票
最重要的规则如下:
Header<-{hc:Cell{hc.column == c.column}<-{k:Keyword;};}
    # c:@Cell{-PARTOF(Header) -> e:Entry, e.keyword = k};

它包含三个规则元素,Header#Cell,是这样工作的:

该规则开始与Cell规则匹配,因为它被@标记为锚点。

    此规则元素在所有Cell注释或不属于Header注释的部分上都匹配。它从满足此条件的第一个Cell注释开始,并将其称为“ c”。
  • 下一个规则元素是#,它将匹配直到下一个规则元素能够匹配。
  • 如果内嵌规则能够在Header注释的范围内匹配,则下一个规则元素在Header注释上匹配。在此范围内,在Cell注释上匹配的内联规则记为“ hc”,具有与特征column相同的值。如果匹配包含记住为“ k”的“关键字”,则匹配成功。
  • 如果这三个规则元素成功匹配,则将应用操作。
  • 第一个动作在Entry注释的跨度上创建了一个名为“ e”的Cell注释。
  • 第二个动作将关键字分配给Entry功能keyword
  • 作为摘要,该规则为不属于标题的每个Entry注释创建一个Cell注释,并分配相应列的header关键字以定义条目的类型。

  • 0
    投票
    您可以为一行定义条件,并在下一行内注释所需的信息:

    Line{CONTAINS(UserName)} Line -> { //your logic here };

    © www.soinside.com 2019 - 2024. All rights reserved.