GATE基础JAPE规则否定逻辑失效,求助解决方法
解决GATE JAPE规则中否定条件不生效的问题
你的问题核心是逻辑运算符使用错误:原规则中把四个否定条件用|(或)连接,导致只要满足其中一个否定条件就会匹配,完全违背了“同时排除chair、model、JJ、VB类型jobtitle”的需求。比如"chair"虽然不满足!Token.string =~ "chair",但满足!Token.string =~ "[Mm]odel",所以还是会被识别为角色。
修正后的JAPE规则
Phase:ActeurIdentif Input:Lookup Token Options:Control=appelt Rule:ActeurId ( {Lookup.majorType == person_first, Token.orth == upperInitial} | {Token.string =~ "[Ff]riend"} | {Token.string =~ "[Cc]lient"} | {Token.string =~ "[Ss]upplier"} | {Token.string =~ "[Cc]ustomer"} | ({Token.string =~ "[Tt]he"} ({Token})? {Token.string =~ "[Aa]ctor"}) | {Token.string =~ "[Tt]echnician"} | {Lookup.majorType == jobtitle, !Token.string =~ "[Cc]hair", !Token.string =~ "[Mm]odel", Token.category != JJ, Token.category != VB} ) :NomActeur --> :NomActeur.Acteur = {rule = "ActeurId"}
关键修正说明
- 将原来多层嵌套的
|改为逗号(逻辑与),确保只有当Lookup.majorType是jobtitle,同时满足:- 字符串不是chair(大小写不敏感)
- 字符串不是model(大小写不敏感)
- 词性不是JJ(形容词)
- 词性不是VB(动词原型)
这四个条件时,才会被标注为Acteur。
- 简化了正则表达式的写法,把同类条件合并为一个正则,避免拆分导致的逻辑混乱。
这样修改后,"Chair"、"Model"以及词性为JJ/VB的jobtitle就会被排除,不会被错误标注。
内容的提问来源于stack exchange,提问作者KaoMla
相关产品推荐
相关产品推荐

