无论是做科学计算,还是数据挖掘,或者一些其他工程项目,我们经常需要比较字符串的相似度。
这里罗列一些常用的相似度计算方法,仅供参考。
余弦相似性(Cosine similarity)
余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。 0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。 从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。 两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0; 两个向量指向完全相反的方向时,余弦相似度的值为-1。 这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。
注意这上下界对任何维度的向量空间中都适用,而且余弦相似性最常用于高维正空间。 例如在信息检索中,每个词项被赋予不同的维度,而一个文档由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。 余弦相似度因此可以给出两篇文档在其主题方面的相似度。
另外,它通常用于文本挖掘中的文件比较。此外,在数据挖掘领域中,会用到它来度量集群内部的凝聚力。
欧几里得距离(Euclidean distance)
欧几里得距离或欧几里得度量是欧几里得空间中两点间距离(即直线距离)。 使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。
编辑距离(Edit distance)
编辑距离是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。
编辑距离可以用在自然语言处理中,例如拼写检查可以根据一个拼错的字和其他正确的字的编辑距离,判断哪一个(或哪几个)是比较可能的字。
DNA也可以视为用A、C、G和T组成的字符串,因此编辑距离也用在生物信息学中,判断二个DNA的类似程度。
Unix下的diff
及patch
即是利用编辑距离来进行文本编辑对比的例子。
汉明距离(Hamming distance)
两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。 换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。
汉明重量是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数: 对于二进制字符串来说,就是1的个数,所以11101的汉明重量是4。