【发布时间】:2013-11-26 11:38:15
【问题描述】:
我有一个包含约 5,000 个地点名称的数据库,其中大部分是带有拼写错误、排列、缩写等的重复。我想按相似性对它们进行分组,以加快进一步处理。最好的办法是将每个变体转换为“柏拉图形式”,并将两列并排放置,原始形式和柏拉图形式。我读过Multiple sequence alignment,但这似乎主要用于生物信息学,用于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() 创建相似度表。
【问题讨论】:
-
可能使用 soundex 算法按声音对名称进行分组。
-
名字是葡萄牙语,我不认为它会起作用,因为 soundex 是为英文名字设计的,对吧?
-
西班牙语/葡萄牙语通常可以与 soundex 配合使用。当然,里程可能会有所不同。双变位可能更符合您的喜好。 (添加了指向巴西葡萄牙变音位实现的链接)sourceforge.net/projects/metaphoneptbr
标签: string r similarity sequence-alignment