不一致数据集的记录匹配算法



我正在处理一个大型产品数据集(约100万)。这些产品来自许多不同的来源,因此它们列出的数据不一致。其中一个大问题是产品品牌名称的差异(约17000个独特品牌)。有些品牌有多达10个差异需要关联在一起。

问题:


  1. 耐腐蚀间距:Jetboil VS Jetboil
  2. 标点符号:格兰杰VS格兰杰
  3. 噪音词:北面VS北面
  4. 分类:阿玛达VS阿玛达滑雪
  5. 符号:菲尔和特德VS菲尔&Teds
  6. 拼写错误:Patagonia VS Pategonia
  7. 其他赔率:贝尔体育VS贝尔体育#81037

示例数据集


Black Diamond
Black Diamond (Uda)
Black Diamond Co
Black Diamond Eq Ltd
Black Diamond Eqp #76800
Black Diamond Equipment
Black Dog Machine Llc
Black Dome Press
Black Dot
Black Dragon
Black Fire
Black Flys
Black Forest Girl
Black Gold
Black Hawk Inc.
Black Hills
Black Knight
Black Label
Black Magic
Black Marine
Black Market Bikes
Black Max
Black Opal
Black Ops
Black Rain Ordance Inc.
Black Rain Ordnance
Black Rapid
Black Ribbon
Black Rifle Disease Engineerin
Black River Bucks
Black Seal
Black Seed
Black Swan
Black Tower
Black Widow
Black's

后果(如评论中所建议的)

  • 不正确的关联会导致在产品搜索中显示不相关的品牌,从而削弱展示层的可用性
  • 缺少关联将导致同一品牌在过滤器列表中多次显示,从而削弱展示层的可用性

我意识到这是一个很大的问题,可能超出了堆栈溢出文章所能解决的范围,但我正在寻找如何解决这个问题的灵感。

任何可能有帮助的算法、软件模式或过程都是受欢迎的。

好吧,我的方法是使用一些距离度量来量化短语之间的相似性,然后根据它们的距离对术语进行聚类。

你可以从一个经典的文本度量开始,比如Levenstein距离(你会很容易找到许多实现),这基本上是编辑距离,或者你需要从一个字符串到另一个字符串的操作数量,其中一个操作可以是替换、插入或删除。

从你举的例子来看,莱文斯坦似乎是合理的。

对于集群,有大量的算法,同样,这很容易在谷歌上找到大量的实现。聚类基本上是找到在一定距离度量下彼此接近的对象组(簇)。在您的情况下,这些术语组彼此相似。

一旦你看到结果,你可以尝试使用你的距离度量,利用你对数据的了解进行手动调整(比如指定"&"接近"one_answers",等等)。

祝你好运!

最新更新