R:替换字符串中的外来字符

标签 r string-matching

我正在处理大量数据,主要是带有非英文字符的名称。我的目标是将这些名称与在美国收集的有关它们的一些信息进行匹配。

即,我可能想将名称“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 , old2new2根据需要。

这是一个测试:
> s <- "æxš"
> to.plain(s)
[1] "aexs"

更新:更正了 chartr 中的变量名称.

关于R:替换字符串中的外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517319/

相关文章:

javascript - 匹配两个字符串之间的字符串

python - 什么是最简单和快速的字符串匹配算法在字典中的少量模式的情况下,在一个小字符串中找到

c# - 如何获得 2 个字符串数组之间的第一个匹配项

r - 数据框中行名称的交集(数据子集)?

r - 如何在 R 中将字符串计算为变量?

r - 警告:此区域设置中不存在输入字符串

R Markdown - Highcharter - 在可见时动画图形,而不是在页面加载时?

r - R脚本的调试

string - 字符串集中最长的前缀+后缀组合

php - 具有错误字符容忍度的最长公共(public)子串