我手头有以下问题:我有一个很长的单词列表,可能是名字、姓氏等。我需要对这个单词列表进行聚类,以便相似的单词,例如具有相似编辑(Levenshtein)距离的单词出现在同一个簇中。例如“algorithm”和“alogritm”应该有很高的机会出现在同一个集群中。
我非常了解模式识别文献中的经典无监督聚类方法,例如 k 均值聚类、EM 聚类。这里的问题是这些方法适用于向量空间中的点。我手上有弦词。根据我迄今为止的调查工作,似乎如何在数值向量空间中表示字符串并计算字符串簇的“平均值”的问题还没有得到充分解答。解决这个问题的一个简单方法是将 k-Means 聚类与 Levenshtein 距离相结合,但问题仍然是“如何表示字符串的“均值”?”。有一个权重叫做TF-IDF权重,但似乎主要与“文本文档”聚类的区域有关,而不是针对单个单词的聚类。似乎存在一些特殊的字符串聚类算法,例如 http://pike.psu.edu/cleandb06/papers/CameraReady_120.pdf 中的算法。
我在这个领域的搜索仍在继续,但我也想从这里获得想法。在这种情况下你会推荐什么,有人知道解决此类问题的方法吗?
最佳答案
不要寻找聚类。这是误导性的。无论如何,大多数算法都会(或多或少强制)将您的数据分成预定义数量的组。 k-means 不是适合您的问题的算法类型应该是相当明显的,不是吗?
这听起来很相似;区别在于规模。聚类算法将产生“宏观”聚类,例如将您的数据集分为 10 个簇。您可能想要的是,您的大部分数据根本没有聚集,但您想要合并接近重复字符串,这可能源于错误,对吗?
带有阈值的编辑距离可能正是您所需要的。例如,您可以尝试使用散列技术来加速这一过程。
同样,TF-IDF 也是错误的工具。它用于聚类文本,而不是字符串。 TF-IDF 是分配给较大文档中单个单词(字符串;但假设该字符串不包含拼写错误!)的权重。它不适用于短文档,也不适用于单个单词字符串。
关于string - 对一长串单词进行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798920/