【问题标题】:fuzzy matching lots of strings模糊匹配大量字符串
【发布时间】:2015-02-07 15:17:57
【问题描述】:

我有一个包含业主的数据库;我想计算每个人拥有的房产数量,但遇到了标准不匹配问题:

REDEVELOPMENT AUTHORITY vs. REDEVELOPMENT AUTHORITY O vs. PHILADELPHIA REDEVELOPMEN vs. PHILA。开发授权

佩纳联邦 vs. 宾夕法尼亚联邦 vs. 宾夕法尼亚州

TRS 宾夕法尼亚大学 vs. 受托人

据我所见,这是一个很常见的问题,但我的问题与我所看到的解决方案不同,原因有两个:

1) 我有大量字符串 (~570,000),因此计算 570000 x 570000 的编辑距离矩阵(或其他成对匹配指标)似乎对​​资源的使用令人生畏

2) 我并不专注于一次性比较——例如,我从大数据模糊匹配问题中看到的最常见的情况是,将用户输入与文件中的数据库进行匹配。我有一个固定的数据集,我想一劳永逸地压缩。

对于这样的练习,是否有任何完善的例行程序?我最熟悉 Python 和 R,因此其中任何一种方法都是理想的,但由于我只需要这样做一次,因此我愿意扩展到其他不太熟悉的语言(也许是 SQL 中的某些语言? ) 对于这个特定的任务。

【问题讨论】:

  • 我的第一个想法是使用 qdap 包来查找最常用的术语,然后执行一系列 gsub(或者更强大的使用 gsubfn 包)并将常见的变体转换为标准化形式。其次,删除所有介词和 the's 等。第三,将所有名称缩短为前两个或三个单词。此时尝试 agrep 并查看匹配是否可以合理有效地完成。

标签: python sql r fuzzy-search fuzzy-logic


【解决方案1】:

这正是我每天在新工作中面临的问题(但行数只有几百万)。我的做法是:

1) 使用p = unique(a) 查找一组唯一字符串 2)删除标点符号,用空格分割p中的字符串,制作单词频率表,创建一组规则并使用gsub“恢复”缩写,错误输入的单词等。在您的情况下,“AUTH”应该恢复为“AUTHORITY”,“UNIV”->“UNIVERSITY”(反之亦然) 3)如果我用眼睛发现错别字,请恢复它们 4)高级:重新排序字符串中的单词(通常是不正确的英语),以查看两个或多个字符串是否相同,尽管单词顺序相同(例如“10pack 10oz”和“10oz 10pack”)。

【讨论】:

  • 我希望有更好的方法,但我认为这是最有效的。如果人们在创建字符串数据时有一些该死的一致性,那就更好了,但是 c'est la vie
【解决方案2】:

您还可以在 R 中使用 agrep() 进行模糊名称匹配,方法是给出允许的不匹配百分比。如果你传递一个固定的数据集,那么你可以 grep 从你的数据库中寻找匹配。

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2014-11-02
    • 2018-05-31
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多