2

示例脚本:

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

我试图将字符串列表值标记为注释类型。但是接收到的输出与预期的输出不同。

4

1 回答 1

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 的开发人员

于 2016-11-02T08:01:34.813 回答