2012-01-26 75 views
6

例如,我有幾十億個短語,我想對它們進行類似的聚類。如何在R中找到類似的句子/短語?

> strings.to.cluster <- c("Best Toyota dealer in bay area. Drive out with a new car today", 
         "Largest Selection of Furniture. Stock updated everyday" , 
         " Unique selection of Handcrafted Jewelry", 
         "Free Shipping for orders above $60. Offer Expires soon", 
         "XXXX is where smart men buy anniversary gifts", 
         "2012 Camrys on Sale. 0% APR for select customers", 
         "Closing Sale on office desks. All Items must go" 
         ) 

假設這個向量是數十萬行。 R中是否有一個包來將這些短語的含義分組? 或有人可能會建議一種方法來按照給定短語的含義來排列「相似」短語。

+0

你如何建議定義「意義」?哪些示例短語應該聚集在一起? – tripleee

回答

7

您可以查看短語「字樣的包裝袋」,即建立一個矩陣(「一詞的文檔」矩陣),每個短語一行,每字一列,用1如果發生的話短語,否則爲0。 (你可以用一些重量來代替1,這可以解釋詞組長度和詞頻)。然後您可以應用任何聚類算法。 tm包可以幫助您構建此矩陣。

library(tm) 
library(Matrix) 
x <- TermDocumentMatrix(Corpus(VectorSource(strings.to.cluster))) 
y <- sparseMatrix(i=x$i, j=x$j, x=x$v, dimnames = dimnames(x)) 
plot(hclust(dist(t(y)))) 
+0

根據文森特的建議,tm包中有一個不同的屬性,需要包括「pearson」在內的很多距離參數。你可以使用某種程度的相似性/異化性,只選擇符合設定標準的句子。 –

+0

@TylerRinker,謝謝你的提問。我在考慮大部分意思相關的短語。在我的例子中,「收售的辦公桌..」和「傢俱的最大的選擇......」到(有可能還有其他人一起)被聚集在一起 –

+0

如果這個方法行不通(你需要,例如,許多句子同時與「服務檯」和「傢俱」四個字來自動識別它們作爲關聯),您可以添加有關的詞的含義的一些知識(有一個'wordnet'包,那知道一臺是一塊傢俱)或手動標記某些句子(將它們放在不同的類別中,例如「汽車」,「傢俱」,「旅行」,「食物」等),並將它們用作訓練集以自動標記其餘的的數據。上SE –