2009-12-08 13 views
16

我想讓用戶能夠搜索大量企業列表,但仍會發現近乎匹配。在網站中創建「您的意思是XYZ」功能的想法

有沒有人有任何關於如何最好的解決這個問題的建議,而不是針對簡單的字典單詞,而是複雜的名稱,如ABC商業名稱?

問候。

+0

+1看到更多的好答案。 – 2009-12-08 22:19:06

+0

我同意。我很佩服我的同行軟件工程師的知識深度,所有這些答案都是很好的結果。 – 2009-12-08 22:22:05

回答

7

查閱關於Levenshtein distance的維基百科文章。這是一個相當簡單的概念,可以用你的語言來實現一個算法,在你的案例中,C#很容易實現。

我在C#中找到了一個例子here

另外,here是來自Google的Peter Norvig的拼寫校正器的示例。有人在前幾集的播客中說過,Jon Skeet試圖在C#中重寫相同的算法。不知道他是否完成了它並/或將它公之於衆。

+0

好東西。我將調整它以使SQL服務器端作爲存儲過程來獲得最佳性能,並且只在沒有匹配時才使用它。感謝您的洞察力。 – 2009-12-08 22:59:43

+0

作爲一個更新,這已經在C#這裏實現http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig-Spelling-Corrector.html – 2011-03-21 21:57:40

2

考慮使用關鍵字匹配和編輯基於距離的相似度。可能與'原始搜索'結合'實際點擊'。

1

這可能是一個瘋狂的解決方案,但你可以拆分空間的業務名稱,然後搜索所有的項目或可能是第一對夫婦。

因此,您可能會搜索'ABC'和'Business',但會忽略'Name',因爲這可能需要很長時間。

您甚至可以檢查字符串是否具有一定的長度,然後修剪並只搜索第一個5個字母。

你有沒有看過「soundex」作爲一種搜索你的業務的方式。再次,我認爲你需要將空間名稱分開。

1

您可以查看SQL Server SOUNDEXDIFFERENCE函數。 SOUNDEX將一系列字符(如單詞)轉換爲4個字符的代碼,對於聽起來相似的單詞而言,它們是相同的。 DIFFERENCE給出了一個數字,表示兩個字符串「不同」是如何基於聲音的。

例如,您可以基於SOUNDEX函數創建計算列,並在稍後與該列匹配。或者你可以在WHERE子句中使用DIFFERENCE。

+1

你也可以做一個谷歌搜索MetaPhone,它基本上是一個更復雜的Soundex版本。 Soundex實際上創建於1918年,是一個非常簡單/基本的算法。 Metaphone通常會提供更好的匹配,但並不是SQL內置的,儘管它有很多T-SQL版本 – Sparky 2009-12-08 22:31:54

相關問題