我需要自动将来自不同来源的产品名称(相机,笔记本电脑,电视等)与数据库中的规范名称进行匹配。

例如“Canon PowerShot a20IS” “NEW powershot A20 IS from Canon” “数码相机Canon PS A20IS”
应该都匹配“Canon PowerShot A20 IS” 。我使用了levenshtein距离,并添加了一些启发式方法(删除了明显的常用词,为数字更改分配了更高的成本等),这种方法在一定程度上有效,但不幸的是效果不佳。

主要问题是,即使相关字母中的单个字母更改也会产生巨大的差异,但要确定哪些是相关关键字并不容易。例如,考虑三个产品名称:
联想T400
联想R400
全新Lenovo T-400,Core 2 Duo
从任何标准来看,前两个字符串都是非常荒谬的相似字符串(在这种情况下,soundex可能有助于区分T和R,但名称也可能是400T和400R),第一个和第三个彼此之间相距甚远字符串,但是是同一产品。

显然,匹配算法不能达到100%的精确度,我的目标是以高可信度自动匹配大约80%的名称。

任何想法或引用,不胜感激

最佳答案

我认为这可以归结为区分关键词(例如 Lenovo Lenovo )和谷 shell (例如 New )。

我将对名称数据库进行一些分析以识别关键字。您可以使用类似于生成词云的代码。

然后,我将手动编辑列表以删除任何明显的谷 shell ,例如,New实际上是常见的,但不是关键。

然后,您将获得可用于帮助识别相似性的关键字列表。您可以将“原始”名称与其关键字相关联,并在比较两个或多个原始名称的相似性(字面意思是共享关键字的百分比)时使用这些关键字。

无论如何,这都不是一个完美的解决方案,但是我不认为您期望一个解决方案?

10-06 05:08
查看更多