Levenshtein距离的文本聚类

我有一套(2k – 4k)的小字符串(3-6个字符),我想集中它们。由于我使用字符串,以前在How does clustering (especially String clustering) work?的答案告诉我,Levenshtein distance很好被用作字符串的距离函数。另外,既然我不知道这个簇的数量,hierarchical clustering就是去k而不是k-means的方式。

虽然我以抽象的形式得到问题,但我不知道实际做什么是简单的方法。例如,MATLAB或R是使用自定义函数(Levenshtein distance)实际实现分层聚类的更好选择。
对于这两种软件,人们可能很容易找到Levenshtein距离实现。聚类部分似乎更难。例如Clustering text in MATLAB计算所有字符串的距离数组,但是我无法理解如何使用距离数组实际获取聚类。你们中的任何一个大师可以告诉我如何在MATLAB或R中用自定义函数实现层次聚类?

这可能有点简单,但这里是使用基于Levenshtein距离的层次聚类的代码示例。

set.seed(1)
rstr <- function(n,k){   # vector of n random char(k) strings
  sapply(1:n,function(i){do.call(paste0,as.list(sample(letters,k,replace=T)))})
}

str<- c(paste0("aa",rstr(10,3)),paste0("bb",rstr(10,3)),paste0("cc",rstr(10,3)))
# Levenshtein Distance
d  <- adist(str)
rownames(d) <- str
hc <- hclust(as.dist(d))
plot(hc)
rect.hclust(hc,k=3)
df <- data.frame(str,cutree(hc,k=3))

在这个例子中,我们以3组(以“aa”,“bb”和“cc”开头)人为地创建了一组30个随机字符(5)字符串。我们使用adist(…)计算Levenshtein距离矩阵,我们使用hclust(…)运行heirarchal聚类。然后我们将树形图用cutree(…)剪切成三个簇,并将簇ID附加到原始字符串。

http://stackoverflow.com/questions/21511801/text-clustering-with-levenshtein-distances

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Levenshtein距离的文本聚类