• Delphi中比较两个字符串相似性的百分比算法


    用百分比比较两个字符串(彼此之间有多少相似度)
    返回 byte 类型,从 0 到 100%

    function  CompareStringsInPercent(Str1, Str2: string ): Byte;
    type
      
     TLink = array [0..1] of  Byte;
    var
      
     tmpPattern: TLink;
      PatternA, PatternB: array of  TLink;
      IndexA, IndexB, LengthStr: Integer;
    begin
      
     Result := 100;
      // Building pattern tables
      
     
    LengthStr := Max(Length(Str1), Length(Str2));
      for  IndexA := 1 to  LengthStr do 
      begin
        if 
     Length(Str1) >= IndexA then 
        begin
          
     SetLength(PatternA, (Length(PatternA) + 1));
          PatternA[Length(PatternA) - 1][0] := Byte(Str1[IndexA]);
          PatternA[Length(PatternA) - 1][1] := IndexA;
        end ;
        if  Length(Str2) >= IndexA then 
        begin
          
     SetLength(PatternB, (Length(PatternB) + 1));
          PatternB[Length(PatternB) - 1][0] := Byte(Str2[IndexA]);
          PatternB[Length(PatternB) - 1][1] := IndexA;
        end ;
      end ;
      // Quick Sort of pattern tables
      
     
    IndexA := 0;
      IndexB := 0;
      while  ((IndexA < (Length(PatternA) - 1)) and  (IndexB < (Length(PatternB) - 1))) do 
      begin
        if 
     Length(PatternA) > IndexA then 
        begin
          if 
     PatternA[IndexA][0] < PatternA[IndexA + 1][0] then 
          begin
            
     tmpPattern[0]           := PatternA[IndexA][0];
            tmpPattern[1]           := PatternA[IndexA][1];
            PatternA[IndexA][0]     := PatternA[IndexA + 1][0];
            PatternA[IndexA][1]     := PatternA[IndexA + 1][1];
            PatternA[IndexA + 1][0] := tmpPattern[0];
            PatternA[IndexA + 1][1] := tmpPattern[1];
            if  IndexA > 0 then  Dec(IndexA);
          end
          else 
            
     Inc(IndexA);
        end ;
        if  Length(PatternB) > IndexB then 
        begin
          if 
     PatternB[IndexB][0] < PatternB[IndexB + 1][0] then 
          begin
            
     tmpPattern[0]           := PatternB[IndexB][0];
            tmpPattern[1]           := PatternB[IndexB][1];
            PatternB[IndexB][0]     := PatternB[IndexB + 1][0];
            PatternB[IndexB][1]     := PatternB[IndexB + 1][1];
            PatternB[IndexB + 1][0] := tmpPattern[0];
            PatternB[IndexB + 1][1] := tmpPattern[1];
            if  IndexB > 0 then  Dec(IndexB);
          end
          else 
            
     Inc(IndexB);
        end ;
      end ;
      // Calculating simularity percentage
      
     
    LengthStr := Min(Length(PatternA), Length(PatternB));
      for  IndexA := 0 to  (LengthStr - 1) do 
      begin
        if 
     PatternA[IndexA][0] = PatternB[IndexA][0] then 
        begin
          if 
     Max(PatternA[IndexA][1], PatternB[IndexA][1]) - Min(PatternA[IndexA][1],
            PatternB[IndexA][1]) > 0 then  Dec(Result,
            ((100 div  LengthStr) div  (Max(PatternA[IndexA][1], PatternB[IndexA][1]) -
              Min(PatternA[IndexA][1], PatternB[IndexA][1]))))
          else if  Result < 100 then  Inc(Result);
        end
        else 
          
     Dec(Result, (100 div  LengthStr))
      end ;
      SetLength(PatternA, 0);
      SetLength(PatternB, 0);
    end ;

  • 相关阅读:
    SpringBoot list查询方法
    eclipse创建web项目
    loadrunner获取返回值为乱码
    连接数据库
    lr并发量和迭代的区别
    LoadRunner11.00入门教程出现的问题
    python学习杂记--函数参数的设置
    adb logcat的命令行开启和关闭
    python学习杂记--pycharm控制台输出乱码
    python学习杂记--装饰器
  • 原文地址:https://www.cnblogs.com/ljl_falcon/p/2405968.html
Copyright © 2020-2023  润新知