字符串相似度-C#
之前在做一个任务时, 需要比较字符串的相似度, 最终整理了一个出来, 以下:
- 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#的更多相关文章
- LD算法获取字符串相似度
一个如何识别相似语句的问题,于是上网找了找,一个叫Levenshtein Distance的算法比较简单,就写了段代码实现了一下,效果还不错. 这个算法是一个俄国人Lvenshtein提出的,用于计算 ...
- 百度面试题 字符串相似度 算法 similar_text 和页面相似度算法
在百度的面试,简直就是花样求虐. 首先在面试官看简历的期间,除了一个自己定义字符串相似度,并且写出求相似度的算法. ...这个确实没听说过,php的similar_text函数也是闻所未闻的.之前看s ...
- C#和SQL实现的字符串相似度计算代码分享
http://www.jb51.net/article/55941.htm C#实现: 复制代码 代码如下: #region 计算字符串相似度 /// <summary> ...
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)
在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...
- PHP 計算字符串長度函數
PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得到的只是字符串所占的字節數.對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差 ...
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
在搞验证码识别的时候需要比较字符代码的相似度用到"编辑距离算法",关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Dist ...
- Go 实现字符串相似度计算函数 Levenshtein 和 SimilarText
[转]http://www.syyong.com/Go/Go-implements-the-string-similarity-calculation-function-Levenshtein-and ...
- Python 连接MongoDB并比较两个字符串相似度的简单示例
本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...
- C#实现字符串相似度算法
字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是: 把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这 ...
- [转]字符串相似度算法(编辑距离算法 Levenshtein Distance)
转自:http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=981 http://www.cnblogs.com/ivanyb/archi ...
随机推荐
- js 原型规则与示例
五大规则 1. 所有的引用类型( 数组 对象 函数 ) 都是 具有对象特性即自由拓展属性 (除了 "null")意外 2. 所有的引用类型(数组 对象 函数 ) 都有一个 prot ...
- underscore.js 源码阅读 一 整体结构
// 整个underscore的实现包在一个立即执行函数中,避免污染全局对象 // 通过call(this)来入全局变量 (function() { // 缓存this var root = this ...
- duilib消息类型
//定义所有消息类型 ////////////////////////////////////////////////////////////////////////// #define DUI_MS ...
- @media 针对不同的屏幕尺寸设置不同的样式
@media screen and (max-width: 800px) { #yanandownload .close input { margin-right: 40px ; } ...
- MyISAM 存储引擎的特点及优化方法
MyISAM: MyISAM 管理非事务表.是ISAM 的扩展格式.除了提供ISAM里所没有的索引的字段管理等的大量功能.MyISAM 还使用一种表格锁定的机制.来优化多个并发的读写操作.My ...
- struts2.xml的配置问题
1.<package namespace="/"></package> namespace决定访问action的路径: 如果省略,将代表任意路径: 2.&l ...
- _beginthread和CreatThread的区别
转自:http://www.jb51.net/article/41459.htm 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来 ...
- iOS-NSPredicate正则验证【三种验证方法】
1.NSPredicate验证(谓词匹配) ///验证(string:验证的字符串) + (BOOL)stringValidate:(NSString *)string{ NSString *regu ...
- 关于dom4j解析xml
一:相关jar包 dom4j-1.6.1.jar 二:用例xml文件 三:解析 注:可能有的小白不知道如果获取节点,so,you can: for (Iterator<Element> i ...
- 生成模型(generative model)与判别模型(discriminative model)的区别
监督学习可以分为生成方法与判别方法,所学到的模型可以分为生成模型与判别模型. 生成模型 生成模型由数据学习联合概率分布\(P(X,Y)\),然后求出条件概率分布\(P(Y|X)\)作为预测的模型,即生 ...