Delphi源码:编辑长求字符串相似度

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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101189.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux ftp下载命令_centos如何连接ftp

    linux ftp下载命令_centos如何连接ftpLinuxFTP命令全集1前言下面就所有命令给出解释和例子。说明: 1.remote-file指远程文件,即服务器上的文件2.local-file 指本地文件,即本地机器上的文件2登录登出命令2.1ftp$ftp192.168.0.2格式:ftp[host]Host为ftp主机ip,此命令用来登录ftp服务器,登录后会提示输入账户和密码,账户和密码正确输入后,就会登录到…

    2022年9月21日
    3
  • 两种方法求最大公约数最小公倍数

    两种方法求最大公约数最小公倍数

    2022年1月24日
    44
  • qmake中文官方文档

    qmake中文官方文档qmakeQMake提供了一个用于管理应用程序,库,其他组件的构建过程的面向工程系统QMake扩展了每个工程文件的信息,生成一个执行编译和连接过程的Makefile本文翻译自Qt4.8官方文档。一、QMake使用QMake提供了一个用于管理应用程序、库、其它组件的构建过程的面向工程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的Mak

    2022年5月19日
    44
  • Nginx + Tomcat 搭建负载均衡

    Nginx + Tomcat 搭建负载均衡Nginx + Tomcat 搭建负载均衡

    2022年4月22日
    42
  • 按钮式超链接代码

    按钮式超链接代码简单的制作按钮式超链接效果代码,视觉上产生按钮图样

    2022年7月26日
    4
  • 二极管电平转换_光耦电平转换电路原理

    二极管电平转换_光耦电平转换电路原理  在数字电路的领域,常常把电压简化为电平,来描述逻辑状态。比如TTL电平信号规定,+5V等价于逻辑“1”,也称为高电平,0V等价于逻辑“0”,也就是低电平。数字电路里,只有0和1两个状态。其实从0V到+5V,有无数个电压,为了便于处理数字电路,我们可以把无数个状态按照电压范围,简化为2个电平,因为我们只需要2个电平就能描述0和1这两种状态。  假设有两个电路板需要通信,但是两个电路板的电平标准…

    2022年10月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号