1.兩個字段簡單相似
create function dbo.fn_resemble
(@cloumna nvarchar(max),
@cloumnb nvarchar(max)
)returns float
asbegin
declare @num float,@len int
set @cloumna=isnull(@cloumna,0)
set @cloumnb=isnull(@cloumnb,0)
set @len=1
set @num=0
while(len(@cloumna)<>0 and len(@cloumnb)<>0)
begin
while(@len<=len(@cloumna))
begin
declare @a nvarchar(4)
set @a=''
set @a=substring(@cloumna,@len,1)
if(charindex(@a,@cloumnb)>0)
begin
set @num=@num+1
endset @len=@len+1
endset @num=@num*1.0/len(@cloumna)
break
endreturn @num
end----測試**
select dbo.fn_resemble('abdc321g','abdc123g')
相似度 100%
2.兩個字段順序相似
create function dbo.fn_resemble_order
(@cloumna nvarchar(max),
@cloumnb nvarchar(max)
)returns float
asbegin
declare @num float,@len int
set @cloumna=isnull(@cloumna,0)
set @cloumnb=isnull(@cloumnb,0)
set @len=1
set @num=0
while(len(@cloumna)<>0 and len(@cloumnb)<>0)
begin
declare @a nvarchar(4)
declare @b nvarchar(4)
if(len(@cloumna)>=len(@cloumnb))
begin
while(@len<=len(@cloumnb))
begin
set @a=''
set @a=substring(@cloumna,@len,1)
set @b=''
set @b=substring(@cloumnb,@len,1)
if(@a=@b)
begin
set @num=@num+1
endelse
begin
break
endset @len=@len+1
endend
else if (len(@cloumna) begin
while(@len<=len(@cloumna))
begin
set @a=''
set @a=substring(@cloumna,@len,1)
set @b=''
set @b=substring(@cloumnb,@len,1)
if(@a=@b)
begin
set @num=@num+1
endelse
begin
break
endset @len=@len+1
endend
set @num=@num*1.0/len(@cloumna)
break
endreturn @num
end----測試**
select dbo.fn_resemble_order('abdc456g','abdc123g')
相似度 50%
3.兩個字段一對一相似
create function dbo.fn_resemble_onebyone
(@cloumna nvarchar(max),
@cloumnb nvarchar(max)
)returns float
asbegin
declare @num float,@len int
set @cloumna=isnull(@cloumna,0)
set @cloumnb=isnull(@cloumnb,0)
set @len=1
set @num=0
while(len(@cloumna)<>0 and len(@cloumnb)<>0)
begin
declare @a nvarchar(4)
declare @b nvarchar(4)
if(len(@cloumna)>=len(@cloumnb))
begin
while(@len<=len(@cloumnb))
begin
set @a=''
set @a=substring(@cloumna,@len,1)
set @b=''
set @b=substring(@cloumnb,@len,1)
if(@a=@b)
begin
set @num=@num+1
endset @len=@len+1
endend
else if (len(@cloumna) begin
while(@len<=len(@cloumna))
begin
set @a=''
set @a=substring(@cloumna,@len,1)
set @b=''
set @b=substring(@cloumnb,@len,1)
if(@a=@b)
begin
set @num=@num+1
endset @len=@len+1
endend
set @num=@num*1.0/len(@cloumna)
break
endreturn @num
end----測試**
select dbo.fn_resemble_onebyone('abdc456g','abdc123g')
相似度 62.5%
測試結果:
字串相似度
這個演算法 於網上,但忘記了出處,對其使使用了 issame封裝,然後用在了自己的網頁資料抓取 中。求解兩個字串的相似度int calculatestringdistance const string stra,const string strb intret c lena 1 lenb 1 for...
字串相似度
最近要對字串進行聚類,這些字串都是 的輸出,嘗試了幾種字串相似度度量的方法 levenshtein距離 字串核函式 lcs max len str1,str2 其中相似度用公式distance 1.0 similarity 1轉換為距離.使用層次聚類方法.下面是要聚類的字串 points aabbc...
字串相似度
最近在做演算法作業,需要比較兩個字串的相似度,並且返回相同的元素所佔的百分比。如果讓我自己做的話,思路是把兩個字串分別轉化為列表,然後在列表中解決掉。python view plain copy new i fori,j inzip a,b ifi j ratio 2.0 len new len a...