UIMA Ruta中添加否定条件:仅标注无限定词的名词
UIMA Ruta:给无限定词的主格名词添加标注
问题描述
我正在使用UIMA Ruta,希望仅对没有限定词的主格名词(已预先标记为N)进行标注。尝试以下代码时出现语法错误:
(N & MorphologicalFeatures.case == "nom" & -PARTOF(xx.NULLARTIKEL)
错误信息:
- Mismatched Input: Expecting "SEMI" but found ")".
- Mismatched Input: Expecting "RPAREN" but found "(".
- Syntax error: -
也尝试了无语法错误但不生效的代码:
(N & MorphologicalFeatures.case == "nom" ) W*? V {-PARTOF(ConstructsA1.HASARTICLE), -> CREATE(type.annotation.Construct,1,1,"constructID"=xx, "span"=true)};
此外,Dependency{-REGEXP(Dependency.DependencyType, "det")因名词常存在多个依存标注而无效。以下写法同样不生效:
(N & MorphologicalFeatures.case =="nom" & Token{-REGEXP(xx.HASARTICLE)})(N & MorphologicalFeatures.case =="nom" & Dependency.DependencyType !="det")
正确的否定条件写法
UIMA Ruta中,针对“不存在某类关联/特征”的否定逻辑,需要注意范围匹配和否定运算符的正确使用,以下是两种可行方案:
方案1:基于PARTOF的否定(检查无NULLARTIKEL父节点)
原代码的语法错误源于括号不匹配,且否定PARTOF需用!PARTOF或条件块内的{-PARTOF(...)}。若xx.NULLARTIKEL是标记限定词的注解类型,正确写法如下:
// 匹配主格名词,且该名词不属于NULLARTIKEL的子节点 (N & MorphologicalFeatures.case == "nom" & !PARTOF(xx.NULLARTIKEL)) -> CREATE(type.annotation.Construct, 0, 0, "constructID"=xx, "span"=true);
如果需要结合后续动词(如原代码中的W*? V),需明确条件作用于名词:
(N & MorphologicalFeatures.case == "nom") W*? V {-PARTOF(xx.NULLARTIKEL, 1), // 1表示作用于规则中的第一个匹配元素(即N) -> CREATE(type.annotation.Construct, 1, 1, "constructID"=xx, "span"=true)};
方案2:基于依存关系的否定(检查无det依存)
针对多依存标注的问题,不能直接判断单个Dependency.DependencyType != "det",而是要检查不存在任何类型为det的依存关系指向该名词,需使用!EXISTS运算符:
// 匹配主格名词,且不存在指向它的det类型依存 (N & MorphologicalFeatures.case == "nom" & !EXISTS(Dependency:Dependency.DependencyType=="det" & DEPENDENT==@THIS)) -> CREATE(type.annotation.Construct, 0, 0, "constructID"=xx, "span"=true);
或使用条件块写法:
(N & MorphologicalFeatures.case == "nom") {!EXISTS(Dependency:Dependency.DependencyType=="det" & DEPENDENT==@CURRENT), -> CREATE(type.annotation.Construct, 0, 0, "constructID"=xx, "span"=true)};
关键注意点
!PARTOF(X):表示当前注解不属于X类型注解的子节点,直接写在注解匹配条件中。{-PARTOF(X, n)}:在规则的条件块中使用,n指定作用于规则中的第n个匹配元素(从1开始计数)。!EXISTS(...):用于检查当前上下文不存在满足条件的注解,适合处理多标注场景(如多个依存关系)。- 确保注解类型(
xx.NULLARTIKEL、Dependency)的命名空间和定义正确,避免因类型不存在导致规则不生效。
内容的提问来源于stack exchange,提问作者kiwi-123
相关产品推荐
相关产品推荐

