字符串的无监督聚类

Dir*_*way 0 nlp r cluster-analysis machine-learning k-means

我有 1000 多个关键字的列表,我想按相似性将它们组合在一起。

例如:

  • “庭院家具”
  • “客厅家具”
  • “旧椅子”
  • “新椅子”

我希望将“家具”和“椅子”这两个词组合在一起。

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

但我有兴趣了解的是,如何在不预先指定“椅子”和“家具”等质心术语的情况下做到这一点。

谢谢。

Jan*_*aan 5

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

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

library(stringdist)
d <- stringdistmatrix(str, str)
Run Code Online (Sandbox Code Playgroud)

stringdist支持多种距离函数。默认值是“受限的 Damerau-Levenshtein 距离”。然后你可以使用这个距离矩阵hclust来执行层次聚类:

cl <- hclust(as.dist(d))
plot(cl)
Run Code Online (Sandbox Code Playgroud)

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

cutree(cl, 2)
Run Code Online (Sandbox Code Playgroud)

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