在ruta中的两个带注释的标签之间获取文本

时间:2019-11-13 05:44:27

标签: uima ruta

如何在两个带注释的文本之间显示数据?

样本输入:

Seller Name  FirstAvenue Mortgage, TN 12230     Contact Name John

代码:

BLOCK(sellerName) Line{CONTAINS(SellerNameKeyword)} {
    c:ANY+{-PARTOF(SellerNameKeyword), -PARTOF(SellerName)-> 
        CREATE(SellerName, "label"="Seller Name", "value"=c.ct)} 
ContactNameKeyword;
    }

此代码未提供SellerName annotation的任何输出

预期输出:FirstAvenue Mortgage, TN 12230

如果输入分布在两行中,会发生什么变化?

样本输入:

Seller Name  FirstAvenue Mortgage, Contact Name John   
             TN 12230              Contact Title Supervisor

上述用例的代码:

TYPESYSTEM utils.PlainTextTypeSystem;
ENGINE utils.PlainTextAnnotator;

DECLARE Keyword (STRING label);
DECLARE Entry(Keyword keyword);

DECLARE Keyword SellerNameKeyword, SellerNameContextBlocker, ContactNameKeyword;

EXEC(PlainTextAnnotator, {Line,Paragraph});

ADDRETAINTYPE(WS);
Line{->TRIM(WS)};
Paragraph{->TRIM(WS)}; 
REMOVERETAINTYPE(WS);

"Seller Name" -> SellerNameKeyword ( "label" = "Seller Name");
"Contact Title" -> SellerNameContextBlocker("label" = "Seller Name Context Blocker");
"Contact Name" -> ContactNameKeyword("label"= "Contact Name");

DECLARE Entity (STRING label, STRING value);
DECLARE Entity ContactName, SellerName;

BLOCK(line1) Line{CONTAINS(ContactNameKeyword)} {
    ContactNameKeyword c:#{-PARTOF(ContactName)-> CREATE(ContactName,"label"="Contact Name", "value"=c.ct)};
}
SellerNameKeyword c:#{-PARTOF(ContactNameKeyword),-PARTOF(SellerNameContextBlocker),-PARTOF(ContactName) -> 
    CREATE(SellerName,"label"="Seller Name", "value"=c.ct)} SellerNameContextBlocker;

输出:FirstAvenue Mortgage, Contact Name John TN 12230

预期输出:FirstAvenue Mortgage, TN 12230

请提出必要的更改以及我错过了什么?

1 个答案:

答案 0 :(得分:0)

由于要注释的信息在文本中不是连续的(介于“ Contact Name John”之间),因此您无法在CAS中将所需的输出表示为单个注释的覆盖文本。 但是,根据您的情况,您可能希望将感兴趣的文本连接到输出注释的功能中。例如:

DECLARE SellerNameKeyword, ContactNameKeyword, ContactTitleKeyword;
DECLARE SellerName (STRING  value);

"Seller Name" -> SellerNameKeyword;
"Contact Name" -> ContactNameKeyword;
"Contact Title" -> ContactTitleKeyword;

ADDRETAINTYPE(BREAK);
SellerNameKeyword ANY[0,5]{-PARTOF(ContactNameKeyword), -PARTOF(COMMA) -> 
s1:CREATE(SellerName)} COMMA? 
ContactNameKeyword ANY[0,5]{-PARTOF(BREAK)} BREAK? ANY[0,10]{-PARTOF(ContactTitleKeyword) -> 
s2:CREATE(NameId), s1.value=""+s1.ct+s2.ct} ContactTitleKeyword;
ADDRETAINTYPE(BREAK);

此规则的输出将在“ FirstAvenue Mortgage”上返回带有属性SellerName的注释value,其中包含所需的输出“ FirstAvenue Mortgage TN 12230”。

请注意,这不是一般的解决方案,而是一个在给定情况下如何实现的示例。