我有一个包含约 5,000 个地点名称的数据库,其中大部分是带有拼写错误、排列、缩写等的重复。我想按相似性对它们进行分组,以加快进一步处理。最好的办法是将每个变体转换为“柏拉图形式”,并将两列并排放置,原始形式和柏拉图形式。我读过关于多序列比对,但这似乎主要用于生物信息学,用于 DNA/RNA/肽的序列。我不确定它是否适用于地名。任何人都知道一个可以帮助我在 R 中完成它的库吗?或者许多算法变体中的哪一个可能更容易适应?
编辑:我如何在 R 中做到这一点?到目前为止,我正在使用 adist() 函数,它为我提供了每对字符串之间的距离矩阵(尽管它没有按照我认为的方式处理易位,请参阅下面的评论)。我现在正在工作的下一步是将这个矩阵转换为足够相似的值的分组/聚类。提前致谢!
编辑:为了解决易位问题,我做了一个小函数,获取所有超过 2 个字符的单词,对它们进行排序,删除任何剩余的标点符号,然后将它们再次粘贴到字符串中。
sep <- function(linha) {
resp <- strsplit(linha," |/|-")
resp <- unlist(resp)
resp <- gsub(",|;|\\.","",resp)
resp <- sort(resp[which(nchar(resp) > 2)])
paste0(resp,collapse=" ")
}
然后我将它应用到我表的所有行
locs[,9] <- apply(locs,1,function(x) sep(x[1])) # 1=original data; 9=new data
最后应用 adist() 创建相似度表。