2011-05-15 49 views
5

我想找到一個庫或算法(所以我自己編寫代碼)來識別網頁的最近k個鄰居,其中網頁被定義爲一組關鍵字。我已經完成了我提取關鍵字的部分。基於關鍵詞的最近鄰居算法或庫

它不一定非常好,只是夠好。

任何人都可以提出解決方案,或從哪裏開始。我過去曾瀏覽過Yury Lifshits的講座,但我希望儘可能做些現成的東西。

首選Java庫。

+0

您是在映射位置嗎?或者您是否需要一種僅基於關鍵字將不同頁面關聯的算法? – fasseg 2011-05-15 06:03:34

+0

您可以創建網站節點的加權無向圖,並且邊緣權重代表「接近度」。例如每個關鍵詞有兩個共同點,可能會增加其邊緣權重。你可以使用java中的很多圖庫。 – fasseg 2011-05-15 06:07:00

+0

@smegbrains,是的,我認爲這就是我所做的。我計算了兩個關鍵字(我認爲相當於你所說的'邊緣寬度')的交集 – Ankur 2011-05-15 09:12:53

回答

2

正如你所說,你已經有了從頁面中提取的關鍵字。我假設你用文字向量表示每個文檔/頁面。像一個document term-frequency矩陣。

我猜一個頁面的最近鄰居理想情況下是一個內容相似的頁面。因此,您希望查找每個單詞的相對頻率與您正在搜索的單詞相似的文檔。所以首先規範文檔項矩陣WRT的每一行;即通過%tage發生來替換髮生次數。

接下來,您必須在由這些向量表示的2個文檔之間分配一定的距離。您可以使用正常Euclidean distanceManhattan Distance。但是對於文本文檔來說,通常效果最好的相似性度量是Cosine Similarity。使用任何距離或相似性函數適合您的問題(請記住最近的鄰居,你想盡量減少距離,但最大的相似性)。

一旦你有了矢量和距離函數,運行Nearest neighbourK-Nearest neighbour算法。

+0

謝謝,你說得對,每個頁面都有一個向量(爲了方便起見,大小爲6)的關鍵字。我會簡單地將每對的關鍵字集合起來,這樣就可以對相似性進行簡單而又髒的衡量。 – Ankur 2011-05-15 07:42:36

+0

如果這是一項業餘愛好/作業,那麼這項措施將會很好。但是如果你正在做一些ML工作,你需要使用一些更嚴格和經過時間考驗的方法。 – BiGYaN 2011-05-16 02:25:39