文档章节

高效比对,返回最短编辑距离算法匹配度最高的数据

深圳大道
 深圳大道
发布于 2016/12/29 15:35
字数 349
阅读 9
收藏 0
#region 高效比对返回匹配度最高的数据
        /// <summary>
        /// 高效比对返回匹配度最高的数据
        /// </summary>
        /// <param name="sourceList">源数据</param>
        /// <param name="targetList">目标数据</param>
        /// <returns></returns>
        public static List<MapToData> GetAutoMapData(List<MapToData> sourceList, List<MapToData> targetList)
        {
            #region 高效计算匹配
            List<MapToData> resultList = new List<MapToData>();
            Parallel.For(0, sourceList.Count, i =>
            {
                var sourceValue = sourceList[i].key;
                foreach (var item in targetList)
                {
                    var targetValue = item.key;
                    var jsonObject = item.value;
                    int matchNum = LevenshteinDistance(sourceValue, targetValue);
                    resultList.Add(new MapToData { key = sourceValue, value = jsonObject, match = matchNum });
                }
            });

            var q = from p in resultList
                    where p != null
                    orderby p.match descending
                    group new { p.key, p.value, p.match } by p.key into g
                    select new MapToData
                    {
                        key = g.FirstOrDefault().key,
                        value = g.FirstOrDefault().value,
                        match = g.FirstOrDefault().match
                    };
            return q.ToList();
            #endregion
        }
        #endregion

        #region LD最短编辑距离算法

        /// <summary>
        /// LD最短编辑距离算法
        /// </summary>
        /// <param name="source">源字符串</param>
        /// <param name="target">目标字符串</param>
        /// <returns></returns>
        public static int LevenshteinDistance(string source, string target)
        {
            int cell = source.Length;
            int row = target.Length;
            if (cell == 0)
            {
                return row;
            }
            if (row == 0)
            {
                return cell;
            }
            int[,] matrix = new int[row + 1, cell + 1];
            for (var i = 0; i <= cell; i++)
            {
                matrix[0, i] = i;
            }
            for (var j = 1; j <= row; j++)
            {
                matrix[j, 0] = j;
            }
            var tmp = 0;
            for (var k = 0; k < row; k++)
            {
                for (var l = 0; l < cell; l++)
                {
                    if (source[l].Equals(target[k]))
                        tmp = 0;
                    else
                        tmp = 1;
                    matrix[k + 1, l + 1] = Math.Min(Math.Min(matrix[k, l] + tmp, matrix[k + 1, l] + 1), matrix[k, l + 1] + 1);
                }
            }
            return matrix[row, cell];
        }
        #endregion

public class MapToData
    {
        /// <summary>
        /// 要匹配的字符串
        /// </summary>
        public string key = "";

        /// <summary>
        /// 匹配的结果
        /// </summary>
        public object value = new object();
        /// <summary>
        /// 匹配度
        /// </summary>
        public int match = 0;
    }

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/52637828

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
JavaScript 算法与数据结构 - javascript-algorithms

javascript-algorithms 包含了多种基于 JavaScript 的算法与数据结构。 每种算法和数据结构都有自己的 README 并提供相关说明以及进一步阅读和 YouTube 视频。 数据结构 数据结构是在计算机中...

匿名
2018/05/31
944
0
从n-gram中文文本纠错,到依存树中文语法纠错以及同义词查找

前记 本文简单地讲解如何使用n-gram模型结合汉字拼音来作中文错别字纠错,然后介绍最短编辑距离在中文搜索纠错方面的应用;最后从依赖树入手讲解如何作文本长距离纠错(语法纠错),并从该方...

初雪之音
2015/10/13
8.6K
1
漫谈:机器学习中距离和相似性度量方法

作者:daniel-D 在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻(KNN...

Airship
2015/03/09
444
0
漫谈:机器学习中距离和相似性度量方法

在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻(KNN)和 K 均值(K...

daniel-D
2013/08/07
0
0
JavaScript 算法与数据结构

本仓库包含了多种基于 JavaScript 的算法与数据结构。 每种算法和数据结构都有自己的 README 并提供相关说明以及进一步阅读和 YouTube 视频。 数据结构 数据结构是在计算机中组织和存储数据的...

a独家记忆
2018/06/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部