string - 对一长串单词进行聚类

标签 string cluster-analysis k-means levenshtein-distance pattern-recognition

我手头有以下问题:我有一个很长的单词列表,可能是名字、姓氏等。我需要对这个单词列表进行聚类,以便相似的单词,例如具有相似编辑(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/

相关文章:

c# - 反射用列表c#修剪列表中的所有字符串

string - 如何检查字符串是否包含 Rust 中的子字符串?

string - 在 Rust 中将字符串中的每个字符加倍的最惯用方法

java - 在 java 中 - 对相似值进行分组

design-patterns - 卡尔曼滤波之前还是之后异常值去除?

javascript - 我如何检查一个字符串在 JavaScript 中是否全部大写?

python - 在Python中将 float 据聚类到合适的桶中

python - sklearn kmeans 上的预测方法,它是如何工作的以及它在做什么?

r - K-means:初始中心不明显

algorithm - 给定一组 2D 点和最大距离,找到中心点为集合点的最小簇