UIMA Ruta规则定义求助:匹配词典词前后大写词的语法修正
修正后的UIMA Ruta规则
先修正语法错误,同时优化逻辑以实现需求:
WORDLIST MyWordList = 'test_words.txt'; // 声明注解类型 DECLARE MyAnnotation; DECLARE CapitalizedAnnotation; // 第一步:匹配词典中的词/短语,标记为MyAnnotation ANY+ {-MATCHEDWITH(MyWordList) -> MARK(MyAnnotation)}; // 第二步:针对MyAnnotation前后各2个词,检查是否符合全大写无小写的条件 MyAnnotation {-2, -1, +1, +2 WORD{REGEXP("^[A-ZÁ-Ž]+$")} -> MARK(CapitalizedAnnotation)};
代码说明:
- 第一部分先匹配词典中的所有词/短语,将它们标记为
MyAnnotation,作为后续定位前后词的基础。 - 第二部分通过位置操作符
-2,-1,+1,+2定位到MyAnnotation前后各两个词,用WORD限定目标为单词,正则^[A-ZÁ-Ž]+$确保该单词仅包含大写字母(含指定重音大写),无任何小写字母,符合条件的单词会被标记为CapitalizedAnnotation。
补充说明:
- 若词典中的条目是多词短语(比如示例中的"Prime Minister"),
ANY+ {-MATCHEDWITH(MyWordList) ...}会正确匹配整个短语并标记为一个MyAnnotation,此时前后的词计数基于整个短语的位置,短语后的第一个词即为+1,符合需求。 - 正则表达式
^[A-ZÁ-Ž]+$比原写法更严谨,确保整个单词都满足条件,避免部分大写部分小写的情况被误判。
内容的提问来源于stack exchange,提问作者Pavlína Z.
相关产品推荐
相关产品推荐

