如何指定 grepl 以考虑元音而不考虑重音
How to specify to grepl to take into account a vowel irrespective of the accent
我正在处理法语单词的数据。
我想让 grepl 考虑这个词,元音是否有重音。
这是代码的一部分:
这里我想让grepl找出所有radiothérapie
或radiotherapie
的词,也就是忽略重音
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
这是使用 grepl
和 regex
的技巧:
在否定您的选择的组内使用插入符号:
x <- c("radiothérapie", "radiotherapie")
grepl('radioth[é^e]rapie', x)
[1] TRUE TRUE
我正在处理法语单词的数据。 我想让 grepl 考虑这个词,元音是否有重音。 这是代码的一部分:
这里我想让grepl找出所有radiothérapie
或radiotherapie
的词,也就是忽略重音
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
这是使用 grepl
和 regex
的技巧:
在否定您的选择的组内使用插入符号:
x <- c("radiothérapie", "radiotherapie")
grepl('radioth[é^e]rapie', x)
[1] TRUE TRUE