我有一个属性所有者的数据库;我想计算每个人拥有的房产数量,但我遇到了标准的不匹配问题:
REDEVELOPMENT AUTHORITY与REDEVELOPMENT OUTHORITY O vs. PHILADELPHIA REDEVELOPMEN vs. PHILA。 REDEVELOPMENT AUTH
PENNA的共同体与宾夕法尼亚州的共同卫生与宾夕法尼亚州的共同卫生
PAT的TRS UNIV OF OF THE PITTEES从我所看到的情况来看,这是一个非常常见的问题,但我的问题与我见过的解决方案有所不同,原因有两个:
1)我有大量的字符串(~570,000),因此计算570000 x 570000矩阵的编辑距离(或其他成对匹配指标)似乎是对资源的艰巨使用
2)我并不专注于一次性比较 - 例如,我从大数据模糊匹配问题中看到的最常见,将用户输入与文件中的数据库相匹配。我有一个固定的数据集,我想一劳永逸地压缩。
这种练习有没有完善的惯例?我对Python和R最熟悉,所以在这两种方法中的方法都是理想的,但由于我只需要这样做一次,我愿意分支到其他不那么熟悉的语言(也许是SQL中的东西? )为这个特殊的任务。
答案 0 :(得分:1)
这正是我每天在新工作中所面临的问题(但行数是几百万)。我的方法是:
1)使用p = unique(a)
查找一组唯一字符串
2)删除标点符号,用空格分隔p
中的字符串,制作一个单词表'频率,创建一组规则并使用gsub
来恢复"缩写,错误的单词等。在你的情况下" AUTH"应该恢复到" AUTHORITY"," UNIV" - > "学报" (或相反亦然)
3)如果我用眼睛发现它们,就可以恢复错别字
4)高级:重新排序字符串中的单词(经常是不正确的英语),看看两个或多个字符串是否相同,尽管是单词顺序(例如" 10pack 10oz"和#34; 10oz 10pack") 。
答案 1 :(得分:1)
您还可以使用R中的agrep()进行模糊名称匹配,方法是给出允许的不匹配百分比。如果您将固定数据集传递给它,那么您可以从数据库中搜索匹配项。