2010-02-02 62 views
6

我們其中一個較大的網站有一個部分,用戶可以向網站所有者發送問題,由其員工親自評估。 當相同的問題經常彈出時,他們可以將這個特定的問題添加到常見問題。如何構建「相關問題」引擎?

爲了防止他們每天收到幾十個類似的問題,我們希望提供一個類似於本站「相關問題」的特性(堆棧溢出)。

有什麼方法來建立這種功能? 我知道我應該以某種方式評估問題並將其與常見問題中的問題進行比較,但該比較如何工作?關鍵字是否被提取?如果是,如何?

值得一提的是這個網站是建立在LAMP堆棧上的,因此這些都是可用的技術。

謝謝!

+0

的可能重複的關鍵字提取web服務[#1的相關問題(http://stackoverflow.com/questions/393505/stackoverflows-related-questions) – 2014-03-30 19:42:48

回答

3

我不知道Stack Overflow是如何工作的,但我猜想它使用標籤來查找相關問題。例如,在這個問題上,前幾個相關問題都有標籤recommendation-engine。我猜想稀有標籤上的匹配計數比普通標籤上的匹配多。你可能也想看看term frequency–inverse document frequency

+2

而且路口的大概尺寸在各組標籤之間。 – jensgram 2010-02-02 08:29:45

4

如果你想自己從頭開始構建這樣的事情,你會使用稱爲TF/IDF:術語頻率/逆文檔頻率。這意味着,爲了簡化它,您可以在查詢中找到整個語料庫中不常見的單詞,並查找包含這些單詞的文檔。換句話說,如果有人用「我要買一頭大象」的話輸入查詢,那麼查詢中的單詞「大象」可能是您的語料庫中最不常用的單詞。 「買」可能是下一個。因此,您對文檔(在您的案例中,以前的查詢)進行排名,它們包含「大象」一詞的含義以及它們包含「購買」一詞的含義。 「我」,「到」和「一個」這些詞可能在停止列表中,因此您完全忽略它們。您可以對每個文檔(在您的案例中爲先前的查詢)進行排名,其中包含多少匹配詞(根據逆文檔頻率進行加權 - 即非常見詞的權重較高)並顯示前幾位。

我已經過分簡化了,您需要閱讀此文才能正確使用它,但是以簡單的方式實現它確實不是非常複雜。維基百科的頁面可能是一個良好的開端:

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

1

鑑於你在一個LAMP堆棧的工作,那麼你就應該能夠使MySQL's Fulltext search functions很好的利用。我相信TF-IDF校長的工作,並且可以很容易地創建你想要的「相關問題」。

1

有一本很棒的O'Reilly書 - Programming Collective Intelligence - 涵蓋了小組發現,推薦和其他類似主題。從內存來看,這些例子都是用Perl編寫的,但是我發現很容易理解來自PHP的背景,並且在幾個小時內就已經構建了類似於您所追求的內容。

雅虎在http://developer.yahoo.com/search/content/V1/termExtraction.html

+0

我在O'reilly的* P.C.I *預覽中看到的示例是Python。 – isomorphismes 2011-03-14 05:20:42