如何在词性标注文本中正向匹配极性(是非)疑问句
正向匹配极性疑问句的实现方案
核心思路是通过负向全局断言限制动词前的所有token词性不触发排除规则,无需配合invert = TRUE即可直接命中目标语料。
匹配逻辑说明
我们要确保:从句子开头到第一个动词(词性匹配_V[BDH]规则)出现之前,不存在任何符合以下特征的token:
- 词性以
Q结尾(疑问词) - 词性以
P开头(人称代词) - 词性以
D开头(指示代词)
正向匹配正则及代码
# 正向匹配正则模式 p_positive <- "^(?:(?!_[PQD]|_.*Q$)[^\\s]+\\s)*?[^\\s]+_V[BDH]" # 直接匹配目标语料 grep(p_positive, df$c7, value = TRUE, perl = TRUE)
输出结果
[1] "holy_JJ shit_NN1 does_VDZ it_PPH1 happen_VVI" [2] "are_VBR the_AT pictures_NN2 nice_JJ" [3] "does_VDZ n't_XX it_PPH1"
和你之前用invert = TRUE得到的结果完全一致。
正则规则拆解
^:匹配句子开头(?:(?!_[PQD]|_.*Q$)[^\\s]+\\s)*?:非捕获分组,惰性匹配任意多个符合要求的token:(?!_[PQD]|_.*Q$):负向先行断言,排除词性以P/D开头、或以Q结尾的token[^\\s]+\\s:匹配单个完整token及后面的空格
[^\\s]+_V[BDH]:匹配第一个符合要求的动词token,确保前面的所有token都通过了排除校验
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

