matlab 文本 相似度,Matlab计算字符串相似度

运行环境:Matlab

单纯的计算字符串的相似度,并没有计算词性,如TF-IDF之类的;代码如下:

%计算字符串相似度

%一个source字符串通过插入、删除、替换而变成target字符串的操作次数越少,则两个字符串越相近。

function strsim = mystrsim(target,source) %X为字符串

len1=length(source);

len2=length(target);

d=zeros(len1+1,len2+1);

for i=2:length(source)+1

d(i,1)= i;

end

for j=2:length(target)+1

d(1,j)= j;

end

for i =2:length(source)+1

for j = 2:length(target)+1

if source(i - 1) == target(j - 1)

d(i,j) = d(i-1,j-1); %不需要编辑操作

else

edIns = d(i,j-1)+1; %source 插入字符

edDel = d(i-1,j)+1; %source 删除字符

edRep = d(i-1,j-1)+1; %source 替换字符

d(i,j)= min(min(edIns, edDel),edRep);

end

end

end

y=d(length(source)+1,length(target)+1); %最少操作次数

strsim=1/(y+1); %相似度

end

实例:

1. 计算中文字符串相似度:

0818b9ca8b590ca3270a3433284dd417.png

2. 计算英文字符串相似度:

0818b9ca8b590ca3270a3433284dd417.png

3. 但是通过这种方式计算,其相似度效果不是很明显,如下:

0818b9ca8b590ca3270a3433284dd417.png

这里需要注意的是:

y是操作次数,1/(1+y)就是简易版的相似度,如果读者觉得这样的相似度表意不清楚的话,可以自己选择变换函数,比如log或1/(exp()+a)之类的函数平滑下。

这里简易版的相似度,读者可以设置阈值如0.3,基本就可以了。

那么既然它不是计算语义相似度的,那么它有什么用呢?

比如,现在有很多数据,这些数据是地段的楼价。然后, 想知道某地段的楼价,但是这个地段的楼价并没有在这些数据中,这个时候就可以根据周边的楼价去匹配,得到类似的楼价。例如:现在想知道广州天河车陂南的房价,那么可以找到数据中包含车陂北街,车陂北街29号,车陂*等等这些地段的房价,然后求平均得到。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值