文档章节

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

深圳大道
 深圳大道
发布于 2016/12/29 15:39
字数 349
阅读 5
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
6分钟前
1
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
7分钟前
1
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
9分钟前
1
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
12分钟前
1
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部