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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle安装完如何使用,Oracle11g安装及使用详解

    oracle安装完如何使用,Oracle11g安装及使用详解一、首先我们在官网下载Oracle11g,链接如下:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html注意系统位数和文件个数两个文件都要下载,过程可能比价漫长,可以敲会代码或者做几篇阅读理解缓解一下情绪(为接下来操蛋的安装过程做好充分的心理准备)二、安装可以参考已下链接http://…

    2022年7月25日
    20
  • idea创建maven项目时一直在 Process Running[通俗易懂]

    idea创建maven项目时一直在 Process Running[通俗易懂]今天打算用idea写个maven项目时,创建到最后就一直在加载。等了大概20分钟,还在Process Running,我就等不下去了,各种查资料,最终解决了这个问题,写篇笔记,以防后期所需。解决方案:1、设置maven的配置 File—&gt;Settings(Ctrl+Alt+S)—&gt;Build—&gt;Build Tools—&gt;Maven—&…

    2022年6月13日
    51
  • C# 解析 sln 文件

    C# 解析 sln 文件我的项目,编码工具需要检测打开一个工程,获取所有项目。但是发现原来的方法,如果存在文件夹,把项目放在文件夹中,那么是无法获得项目,于是我就找了一个方法去获得sln文件的所有项目。

    2022年4月28日
    37
  • tomcat java_maven和tomcat的关系

    tomcat java_maven和tomcat的关系缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅

    2022年8月8日
    4
  • mysql8.0性能_oracle scan ip

    mysql8.0性能_oracle scan ipMySQL8.0 – 新特性 – Skip Scan Range

    2022年4月21日
    56
  • Jenkins(2)docker容器中安装python3[通俗易懂]

    Jenkins(2)docker容器中安装python3[通俗易懂]前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月28日
    22

发表回复

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

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