【问题标题】:Fuzzy strings matching algorithms for product titles产品标题的模糊字符串匹配算法
【发布时间】:2016-12-25 05:10:42
【问题描述】:

我需要自动匹配产品名称(食品)。问题类似于 Fuzzy matching of product names

主要问题是,即使是相关关键字的单个字母变化也会产生巨大的差异,但要检测哪些是相关关键字并不容易。例如,考虑三个产品名称 Lenovo T400Lenovo R400New Lenovo T-400, Core 2 Duo

从任何标准来看,前两个都是非常相似的字符串(好吧,在这种情况下,soundex 可能有助于区分 T 和 R,但名称也可能是 400T400R),第一个和第三个作为字符串彼此相距很远,但它们是相同的产品。

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

但是有一个复杂的问题:我的字符串有错误,因为我要搜索的文件是图像识别的结果。产品标题在这些文件中没有空格。

例如,我想查找产品名称cookiesoreovarianta 并且我有字符串

cookiesoreovariantb(真正的其他产品)
cookiesoreovariamtq(真正的其他产品,“a”和“q”在某些字体中是相似的符号)
cookiesoreovariamta(只是一个错误)

我确实没有没有完整的规范名称数据库。

我将如何处理这个问题。有什么想法吗?

【问题讨论】:

    标签: string-matching fuzzy


    【解决方案1】:

    理想情况下,您可以将字符串拆分为单独的标记,然后识别哪些标记是品牌,哪些标记是型号名称,哪些标记是型号等。

    这样做的一个好方法是使用条件随机场来训练词性分类器。我们创建了一个toolkit called parserator 来帮助做到这一点。

    但是,您的问题比平常更难,因为您还必须执行所谓的word segmentation

    这个stackoverflow问题对分词有很好的介绍How to split text without spaces into list of words?

    对标题进行分段和标记后,当您比较两个产品标题时,您会希望以不同的方式比较标题的不同部分。例如,您可以找到品牌名称之间的 Levenshtein 距离,然后是型号名称之间的距离,然后是型号之间的距离。

    要有效且高效地进行这些多重比较,请使用像dedupe 这样的记录链接包。

    【讨论】:

      【解决方案2】:

      对于产品数据,我发现我需要使用模糊匹配算法的组合才能有效,因为每种技术都有弱点。

      1. 我从截断的语音变音位开始(因为它可以预先计算) 找到值得仔细检查的初始候选人匹配。
      2. 然后我比较了候选人 匹配使用相似性度量的组合 Damerau-Levenshtein、全长拼音、具有 Jaccard 相似性的字符 NGram、相似长度以及 word1 是否开始/结束 word2,反之亦然。
      3. 然后我将各个算法乘以适合我需要的任意权重因子。
      4. 然后我排除了最低相似度的结果,并将其余的一起平均作为整体相似度。

      对于您处理型号的特殊情况,您可以调整最终相似度指标,使其在两个词都是非字典词或两个词都包含数字的情况下更不宽容,因为型号比普通英语更精确单词。

      如果您的数据真的看起来像“cookiesoreovariantb”,那么您最大的问题实际上是标记化。一旦将单词正确划分为“cookies oreo variant b”,您就可以做更多的事情来控制必要的相似度,从而得出匹配的结论。

      我写了一篇文章,详细说明了我在产品数据上尝试单独使用每个单独的相似性指标时发现的弱点。 https://saas.findwatt.com/blog/post/confused-people-dont-buy-how-fuzzy-matching-helps

      【讨论】:

        猜你喜欢
        • 2011-02-22
        • 2015-11-27
        • 2010-10-10
        • 2012-02-14
        • 2014-11-02
        • 2015-06-22
        • 2018-05-31
        • 2021-04-19
        • 1970-01-01
        相关资源
        最近更新 更多