之前在做一个任务时, 需要比较字符串的相似度, 最终整理了一个出来, 以下:

  1 /*
2 * Copyright (c) 2013 Thyiad
3 * Author: Thyiad
4 * Create date: 2013/08/08
5 */
6
7 using System;
8
9 namespace Thyiad.Utility
10 {
11 /// <summary>
12 /// Operates about string.
13 /// </summary>
14 public static class StringUtil
15 {
16 /// <summary>
17 /// Compare with two string, return avg similar degree.
18 /// </summary>
19 /// <param name="str1"></param>
20 /// <param name="str2"></param>
21 /// <returns>A number of percent.</returns>
22 public static int StrSim(string str1, string str2)
23 {
24 try
25 {
26 if (str1 == null || str2 == null ||
27 (str1 == string.Empty && str2 != string.Empty) ||
28 (str1 != string.Empty && str2 == string.Empty))
29 {
30 return 0;
31 }
32 else if (str1.Equals(str2))
33 {
34 return 100;
35 }
36
37 int similar1 = 0;
38 int similar2 = 0;
39
40 similar1 = StrSimSub2(str1, str2);
41 similar2 = StrSimSub2(str2, str1);
42
43 return ((similar1 + similar2) / 2);
44 }
45 catch (Exception)
46 {
47 throw;
48 }
49 }
50
51 /// <summary>
52 /// Compare with two string, return similar degree.
53 /// </summary>
54 /// <param name="str1"></param>
55 /// <param name="str2"></param>
56 /// <returns>A number of percent.</returns>
57 private static int StrSimSub2(string str1, string str2)
58 {
59 try
60 {
61 int len1, len2;
62 int pos1, pos2;
63 char char1, char2;
64 int val1, val_min, val_max;
65
66 len1 = str1.Length;
67 len2 = str2.Length;
68 pos1 = 1;
69 val1 = 0;
70
71 if (len1 < len2)
72 {
73 val_max = len2 + 1;
74 }
75 else
76 {
77 val_max = len1 + 1;
78 }
79
80 while (pos1 <= len1)
81 {
82 char1 = str1[pos1 - 1];
83 pos2 = 1;
84 val_min = val_max;
85 while (pos2 <= len2)
86 {
87 char2 = str2[pos2 - 1];
88 if (char1 == char2)
89 {
90 if (Math.Abs(pos1 - pos2) < val_min)
91 {
92 val_min = Math.Abs(pos1 - pos2);
93 }
94 }
95 pos2++;
96 }
97 pos1++;
98 val1 = val1 + val_min;
99 }
100
101 return (100 - (val1 * 100 / (len1 * val_max)));
102 }
103 catch (Exception)
104 {
105 throw;
106 }
107 }
108 }
109 }

字符串相似度-C#的更多相关文章

  1. LD算法获取字符串相似度

    一个如何识别相似语句的问题,于是上网找了找,一个叫Levenshtein Distance的算法比较简单,就写了段代码实现了一下,效果还不错. 这个算法是一个俄国人Lvenshtein提出的,用于计算 ...

  2. 百度面试题 字符串相似度 算法 similar_text 和页面相似度算法

    在百度的面试,简直就是花样求虐. 首先在面试官看简历的期间,除了一个自己定义字符串相似度,并且写出求相似度的算法. ...这个确实没听说过,php的similar_text函数也是闻所未闻的.之前看s ...

  3. C#和SQL实现的字符串相似度计算代码分享

    http://www.jb51.net/article/55941.htm C#实现: 复制代码 代码如下: #region 计算字符串相似度        /// <summary>   ...

  4. 字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)

    在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...

  5. PHP 計算字符串長度函數

    PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得到的只是字符串所占的字節數.對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差 ...

  6. 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)

    在搞验证码识别的时候需要比较字符代码的相似度用到"编辑距离算法",关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Dist ...

  7. Go 实现字符串相似度计算函数 Levenshtein 和 SimilarText

    [转]http://www.syyong.com/Go/Go-implements-the-string-similarity-calculation-function-Levenshtein-and ...

  8. Python 连接MongoDB并比较两个字符串相似度的简单示例

    本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...

  9. C#实现字符串相似度算法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是: 把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这 ...

  10. [转]字符串相似度算法(编辑距离算法 Levenshtein Distance)

    转自:http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=981 http://www.cnblogs.com/ivanyb/archi ...

随机推荐

  1. 微信小程序实现顶部、底部联动滑动

    这个场景一般用于展示数据时,数据过多,每条一行显示不下,表头可以横向滑动,下面要显示的数据部分横向纵向都可以滑动.表头或下面数据部分横向滑动的时候,两部分可以进行联动 具体效果像这样(随便写的丑样式布 ...

  2. 引用类型之数组array最全的详解

    Array类型 今天总结一下array类型. js中的数组是有着非常强大的功能.具有很大的灵活性,有两个方面的特点 1.数组的每一项可以保存任何的数据类型:2.数组大小可以动态的调整:看下面的例子: ...

  3. React源码解析:ReactElement

    ReactElement算是React源码中比较简单的部分了,直接看源码: var ReactElement = function(type, key, ref, self, source, owne ...

  4. 新装Centos7.2 配置防火墙

    1.安装 yum -y install firewalld2.开机启动 systemctl enable firewalld3.设置防火墙规则 systemctl restart firewalld ...

  5. DataTable转泛型List

    在.net项目研发过程中,有时候需要将从数据库中获取的DataTable数据类型,转换为泛型集合,然后运用LINQ对集合进行操作,我将此总结一下,方便你我他. 核心类: public class Da ...

  6. 【fail2ban】使用fail2ban进行攻击防范

    使用fail2ban进行攻击防范 转自:https://kyle.ai/blog/6215.html 最近总有一些无聊的人,会来扫描一下我的服务器,看有没有啥漏洞可以利用的... 可以看到类似这样的4 ...

  7. python_鸡兔同笼问题

    鸡兔同笼问题 -- 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? --鸡和兔在一个笼子里,从上面数,有35个头:从下面数,有94只脚.问笼中各有几只鸡和兔 如何逻辑整理? -- 鸡头和兔子 ...

  8. 比较Maven和Ant

    从今天开始,整理maven一系列. Maven 它是什么? 如何回答这个问题要看你怎么看这个问题. 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可 ...

  9. 如何用docker部署redis cluster

    前言 由于本人是个docker控,不喜欢安装各种环境,而且安装redis-trib也有点繁琐,索性用docker来做redis cluster. 本文用的是伪集群,真正的集群放到不同的机器即可.端口是 ...

  10. [C#] 获取计算机内部信息 - ComputerInfoHelper

    获取计算机内部信息 - ComputerInfoHelper 电脑有许多信息,如名称.CPU 和硬盘容量等,整理一个 Helper 来获取,下面目前只整理了一个方法,获取其它信息的方法类似. 一.代码 ...