示例脚本:
DECLARE Name,TEST;
"Peter"->Name;
"der Groot"->Name;
"Robert"->Name;
"de Leew"->Name;
"O'Sullivan"->Name;
STRING s;
STRINGLIST slist;
Name{-> MATCHEDTEXT(s), ADD(slist,s),LOG(s)};
ANY+ {INLIST(slist)->MARK(TEST)};
收到的输出:
Peter
Robert
预期输出:
Peter
der Groot
Robert
de Leew
O'Sullivan
示例输入:
Peter
der Groot
Robert
de Leew
O'Sullivan
我试图将stringlist值标记为注释类型。但是接收的输出与预期的输出不同。
答案 0 :(得分:2)
规则元素ANY+
的条件验证每一个ANY,因此第一个失败并且只匹配单个标记。
最后一条规则是否应仅在Name
注释后直接注释位置?
如果没有,您可以执行以下操作:
Name{-> MATCHEDTEXT(s), ADD(slist,s)};
MARKFAST(TEST, slist);
如果是,情况会变得更复杂,因为您没有正确跨度的候选人。你无法通过ANY和INLIST的组合来解决这个问题,你需要在列表中使用正确的范围或片段。我宁愿推荐一个额外的修正规则:
Name{-> MATCHEDTEXT(s), ADD(slist,s)};
MARKFAST(TEST, slist);
ANY{-ENDSWITH(Name)} @TEST{-> UNMARK(TEST)};
免责声明:我是UIMA Ruta的开发者