我正在尝试编写一个简单的程序来比较来自不同供应商的产品的价格。不同的供应商可能将同一产品称为不同的事物。
例如,以下三个字符串指的是同一个产品:
- A2 全脂奶瓶 2l
- A2 牛奶全脂 2L
- A2 全脂牛奶 2L
或者以下两个字符串是同一个产品:
- Ambi Pur 空气清新剂汽车航行 8 毫升。新鲜香草花香。- 每人 1 个
- Ambi Pur 空气清新剂 Voyage Primary 8ml
此外 - 一些产品不相同,但相似(例如,Full Cream 2L Milk 可能包含各种类似产品。)
我对每种产品的唯一信息是标题和价格。
目前推荐的匹配产品字符串的技术是什么?
从我的谷歌搜索和阅读其他 SO 线程中,我发现:
- 有些人建议使用贝叶斯过滤技术。
- 有些人建议对所有产品字符串进行特征提取。因此,您可以从产品中提取品牌(例如“A2”)、产品(“牛奶”)和容量(“2L”),然后创建产品之间的距离向量,并使用二元分类器之类的东西来匹配产品(SVM提到过)。但是,如果没有一大堆规则或正则表达式,我不确定如何实现这一目标?我假设可能有更聪明的无监督学习方法来解决这个问题?价格可能是另一个我们可以用来计算距离向量的“特征”。
- 有些人建议使用神经网络方法,但是,我在这里找不到太多具体代码或示例。
- 其他人建议使用字符串相似性算法,例如 Levenshtein 距离或 Jaro-Winkler 距离。
您会使用上述技术之一,还是使用不同的技术?
另外,有人知道任何示例代码,甚至是此类问题的库吗?我似乎找不到任何东西。
(例如,我看到有些人在计算大型数据集的 Jaro-Winkler 距离时遇到性能问题。我希望可能有算法的分布式实现(例如使用 Mahout),但无法找到任何具体的东西。)