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


相关推荐

  • python 激活码 2021(注册激活)

    (python 激活码 2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    50
  • windows服务器审计日志存放位置,windows服务器审计日志存放位置[通俗易懂]

    windows服务器审计日志存放位置,windows服务器审计日志存放位置[通俗易懂]windows服务器审计日志存放位置内容精选换一换Manager的审计日志默认保存在数据库中,如果长期保留可能引起数据目录的磁盘空间不足问题,管理员如果需要将审计日志保存到其他归档服务器,可以在FusionInsightManager设置转储参数及时自动转储,便于管理审计日志信息。若用户未配置审计日志转储,当审计日志达到十万条,系统自动将这十万条审计日志保存到文件中。保存路径为主管理节为加强对…

    2022年6月4日
    177
  • Anaconda 查看、创建、管理和使用python环境

    Anaconda 查看、创建、管理和使用python环境由于不同的项目需要用不同的python版本,于是使用Anaconda来进行版本管理,现记录一下经验:在官网下载并安装好Anaconda以后(非常简单,此处不赘述):1.查看Python环境condainfo–env可以看到所有python环境,前面有个‘*’的代表当前环境:2.创建Python环境condacreate–namepython35python=3.5代表创建一个…

    2022年5月6日
    74
  • 舆情监测分析系统_舆情监测系统

    舆情监测分析系统_舆情监测系统一、引言1.1目的  编写此文档的目的是确认舆情分析系统的需求及系统边界,指导系统的设计。1.2项目信息项目名称:舆情分析系统项目提出者:指导教师开发者:东北大学软件学院大数据班T09实训项目组(lzf、lcx)用户:舆情分析员、系统管理员1.3缩写说明1.4术语定义1.5参考资料新浪舆情通:https://yqt.mdata.net/二、舆情分析系统概述2.1舆情分析系统介绍  我们的舆情分析系统主要包括舆情总缆分析、舆情搜索、文章分析、文章评论分析、事件

    2025年11月21日
    2
  • Java 枚举 (enum) 使用方法

    Java 枚举 (enum) 使用方法什么是枚举 枚举类型是 Java5 中新增特性的一部分 它是一个特殊的 class 这个 class 相当于 finalstatic 修饰 不能被继承 所有的枚举都继承自 java lang Enum 类 由于 Java 不支持多继承 所以枚举对象不能再继承其他类 在没有枚举类型时定义常量常见的方式 Createdbyzej 5 7 Blog http blog csdn net javazejian 原文地址 请尊重原创 使用普通方式定义日期常量

    2025年8月11日
    3
  • Python程序中的进程操作

    之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程

    2022年3月29日
    61

发表回复

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

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