6

我正在使用大量的产品数据集(约 100 万)。这些产品来自许多不同的来源,因此它们列出数据的方式不一致。最大的问题之一是差异产品品牌名称(约 17,000 个独特品牌)。有些品牌有多达 10 个差异需要关联在一起。

问题:


  1. 间距不一致:Jet Boil VS Jetboil
  2. 标点符号:格兰杰VS格兰杰
  3. 噪音词: The North Face VS North Face
  4. 分类法: Armada VS Armada Skis
  5. 符号: Phil and Teds VS Phil&Teds
  6. 拼写错误:巴塔哥尼亚 VS 巴塔哥尼亚
  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

后果(如评论中所建议)

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

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

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

4

1 回答 1

3

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

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

从你给出的例子来看,Levenshtein 似乎是合理的。

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

看到结果后,您可以尝试通过使用您对数据的了解进行手动调整来稍微调整距离度量(例如指定“&”接近“and”等)。

祝你好运!

于 2012-09-07T20:25:38.430 回答