SQL Server字串相似度

2021-08-14 08:52:50 字數 3391 閱讀 7922

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...