如何设置grepl匹配规则使其忽略元音字母的重音差异
方案1:直接用字符类匹配对应重音/非重音字符
针对你当前要匹配radiothérapie和radiotherapie的需求,最简单的修改是把可能出现的两种字符放在方括号字符类里,匹配任意一种即可:
ifelse(grepl("Radioth[ée]rapie", mydata$word, ignore.case = TRUE), "yes", "no")
这里加ignore.case = TRUE是顺便兼容大小写差异,比如首字母大写或者全小写的情况,不需要的话可以去掉。
方案2:统一移除重音后再匹配(更通用)
如果你的匹配场景里涉及大量带重音的法语元音,逐个写字符类太麻烦,可以先把待匹配的文本统一转换为无重音的形式,再和无重音的模式匹配:
首先你可以用stringi包的stri_trans_general函数处理重音,先安装加载包:
# 安装包(首次使用执行) install.packages("stringi") # 加载包 library(stringi)
处理重音后匹配的代码如下:
# 先把目标列所有单词的重音去掉 mydata$word_no_accent <- stri_trans_general(mydata$word, "Latin-ASCII") # 直接匹配无重音的模式即可 ifelse(grepl("Radiotherapie", mydata$word_no_accent, ignore.case = TRUE), "yes", "no")
这种方法可以一次性处理所有法语重音字符(包括é、è、à、ù、ô、î等所有带重音的元音),不需要逐个手动写匹配规则,适配性更强。
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

