2012-01-30 43 views
2

數量龐大的我必須要找到類似的網址,像集羣網址

'http://teethwhitening360.com/teeth-whitening-treatments/18/'
'http://teethwhitening360.com/laser-teeth-whitening/22/'
'http://teethwhitening360.com/teeth-whitening-products/21/' 'http://unwanted-hair-removal.blogspot.com/2008/03/breakthroughs-in-unwanted-hair-remo'
'http://unwanted-hair-removal.blogspot.com/2008/03/unwanted-hair-removal-products.html'
'http://unwanted-hair-removal.blogspot.com/2008/03/unwanted-hair-removal-by-shaving.ht'

並將它們分組或集中。我的問題:

  • 的網址數量較大(1,580,000)
  • 我不知道哪個羣集或尋找相似的方法更好

我希望有這方面的建議。

回答

5

這裏有幾個問題。首先,你可能會想用字典來洗URL,例如轉換

http://teethwhitening360.com/teeth-whitening-treatments/18/

teeth whitening 360 com teeth whitening treatments 18

那麼你可能想以某種方式阻止的話,例如,使用波特詞幹:

teeth whiten 360 com teeth whiten treatment 18

然後你就可以使用簡單的矢量空間模型來映射n維空間中的URL,然後對它們運行k-均值聚類?這是一個基本的方法,但它應該工作。

涉及的URL數量不應該是一個問題,它取決於您使用的語言/環境。我會認爲Matlab能夠處理它。

4

令牌化說明是明顯的事情要做。然後可以很容易地將這些矢量轉換爲TF-IDF稀疏矢量數據。抓取實際的網頁以獲得額外的令牌可能工作太多了?

在此之後,您應該可以在數據集上使用任何靈活的聚類算法。靈活的我的意思是你需要能夠使用例如餘弦距離而不是歐氏距離(這對於稀疏向量不適用)。不幸的是,在GNU R中的k-means僅支持歐幾里得距離和密集向量。理想情況下,選擇一個非常靈活的框架,但也可以優化。如果你想嘗試k-means,因爲它是一個簡單的(因此是快速的)和完善的算法,我相信有一種叫做「凸k-均值」的變體,可以適用於餘弦距離和稀疏tf-idf向量。

由於大多數算法和實現的複雜性,經典的「層次聚類」(除了過時和表現不是很好)通常是一個問題。有一些專門的案例,其中知道了O(n^2)算法(SLINK,CLINK),但是工具箱通常只提供天真的立方時間實現(包括GNU R,Matlab,sciPy,從我剛剛搜索的內容中)。此外,他們通常只能選擇有限的距離功能,可能不包括餘弦。

但是,這些方法通常很容易實現,並且可以針對實際使用情況進行優化。