如何指定 grepl 以考虑元音而不考虑重音

How to specify to grepl to take into account a vowel irrespective of the accent

我正在处理法语单词的数据。 我想让 grepl 考虑这个词,元音是否有重音。 这是代码的一部分:

这里我想让grepl找出所有radiothérapieradiotherapie的词,也就是忽略重音

ifelse(grepl("Radiothe(é)rapie",mydata$word),"yes","no")

好吧,蛮力的方法是使用包含字母所有变体的字符 class,例如

ifelse(grepl("Radioth[eé]rapie", mydata$word), "yes", "no")
ifelse(grepl("Radioth[eé]rapie", c("Radiotherapie", "Radiothérapie", "Radio")),"yes","no")

可能的解决方案:在使用 grepl 之前转换为 Latin-ASCII

x <- c("radiothérapie", "radiotherapie")
grepl("radiotherapie", stringi::stri_trans_general(x,"Latin-ASCII"))
[1] TRUE TRUE

这应该适用于大多数(所有?)口音..

您可以采用更通用的方法

string = "ábçdêfgàõp"
iconv(string, to='ASCII//TRANSLIT')
# [1] "abcdefgaop"

针对您的场景

x <- "Radiotherapie"
y <- c("Radiotherapie", "Radiothérapie", "Radio")

grepl(iconv(x, to='ASCII//TRANSLIT'), iconv(y, to='ASCII//TRANSLIT'))

# [1]  TRUE  TRUE FALSE

这是使用 greplregex 的技巧:

在否定您的选择的组内使用插入符号:

x <- c("radiothérapie", "radiotherapie")

grepl('radioth[é^e]rapie', x)
[1] TRUE TRUE