西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发其它知识 → 字符串相似度和字符串编辑距离

字符串相似度和字符串编辑距离

相关软件相关文章发表评论 来源:西西整理时间:2013/2/25 21:30:48字体大小:A-A+

作者:西西点击:11次评论:4次标签: 字符串

  • 类型:电子教程大小:9.5M语言:中文 评分:7.5
  • 标签:
立即下载

余弦相似度

计算公式为:

P(A,B) = sqrt(A × B) / (|A| × |B|)

设有两个字符串:

ABCDEFG

ABCHIJK

其中共有11个字符,为:

A B C D E F G H I J K

如果,不考虑他们之间的关联性以及顺序等隐私,那么可以讲这两个字符串转换成两个11维空间中的向量:

{1、1、1、1、1、1、1、0、0、0、0}

{1、1、1、0、0、0、0、1、1、1、1}

那,计算他们之间的相似度为:

P = sqrt(3) / (sqrt(7) × sqrt(7)) = 0.2474358297

矩阵相似度

给定两个长度相等的字符串,在移动的过程中比较:

abcddacbcb  
  aadaccbddc

首先有几个变量:

n:字符串的长度,此时为10;

m:相同的字符,此时为3,包括d、a、c;

r:两个字符串重叠部分,此时为8;

那么给出定义:

重叠率:L = r / n。

匹配率:M = m / n。

相似度:Q = M^2 × L = (m^2 / n^2) × (r / n)。

其实为什么这样定义也很好理解,将Q变形一下就可以得到:

  Q = (m^2 / r^2) × (r / n)

前半部分表示了当前相同的比率,后半部分表示了重叠的比率,然后呢,废话就不多说了。其实,还有一个要考虑的地方,举个例子:

  str1:abcabc

  str2:abcdabc

str1str2的相似度是很高的,但是,在移位错开的过程中根本没办法找到这种匹配。想想其实原因也是非常简单的:把所有的字符都死板地粘合在了一起!那么,我们要做的其实就是将他们打散来匹配。首先,根据字符串A和字符串B来构造矩阵R

  Ai和Bi+j相同时,Rij = 1;否则,Rij = 0。

那么,现在要做的事情就是,在矩阵R中寻找一条路径,使得这条路径上的1最多,这个问题和求两个字符串的最大匹配和像的DP问题,这里就不啰嗦了。

字符串编辑距离

还有一种衡量两个字符串之间的差异性的方法是,计算两个字符串转换时候需要的最少操作,需要的操作越少说明这两个字符串越相似。

假设字符串的操作只有三种:

插入一个字符;

删除一个字符;

替换一个字符;

两个字符串之间的编辑距离定义为:从字符串str1str2的最少的操作次数。首先,编辑距离是不会大于str1.length + str2.length的。假设求字符AB的编辑距离,考虑下面几种情况:

如果A[i] = B[j],那么这时候还需要操作吗?

这个时候的删除和替换操作只会让情况变得更坏,而且插入操作不会使情况变得更好,所以此时F(i, j) = F(i-1, j-1)

如果A[i] != B[j],怎么办呢?

a、从F(i-1, j-1)变过来,这时候只需要把A[i]替换为B[j]即可;

b、从F(i-1, j)变过来,这时候只需要将A[i]删除即可;

c、从F(i, j-1)变过来,这时候只需要在A[i]后插入字符B[j]即可;

那么此时,F(i, j) = min{F(i-1,j-1),F(i-1,j),F(i,j-1)} + 1

注:其中F(i, j)表示A[0..i]和B[0..j]之间的编辑距离。看完这种相似度想起了BFS的入门题目:《聪明的打字员》,囧。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(4)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据