int similar_text ( string first, string second [, float &percent] )
percent 直接反映相似度不知道计算这个有什么实际意义
echo similar_text('检查内容重复情况', '检查内容不重复情况', $r); //16 已比较的长度
echo $r; //94.1176470588 两个字符串的相似程度
但是他们的意义是相反的!

解决方案 »

  1.   

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOCREATE        function get_semblance_By_2words
    (
    @word1 varchar(50),
    @word2 varchar(50)  
    )
    returns nvarchar(4000)
    as
    begin
    declare @re int
    declare @maxLenth int
    declare @i int,@l int
    declare @tb1 table(child varchar(50))
    declare @tb2 table(child varchar(50))
      set @i=1
    set @l=2
    set @maxLenth=len(@word1)
    if len(@word1)<len(@word2) 
    begin
    set @maxLenth=len(@word2)
    end
    while @l<=len(@word1) 
    begin
    while @i<len(@word1)-1
    begin
    insert @tb1 (child) values( SUBSTRING(@word1,@i,@l) ) 
    set @i=@i+1
    end
    set @i=1
    set @l=@l+1
    end


    set @i=1
    set @l=2


    while @l<=len(@word2) 
    begin
    while @i<len(@word2)-1
    begin
    insert @tb2 (child) values( SUBSTRING(@word2,@i,@l) ) 
    set @i=@i+1
    end
    set @i=1
    set @l=@l+1
    end
     
     select @re=isnull(max( len(a.child)*100/  @maxLenth ) ,0) from @tb1 a, @tb2 b where a.child=b.child
    return @re
    end
     
     
     GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
    --测试
    --select dbo.get_semblance_By_2words('我是谁','我是谁啊') 
    --75
    --相似度