zoukankan      html  css  js  c++  java
  • Delphi源码:编辑长求字符串相似度

    Delphi源代码下载

    {

     说明 LD(s,t:WideString):Integer 返回两个字符串的编辑长

     D= 编辑长

     L = 字符串中最长串的长度,当L=0时,L取1

     两个字符串的相似度=1 - D / L , 区间在0~1之间,0表示不相似,1表示完全相同

    }

    unit LDA;

    {Levenshtein Distance Algorithm}

    interface

    function LD(s,t:WideString):Integer;

    implementation

    function Minimum(a,b,c:Integer):Integer;
    begin
      Result:=a;
      if b<Result then Result:=b;
      if c<Result then Result:=c;
    end;

    function LD(s,t:WideString):Integer;
    var
      d:array of array of Integer;
      n,m:Integer;
      i,j:Integer;
      s_i,t_j:WideChar;
      cost:Integer;
    begin
      n:=Length(s);
      m:=Length(t);
      if n=0 then
      begin
        Result:=m;
        Exit;
      end;
      if m=0 then
      begin
        Result:=n;
        Exit;
      end;
      //数据初始化
      SetLength(d,n+1);
      for i:= 0 to n do SetLength(d[i],m+1);
      for i:= 0 to n do d[i][0]:=i;
      for j:= 0 to m do d[0][j]:=j;
      //
      for i:= 1 to n do
      begin
        s_i:=s[i];
        for j:= 1 to m do
        begin
          t_j:=t[j];
          if s_i=t_j then cost:=0
          else cost:=1;
          d[i][j]:=Minimum(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+cost);
        end;
      end;
      Result:=d[n][m];
    end;

    end.

    调用代码片断:

    var
      d,l:Integer;
    begin
      d:=LD(s.Text,t.Text);
      l:=Length(s.Text);
      if l<Length(t.Text) then l:=Length(t.Text);
      if l=0 then l:=1;  
      lbResult.Caption:=IntToStr(d);//得到编辑长
      lbRes.Caption:=FloatToStr(1-d/l);//计算相似度
    end;

  • 相关阅读:
    十一作业
    11.20
    11.13 第十二次、
    11.13 第十一次、
    11.06第十次、
    11.06第九次、
    10.30
    10.23
    10.16
    10.9
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/1684833.html
Copyright © 2011-2022 走看看