我有1000多个关键字,希望通过相似性将它们组合在一起。

例如:


“露台家具”
“客厅家具”
“二手椅子”
“新椅子”


我希望将“家具”和“椅子”这两个术语聚在一起。

我知道我可以做到这一点的一种方法是指定一些预选的“质心”术语,然后计算到每个Levenshtein的距离,并使用kmeans对其进行聚类。

但是我有兴趣了解的是,如何在没有预先指定质心词(例如“椅子”和“家具”)的情况下做到这一点。

谢谢。

最佳答案

您可以使用stringdist包来计算距离矩阵:

str <- c("patio furniture",
  "living room furniture",
  "used chairs",
  "new chairs")

library(stringdist)
d <- stringdistmatrix(str, str)


stringdist支持许多距离功能。默认值为“限制的Damerau-Levenshtein距离”。然后,您可以在hclust中使用此距离矩阵执行分层聚类:

cl <- hclust(as.dist(d))
plot(cl)


hclust有许多不同的方法。参见?hclust。要创建固定数量的组(此处为2):

cutree(cl, 2)


但是,这可能是许多可能的解决方案之一。

关于r - 字符串的无监督聚类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23337041/

10-11 15:15