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

一、计算方法

  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求最小值得到的。递推后所得的二维数组中,最后一行的最后一列即为最小差异数。

原文地址:https://www.cnblogs.com/guobin-/p/11738529.html

时间: 2024-10-07 23:25:16

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

毕设之路:本周计划任务(二)

一.上周开发结果分析 1.截图如下: 2.问题记录如下: ①最初抽取的数据来源:应把DBL数据库置换为ODS,即从标准化和分类后的数据开始抽取. ②信息显示:在显示指标信息时,不应该出现code之类的数据,这些只需要在后台查询数据时使用,不需要显示给用户. ③匹配率计算的精准度:经过测试后,发现用动态规划进行字符串的互相比对得到的匹配率偏差不小,所以需要考虑更精准的匹配方法.(把标准指标作为模板字符串,用来源指标作为子串去进行匹配,最好是有附带标准字库的匹配方法) 二.计划任务 1.对上周分析的

数据点间的相似度-距离计算方法

在分类聚类算法,推荐系统中,常要用到两个输入变量(通常是特征向量的形式)距离的计算,即相似性度量.不同相似性度量对于算法的结果,有些时候,差异很大.因此,有必要根据输入数据的特征,选择一种合适的相似性度量方法. 令X=(x1,x2,..,xn)T,Y=(y1,y2,...yn)T为两个输入向量, 1.欧几里得距离(Euclidean distance)-EuclideanDistanceMeasure. ‍ 相当于高维空间内向量说表示的点到点之间的距离.由于特征向量的各分量的量纲不一致,通常需要

一个有意思的需求——中文匹配度

引言 最近LZ带头在做一个互联网项目,互联网的东西总是那么新鲜,这也难怪大部分猿友都喜欢互联网.这个互联网项目不仅让LZ开发了一个HBase大数据应用,近期的一次需求讨论会上,又出来一个小需求,蛮有意思的.这些需求在之前枯燥的企业内部应用开发中,还是很难见到的,毕竟内部应用更多的是业务流程的体现. 具体的需求这里不方便透露,但简单的描述一下需求,就是如何判断两个公司名是一个.这其实就是Java当中字符串的相等判断,最简单的当然是用equals来判断.但是由于实际情况是,公司名是由客户手动输出的,

解决solr搜索多词匹配度和排序方案

转载请标明出处:http://blog.csdn.net/hu948162999/article/details/47727159 本文主要介绍了在短语.句子.多词查询中,solr在控制查询命中数量.之后再对结果集进行排序. 在solr中 默认是or 查询,也就是说:如果搜索q 中 分出来的词越多,所匹配的数量也就越多.如:搜索短语  "中国联想笔记本" ,分词结果:中国 .联想 . 笔记本. 覆盖结果集:只要文档中包含这3个任意词,都给返回. 排序结果:按照solr的打分公式.默认匹

二次开发 提高财务软件与企业需求的匹配度

财务管理软件作为企业管理不可或缺的管理工具,能够帮助企业有效实现资金的科学管控,提高资金部署的精准度.并且,企业在选购财务管理软件时,甚少能够做到一锤子买卖,因为随着企业的不断发展壮大,势必要根据企业新的特点进行二次开发. 二次开发,在不少企业眼中认为或许是一种浪费资金的表现,因此总是希望能够购买一款能够一直用下去的财务管理软件.然而,这些企业却忽略了时代在变化,市场在变化,企业随着市场的变化也会进行新的发展方向转变. 对于这种转变,财务管理软件如果能够满足,自然是最好不过.如果不能,那么财务管

如何根据关键字匹配度排序

最近项目遇到根据关键字匹配度排序,要求关键字匹配相等排在第一,关键字匹配最左边排第二,关键字匹配最右边排第三,关键字匹配中间排最后:遇到这样查询排序场景,用MySQL如何实现?用搜索引擎Elasticsearch如何实现? 方法一:按照上面需求用联合查询,可以实现方案,但是当数据量很大时,联合查询效率并不太好,不是最佳方案 select id,name from (select id,name from title where name like '海阔天空%' ORDER BY name as

Qt学习之路(58): 进程间交互(QProcess.readAllStandardOutput可以读取控制台的输出)

所谓 IO 其实不过是与其他设备之间的数据交互.在 Linux 上这个概念或许会更加清楚一些.Linux 把所有设备都看作是一种文件,因此所有的 IO 都归结到对文件的数据交互.同样,与其他进程之间也存在着数据交互,这就是进程间交互. 为什么需要进程间交互呢?Qt 虽然是一个很庞大的库,但是也不能面面俱到.每个需求都提供一种解决方案是不现实的.比如操作系统提供了查看当前文件夹下所有文件的命令(Windows 下是 dir, Linux 下是 ls),那么 Qt 就可以通过调用这个命令获取其中的信

毕设之路:本周计划(二)2019.10.28——2019.11.03

一.计划任务 1.熟悉编程软件,编程语言. 2.完成系统页面框架. 3.完成数据库设计. 二.主要内容 1.按照网上教程,熟悉Android studio. 2.简单设计七个界面:即系统的六个子系统界面和主界面. 3.完成数据库的设计和创建. 学习链接:https://www.open-open.com/lib/view/open1468121618489.html 原文地址:https://www.cnblogs.com/liurx/p/11750531.html

电商推销产品要注意高匹配度

电商竞争越来越激烈,为了能够吸引更多的客户,电商都会选择主动的去推销自己的产品,但不是所有的用户都会为你的推销买账. 商品过剩.信息过剩的当下,用户的注意力分散,购买的心理越来越复杂,网上繁杂的信息也消耗着用户大量的时间成本,他们不再喜欢趋同的产品,更喜欢的是能够和自己的审美.追求所匹配的产品.如果电商企业能够根据用户的偏好.购买习惯和以往的购买记录等信息,为用户推荐及时且关联性强的产品,那对于提升销量,提高品牌忠诚度肯定能起到非常大的作用. 个性化推荐是电商企业增加销售的常用方法,所以在精准度