輸入標題後出現的相關問題以及查看問題時出現在右側欄中的相關問題似乎暗示了非常恰當的問題。 Spolsky在一次演講中表示,Stack Overflow只對SQL進行搜索,並且不使用特殊算法。Stack Overflow相關問題算法
在這種情況下存在哪些算法可以給出很好的答案。 在這種情況下,U如何進行數據庫搜索?使標題可以搜索並搜索關鍵字或在標籤上進行搜索以及在頂部有很多投票的問題?
輸入標題後出現的相關問題以及查看問題時出現在右側欄中的相關問題似乎暗示了非常恰當的問題。 Spolsky在一次演講中表示,Stack Overflow只對SQL進行搜索,並且不使用特殊算法。Stack Overflow相關問題算法
在這種情況下存在哪些算法可以給出很好的答案。 在這種情況下,U如何進行數據庫搜索?使標題可以搜索並搜索關鍵字或在標籤上進行搜索以及在頂部有很多投票的問題?
相關問題側邊欄會針對每個問題的標籤來構建(基於標籤重疊排名它們可能,所以5個標籤通用> 4個標籤通用等)。
其餘的將建立在適合自然語言處理的啓發式算法上。這些在通用目的語言中通常不是很好,但是一旦將詞彙縮減到諸如編程之類的單個技術領域,其中大多數都非常好。
我不知道SO是如何實現它的,但我的直覺是他們使用了approximate string matching的變體。
看看波特爲stemming算法,如果你正在尋找「相關」的算法。
一種英語詞幹,例如, 應確定字符串「貓」(和 可能「貓爪」,「斤」等)的基礎上,根「貓」作爲 和 「詞幹「,」干擾「,」干擾「爲基於」詞幹「的 。干擾算法 將「釣魚」,「釣魚」, 「魚」和「漁夫」這兩個詞縮寫爲根魚字, 「魚」。
一旦處理完文檔並完成了對其的處理,就可以通過計數將干擾詞編入索引,然後與其他文檔進行比較。這是解決這個問題的最基本的方法。
也要照顧到忽略stop words像「的」「的」,「一個」等
使用SQL Server的全文檢索功能。
這樣的問題可以通過製作詞幹的「詞組」來解決。這基本上是一個字數向量。對這些詞進行預處理(詞幹)並用它們在句子中出現的概率進行加權(「該詞」比「概率」具有更高的概率,因此應該加權得更小)。然後,你可以將這個詞袋看作是歐幾里得空間中的一個矢量,或者作爲一個概率密度的樣本。
您可以將算法應用爲最近鄰搜索或語義散列。後者似乎是SOTA(見http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf)。
如果你聽Stack Overflow podcast 32(遺憾的是抄本沒有太多內容),你可以聽到傑夫阿特伍德談論他是如何做到的。
好像算法是這樣的:
更多關於全文搜索的詳細信息可以在這裏找到:http://msdn.microsoft.com/en-us/library/ms142571.aspx
這可能已經過時了 - 他們正在談論轉向更好/更快的全文搜索,例如Lucene,我隱約記得傑夫在播客中說這已經完成了。
實際上這是現在排名最高的相關問題;) – SillyMonkey 2009-05-21 07:44:00
@SillyMonkey究竟是我要說的話! – 2009-05-21 07:50:49