我正在处理大量数据,主要是带有非英文字符的名称。我的目标是将这些名称与在美国收集的有关它们的一些信息进行匹配。
即,我可能想将名称“Sølvsten”(来自某些名称列表)与“Soelvsten”(存储在某个美国数据库中的名称)相匹配。这是我写的一个函数来做到这一点。这显然很笨拙而且有些随意,但我想知道是否有一个简单的 R 函数可以将这些外来字符转换为它们最近的英语邻居。我知道可能没有任何标准的方法来进行这种转换,但我只是好奇是否有这种转换以及是否可以通过 R 函数完成这种转换。
# a function to replace foreign characters
replaceforeignchars <- function(x)
{
require(gsubfn);
x <- gsub("š","s",x)
x <- gsub("œ","oe",x)
x <- gsub("ž","z",x)
x <- gsub("ß","ss",x)
x <- gsub("þ","y",x)
x <- gsub("à","a",x)
x <- gsub("á","a",x)
x <- gsub("â","a",x)
x <- gsub("ã","a",x)
x <- gsub("ä","a",x)
x <- gsub("å","a",x)
x <- gsub("æ","ae",x)
x <- gsub("ç","c",x)
x <- gsub("è","e",x)
x <- gsub("é","e",x)
x <- gsub("ê","e",x)
x <- gsub("ë","e",x)
x <- gsub("ì","i",x)
x <- gsub("í","i",x)
x <- gsub("î","i",x)
x <- gsub("ï","i",x)
x <- gsub("ð","d",x)
x <- gsub("ñ","n",x)
x <- gsub("ò","o",x)
x <- gsub("ó","o",x)
x <- gsub("ô","o",x)
x <- gsub("õ","o",x)
x <- gsub("ö","o",x)
x <- gsub("ø","oe",x)
x <- gsub("ù","u",x)
x <- gsub("ú","u",x)
x <- gsub("û","u",x)
x <- gsub("ü","u",x)
x <- gsub("ý","y",x)
x <- gsub("ÿ","y",x)
x <- gsub("ğ","g",x)
return(x)
}
注意:我知道存在名称匹配算法,例如 Jaro Winkler 距离匹配,但我更愿意进行精确匹配。
最佳答案
尝试使用 chartr
一个字符替换的 R 函数(应该很快),然后用一系列 gsub
清理它调用每个一到两个字符替换(这可能会更慢,但数量不多)。
to.plain <- function(s) {
# 1 character substitutions
old1 <- "šžþàáâãäåçèéêëìíîïðñòóôõöùúûüý"
new1 <- "szyaaaaaaceeeeiiiidnooooouuuuy"
s1 <- chartr(old1, new1, s)
# 2 character substitutions
old2 <- c("œ", "ß", "æ", "ø")
new2 <- c("oe", "ss", "ae", "oe")
s2 <- s1
for(i in seq_along(old2)) s2 <- gsub(old2[i], new2[i], s2, fixed = TRUE)
s2
}
添加到
old1
, new1
, old2
和 new2
根据需要。这是一个测试:
> s <- "æxš"
> to.plain(s)
[1] "aexs"
更新:更正了
chartr
中的变量名称.
关于R:替换字符串中的外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517319/