2010-09-14 61 views
2

我正在開發一個購物比較網站,該項目處於非常高級的階段。我們每天使用來自各種分支機構網絡的商家信息來索引5千萬個產品。我所遇到的大部分問題已經解決,包括大部分性能瓶頸。用於歸一化分類術語的準確算法?

我的問題是什麼:請首先,我們使用apache solr與drupal但是,這個問題不是特定於drupal或solr,如果您不瞭解它們,那沒關係。

我們收到來自2000多家不同商家的產品信息,而且這些信息很混亂。他們沒有特定的模式,每個商家都以他們想要的方式發送Feed。我們已經解決了許多問題,但仍有一個問題。規範分面瀏覽功能的分類術語。

假設我在我的網站上有一個「Narrow by Brands」瀏覽面。現在假設100個商家提供來自微軟的產品。現在出現了這個問題。一些商家將數據源「微軟」,其他「微軟公司」,其他「微軟公司」和其他「微軟產品」的「品牌」列放入......商家和最差商家之間沒有特定模式,一些個體商家如此sl that,以至於他們在同一個數據饋送中擁有不同的字符串。

我們不希望所有這些不同品牌出現在導航欄中。對於我們手動將導入品牌映射到「良好」品牌表(「Microsoft Corporation」 - >「Microsoft」,「Microsoft產品」 - >「Microsoft」等)的問題,我們有一個手動解決方案。我們在數據庫中有10,000個品牌,這是可行的。問題在於它帶有像「作者」這樣的更大的東西。當我們將書籍導入系統時,有超過80萬名作者,而且我們遇到了同樣的問題,這不適合手工繪製。問題是一樣的:「Tom Mike Apostol」,「Tom M. Apostol」,「Apostol,Tom M.」等等......

有沒有人知道一個好方法來自動解決這個問題的準確度(85%-95%準確度)?

感謝您的幫助!

回答

0

是在我腦海中,altough它只是一個鬆散的想法有些想法:

  1. 轉換名稱首字母(在你的榜樣:TMA)。把' - '當作空格,所以fe。 Antoine de Saint-Exupéry將是ADSE。這裏的問題是如何對待「,」,儘管如此,通常的用法是在姓之前有姓,所以只需交換位置就可以工作(所以A,TM將是TM,A,擺脫逗號 - TMA)。在數據庫
  2. 過濾器由作家那些最初
  3. 對於每個初使,如果你的全名(湯姆,阿波斯托爾)檢查是否匹配,否則(M.)會自動認爲這是一個比賽。
  4. 如果你想要一些寬容,你可以比較Levenshtein距離名稱和容忍一些差異(here你有Oracle實施)符合您一概而論的作者,發現整名稱,每個初始即
  5. 名稱( T,M,A)你查找你的過濾作者(在步驟2之後),並嘗試找到一個沒有初始(M.)但全名(Mike)的,如果你找不到,就用initial。因此,您給出的每個示例都將轉換爲相同的值,這將是全名(Tom Mike Apostol)。

東西,是值得思考:
包括名稱同義詞映射(更有可能最大限度的記錄百,像托馬斯< - >湯姆
這樣,關鍵是有有效的英文縮寫(男女均無而不是N等)

編輯:我前段時間編寫了這樣的東西,當我必須通過它的簽名來識別一個人,忽略掃描問題時,人們有時會用名稱S.姓或NS簽名或只是通過名字姓氏(這是另一件事情,也許你應該考慮在解決方案中,讓算法忽略第二個名字,儘管在你的情況下它很糟糕d我很難忽略別人的第二個名字)。