毕设之路:指标名称间的匹配度计算

一、计算方法

  1、获取匹配度的计算方法:

package com.gb.Util; /** * * @author 我命倾尘 * @date 2019年10月24日 下午8:47:39 * @version 1.0 * */ public class getSimilarityRatio { //指标匹配度计算方法 public static float getSimilarityRatio(String string, String target) { //定义一个用来存储指标名称和字符间匹配中间值得二维数组 int similarity[][]; //相同字符增量 int temp; //得到来源指标名称和标准指标名称的长度 int strLength = string.length(); int targetLength = target.length(); //用来遍历两个字符串的值 int i,j; //用来存储两个字符串中字符的值 char char1,char2; //其中一个为空时,无匹配度 if (strLength == 0 || targetLength == 0) { return 0; } similarity = new int[strLength + 1][targetLength + 1]; //初始化 for (i = 0; i <= strLength; i++) { similarity[i][0] = i; } for (j = 0; j <= targetLength; j++) { similarity[0][j] = j; } //遍历来源指标名称字符串 for (i = 1; i <= strLength; i++) { char1 = string.charAt(i - 1); // 匹配标准指标字符串 for (j = 1; j <= targetLength; j++) { char2 = target.charAt(j - 1); //矩阵中出现相同字符记为0 //不相同字符记为1 if (char1 == char2 || char1 == char2 + 32 || char1 + 32 == char2)//ASCII码表值相差32,即不区分大小写 { temp = 0; } else { temp = 1; } //递推,分别取二维数组中的左值加一和上值加一,以及左上值加匹配增量,这三个值取最小,即为有差异的字符数 similarity[i][j] = Math.min(Math.min(similarity[i - 1][j] + 1, similarity[i][j - 1] + 1), similarity[i - 1][j - 1] + temp); } } //差异字符数在较长字符串的字符个数中的占比为差异率 //返回的值为被一减去之后的匹配率 return (1 - (float) similarity[strLength][targetLength] / Math.max(string.length(), target.length())) * 100F; } }

  2、测试方法:

public static void main(String[] args) { String str = "科技项目总经费"; String target = "科技项目经费"; System.out.println("该指标匹配率:"+getSimilarityRatio(str, target)+"%"); }

  结果如下:

  

 

 二、计算方法解析

  1、方法:

  采用动态规划递推的方式,先建立二维数组并给定初始值,再根据初始值向后一一递推。

  先得到最小差异数,再得到差异数占比,用1减去之后则是两个指标名称字符串之间的匹配度

  2、重点(求数组中的值):

  数组中的第i行第j列的值,为它左侧的值+1和上侧的值+1以及左上角的值加上增量temp求最小值得到的。递推后所得的二维数组中,最后一行的最后一列即为最小差异数

 


__EOF__

本文作者我命倾尘
本文链接https://www.cnblogs.com/guobin-/p/11738529.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   我命倾尘  阅读(1089)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示