我听说过聚类可以将相似的数据分组。我想了解它在字符串特定案例中是如何工作的。
我有一个包含超过100,000个不同单词的表格。
我希望能够识别出具有差异的相同单词(例如:house, house!!, hooouse, HoUse, @house, "house"
等)。
为了识别相似性并将每个单词分组到一个聚类中,需要什么?哪种算法更推荐用于此?
我听说过聚类可以将相似的数据分组。我想了解它在字符串特定案例中是如何工作的。
我有一个包含超过100,000个不同单词的表格。
我希望能够识别出具有差异的相同单词(例如:house, house!!, hooouse, HoUse, @house, "house"
等)。
为了识别相似性并将每个单词分组到一个聚类中,需要什么?哪种算法更推荐用于此?
其中之一是期望最大化算法。它的优点在于可以自动找到聚类数量。然而,在实践中,它通常比其他算法给出更少精确的结果,因此通常使用k-means加上EM,即首先使用EM找到聚类数量和它们的中心,然后使用k-means来调整结果。
另一个可能适合您任务的算法分支是层次聚类。在这种情况下,聚类分析的结果不是一组独立的群体,而是一棵树(层次结构),其中几个较小的聚类被组合成一个更大的聚类,所有聚类最终都是一个大聚类的一部分。在您的情况下,这意味着所有单词在某种程度上相似。
有一个名为 stringdist 的包,它允许使用多种不同的方法进行字符串比较。以下是从该页面复制的内容:
您可以使用像Levenshtein距离这样的算法进行距离计算,使用k-means
进行聚类。
Levenshtein距离是一种用于测量两个序列之间差异量的字符串度量标准。
进行一些测试,并找到每个单词的相似性阈值,以决定您的分组。