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

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

    五大规则 1. 所有的引用类型( 数组 对象 函数 ) 都是 具有对象特性即自由拓展属性 (除了 "null")意外 2. 所有的引用类型(数组 对象 函数 ) 都有一个 prot ...

  2. underscore.js 源码阅读 一 整体结构

    // 整个underscore的实现包在一个立即执行函数中,避免污染全局对象 // 通过call(this)来入全局变量 (function() { // 缓存this var root = this ...

  3. duilib消息类型

    //定义所有消息类型 ////////////////////////////////////////////////////////////////////////// #define DUI_MS ...

  4. @media 针对不同的屏幕尺寸设置不同的样式

    @media screen and (max-width: 800px) {    #yanandownload .close input {    margin-right: 40px ;    } ...

  5. MyISAM 存储引擎的特点及优化方法

      MyISAM:   MyISAM 管理非事务表.是ISAM 的扩展格式.除了提供ISAM里所没有的索引的字段管理等的大量功能.MyISAM 还使用一种表格锁定的机制.来优化多个并发的读写操作.My ...

  6. struts2.xml的配置问题

    1.<package namespace="/"></package> namespace决定访问action的路径: 如果省略,将代表任意路径: 2.&l ...

  7. _beginthread和CreatThread的区别

    转自:http://www.jb51.net/article/41459.htm 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来 ...

  8. iOS-NSPredicate正则验证【三种验证方法】

    1.NSPredicate验证(谓词匹配) ///验证(string:验证的字符串) + (BOOL)stringValidate:(NSString *)string{ NSString *regu ...

  9. 关于dom4j解析xml

    一:相关jar包 dom4j-1.6.1.jar 二:用例xml文件 三:解析 注:可能有的小白不知道如果获取节点,so,you can: for (Iterator<Element> i ...

  10. 生成模型(generative model)与判别模型(discriminative model)的区别

    监督学习可以分为生成方法与判别方法,所学到的模型可以分为生成模型与判别模型. 生成模型 生成模型由数据学习联合概率分布\(P(X,Y)\),然后求出条件概率分布\(P(Y|X)\)作为预测的模型,即生 ...