我有一份包含1000多个关键词的列表,希望根据相似性将它们分组。
例如:
- “露台家具”
- “客厅家具”
- “二手椅子”
- “新椅子”
我希望”家具”和”椅子”这些词能够聚集在一起。
我知道一种方法是预先选择一些”中心”词,然后计算每个词到这些中心词的Levenshtein距离,并使用kmeans进行聚类。
但我想了解的是,在不预先指定像”椅子”和”家具”这样的中心词的情况下,如何进行这种聚类。
谢谢。
回答:
你可以使用stringdist
包来计算距离矩阵:
str <- c("露台家具", "客厅家具", "二手椅子", "新椅子")
library(stringdist)
d <- stringdistmatrix(str, str)
stringdist
支持多种距离函数。默认使用的是’受限的Damerau-Levenshtein距离’。然后你可以将这个距离矩阵用于hclust
来进行层次聚类:
cl <- hclust(as.dist(d))
plot(cl)
hclust
有多种不同的方法。请参阅?hclust
。要创建固定数量的组(这里是2个):
cutree(cl, 2)
但是,这可能只是众多可能的解决方案之一。