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

  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. CSS深入理解学习笔记之line-height

    1.line-height的定义 定义:两行文字基线之间的距离. 注:不同字体之间的基线是不同的. 2.line-height与行内框盒子模型 行内框盒子模型: ①内容区域(content area) ...

  2. BSA Network Shell系列-通过NSH执行Powershell,VBScript或bat files脚本

    参考:Running Powershell, VBScript, or bat files via NSH 如果你直接在NSH命令行执行的话,可以参考我翻译的下面的东东,如果想运行NSH 脚本作业的话 ...

  3. common-logging源码解析

    OK,现在我们来研究下common-logging的源码.这篇博客有参照上善若水的博客,感谢他的无私分享. 先来随便扯点吧,貌似所有这些流行的Logging框架都和Log4J多少有点关系(不太确定Co ...

  4. Log4j源码解析--核心类解析

    原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.html.感谢上善若水的无私分享. 在简单的介绍了Log4J各个模块类的作用 ...

  5. 流API--缩减操作

    在Stream流操作中,比如说min(),max(),count()方法,这几个操作都会将一个流缩减成一个值,流API将这些操作称为特例缩减.另外,流API同时泛华了缩减这种概念,提供了reduce( ...

  6. secureCRT sftp使用

    sftp-- help 可用命令: cd 路径 更改远程目录到"路径" lcd 路径 更改本地目录到"路径" chgrp group path 将文件" ...

  7. 安装node.js和npm

    转载自https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345014184 ...

  8. Technical debt

    What is Technial debt? Technical debt is not bug. It is that the feature can work, but it is not a p ...

  9. Linux 下Telnet 服务安装

    Linux 下Telnet 服务安装 注:以下所有命令均在root用户下执行. 命令测试在Linxu版本6.x下完成,部分命令不适用Linux 7.0以上 1.简介 默认情况下Linux只安装了Tel ...

  10. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...