如何在quanteda的kwic函数正则模式中定义可选元素匹配含/不含中间名的人名
核心原因
quanteda的kwic基于分词后的独立token进行匹配,phrase()中每个空格分隔的片段对应单个token的匹配规则,和stringr匹配整串连续字符的逻辑完全不同:
- 你写的
Jane .* Mayer要求匹配3个连续token,因此只能命中带中间名的情况 - 你写的
Jane.* Mayer要求匹配2个连续token,因此只能命中不带中间名的情况
解决方案
方案1:同时传入两种匹配规则
直接把带/不带中间名的规则都传入即可,写法简单易读:
my_pattern <- c(phrase("Jane Mayer"), phrase("Jane .* Mayer")) kwic(txt_token, pattern = my_pattern, valuetype = "regex")
运行后会返回3条匹配结果,同时覆盖Jane Mayer、Jane Alexandra Mayer、Jane Eli Mayer三个目标实例,排除Jane Burger的误匹配。
方案2:用token量词控制中间名数量
如果需要兼容0个到多个中间名的场景,可以用{m,n}量词指定中间token的数量范围,比如中间最多允许2个中间名的写法如下:
# {0,2}表示中间的任意token可以出现0次、1次或2次 kwic(txt_token, pattern = phrase("Jane (.*){0,2} Mayer"), valuetype = "regex")
内容的提问来源于stack exchange,提问作者zoowalk
相关产品推荐
相关产品推荐

