2016-08-18 99 views
0

我需要自動匹配產品名稱(食品)。問題類似於 Fuzzy matching of product names產品標題的模糊字符串匹配算法

主要問題是即使相關關鍵字的單個字母更改可以產生巨大差異,但要檢測哪些是相關關鍵字並不容易。考慮三個產品名稱Lenovo T400,Lenovo R400New Lenovo T-400, Core 2 Duo

前兩個是可笑的,相似的字符串以任何標準(好吧,同音可能有助於disinguish的T和R在這種情況下,但名稱可能會成爲400T400R),第一和第三都是很遠從彼此作爲字符串,但是是相同的產品。

顯然,匹配算法不能100%精確,我的目標是自動匹配大約80%的名字,並且信心十足。

但有一個複雜因素:我的字符串有錯誤,因爲我想要搜索的文件是圖像識別的結果。產品標題在這些文件中沒有空格。

例如,我想找到的產品名稱cookiesoreovarianta,我有一個字符串

cookiesoreovariant b(一個真正的其他產品)
cookiesoreovariamt q(一個真正的產品, 「A」 和「q 「在某些字體相似的符號)
cookiesoreovaria TA(只是一個錯誤)

我做沒有完整的規範名稱數據庫。

我該如何解決這個問題。有任何想法嗎?

回答

0

理想情況下,你可能分裂成字符串分隔標記,然後確定哪些令牌是品牌,什麼記號是型號名稱,什麼記號是型號等

一個很好的做到這一點的方法就是是使用條件隨機場來訓練一部分的語音分類器。我們做了toolkit called parserator來幫助做到這一點。

但是,您的問題比正常情況困難,因爲您還必須執行稱爲word segmentation的操作。

這個計算器問題有一個相當不錯的介紹詞How to split text without spaces into list of words?

一旦你有你的標題分割和標記,當你比較兩個產品標題,你會希望將標題的不同部位不同進行比較。例如,您可以找到品牌名稱之間的Levenshtein距離,然後查找型號名稱之間的距離,然後查找型號之間的距離。

要有效且高效地進行這些多重比較,請使用包裝進行記錄連接,如dedupe

0

對於我發現的產品數據,我需要結合使用模糊匹配算法纔能有效,因爲每項技術都有缺陷。

  1. 我開始用截斷語音音位(因爲它可以預先計算) 找到最初的候選匹配值得仔細檢查。
  2. 然後我比較候選 匹配使用相似性度量的組合 Damerau-Levenshtein,全長音標,具有Jaccard相似性的字符NGrams,相似的長度,以及word1是否開始/結束word2,反之亦然。
  3. 然後,我將各個算法乘以適合我需要的任意權重因子。
  4. 然後我排除了最低的相似度結果,並將其餘的平均值作爲總體相似度。

對於你的具體情況處理的型號,你可以調整你的最終相似性度量是寬容的,其中這兩個詞都是非字典中的單詞或者兩個詞包含數字的數字要少得多,因爲型號更加精確比正常的英文單詞。

如果你的數據真的看起來像「cookiesoreovariantb」,你最大的問題實際上是標記。一旦詞語被正確劃分爲「cookies oreo variant b」,您可以做更多的事情來控制必要的相似度以得出匹配結果。

我寫了一篇文章,詳細說明了弱點,我發現試圖在產品數據上使用每個單獨的相似性度量。 https://saas.findwatt.com/blog/post/confused-people-dont-buy-how-fuzzy-matching-helps