比较和匹配来自不同商店/供应商的产品名称

时间:2013-11-04 14:39:39

标签: algorithm machine-learning nlp

我正在尝试编写一个简单的程序来比较不同供应商的产品价格。 不同的供应商可能会将同一产品称为不同的东西。

例如,以下三个字符串指的是同一产品:

  • A2全脂奶瓶2l
  • A2牛奶全脂2L
  • A2全脂牛奶2L

或者以下两个字符串是相同的产品:

  • Ambi Pur Air Freshener Car Voyage 8mL。清新的香草花香。 - 每个1个
  • Ambi Pur Air Freshener Voyage Primary 8ml

此外 - 有些产品不一样,但相似(例如,Full Cream 2L Milk可能包含各种类似产品。)

我对每种产品的唯一信息是标题和价格。

目前推荐的匹配产品字符串的技术是什么?

从我的谷歌搜索和阅读其他SO线程,我发现:

  • 有些人建议使用贝叶斯过滤技术。
  • 有些人建议对所有产品字符串进行特征提取。因此,您可以从产品中提取诸如品牌(例如“A2”),产品(“牛奶”)和容量(“2L”)之类的东西,然后在产品之间创建距离矢量,并使用类似二元分类器的东西来匹配产品(SVM)被提到)。但是,如果没有一大堆规则或正则表达式,我不知道如何实现这一目标?我假设可能有更聪明的无监督学习方法来攻击这个问题?价格可能是我们可以用来计算距离向量的另一个“特征”。
  • 有些人建议使用神经网络方法,但是,我在这里找不到具体的代码或示例。
  • 其他人建议使用字符串相似度算法,例如Levenshtein距离或Jaro-Winkler距离。

您会使用上述技术之一,还是会使用其他技术?

此外,有没有人知道任何示例代码,甚至是这类问题的库?我似乎找不到任何东西。

(例如,我看到有些人在计算大型数据集的Jaro-Winkler距离时遇到了性能问题。我希望可能存在算法的分布式实现(例如使用Mahout),但不是'能找到具体的东西。)

1 个答案:

答案 0 :(得分:6)

  

您会使用上述技术之一,还是会使用其他技术?

如果我真的这样做,我就不会用太多的机器学习。我敢肯定大多数大公司都有一个品牌和产品名称的数据库,并使用它来相当容易地匹配。可能需要一些数据卫生 - 但它不是ML问题。

如果您没有该数据库,我会说简单。将所有内容转换为要素向量并执行最近邻搜索。使用它来创建一个工具来帮助您创建数据库。 IE:你自己将第一个“A2全脂牛奶2L”标记为“牛奶”,然后看看它最近的邻居是否是牛奶。给自己一个快速标记“是”和“需要审核”的方法,或者类似的选项。

对于您建议的简单数据,它可以在90%的时间内工作 - 您应该能够轻松地获取数据。我做过类似的工作,一天就标出数千份文件。

拥有自己的数据库后,解决这些问题应该非常简单。您可以重用代码来创建数据库来处理“看不见的”数据。