在EXCEL里的数据库里有很多相似记录,比如"杭州*****公司"与"杭州市*****公司" 这条记录概率几乎达到了100%,就是多了一个"市"字,那么这种概率怎么算?

解决方案 »

  1.   

    我也在做相同的问题,下面的是我的方案.参考一下.希望有人能优化一下.因为在量大的时间,速度不是很理想.
    DROP FUNCTION F_StrCompareGO
    CREATE FUNCTION F_StrCompare(@str1 varchar(512),@str2 varchar(512))
    RETURNS FLOAT
    AS
    BEGIN
    DECLARE  @TABSTR TABLE (STRID INT,WORD VARCHAR(4)) 
    DECLARE  @LEN1 INT,@LEN2 INT,@I INT
    DECLARE  @P1 FLOAT,@P2 FLOAT,@P3 FLOAT,@P4 FLOAT,@P FLOAT SELECT @LEN1=len(@str1) 
            SELECT @LEN2=len(@str2) --将STR1插入到表变量中.  
            SET @I=1
    WHILE @I<@LEN1
        BEGIN
    INSERT INTO @TABSTR VALUES(1,substring(@str1,@I,2))
    SET @I=@I+1
        END        --将STR2拆分放到表变量中.
            SET @I=1
    WHILE @I<@LEN2
        BEGIN
    INSERT INTO @TABSTR VALUES(2,substring(@str2,@I,2))
    SET @I=@I+1
        END        --统计,计算相似度.
            SELECT @P1=COUNT(*) FROM @TABSTR --所有的单词.
    SELECT @P2=SUM(SUMWORD) FROM ( SELECT COUNT(WORD) AS SUMWORD,WORD FROM @TABSTR GROUP BY WORD ) AS T WHERE SUMWORD>1 --出现两次以上的单词.
    SET @P=@P2/@P1
            RETURN @PEND
    GOCREATE TABLE LX1
    (
     F1 VARCHAR(32),
     F2 VARCHAR(32)
    )INSERT INTO LX1 VALUES('1','浙江省农业大学')
    INSERT INTO LX1 VALUES('2','浙江省工业大学')
    INSERT INTO LX1 VALUES('3','浙江农业大学')
    INSERT INTO LX1 VALUES('4','浙江工业大学')
    INSERT INTO LX1 VALUES('5','浙江省杭州市农业大学')GOSELECT *,DBO.f_StrCompare(F2,'浙江农业大学') AS K FROM LX1  WHERE DBO.f_StrCompare(F2,'浙江农业大学')>0.66
      

  2.   

    我还想了一下,能不能将汉字传为拼音,然后直接用SQL进行相似度比较.
      

  3.   

    KAO...没有讨论?楼主呢?跑了?真没劲.