字符串相似度-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 ...
随机推荐
- Thrift之TProtocol系列TCompactProtocol解析
TCompactProtocol协议作为TBinaryProtocol协议的升级强化版,都作为二进制编码传输方式,采用了一种乐器MIDI文件的编码方法(wiki,百度下),简单介绍下两种思想: 1: ...
- shopnc IM配置过程
im配置windows下,修改chat下和data下的config,安装node,覆盖node下文件即可
- Centos7-安装telnet服务
1,检查是否安装 telnet-server和xinetd rpm -qa telnet-server rpm -qa xinetd 2,如果没有安装过就安装 查找yum yum list |grep ...
- git 文件状态与工作区域
在上一篇简单讲述了文件状态与工作区域,在这里结合相关git命令详细了解文件的状态变更. 目录 1. 介绍 2. 常用命令 3. 实际操作 1. 介绍 git的文件状态是其git核心内容,了解后对后续的 ...
- ELK入门级介绍--打造实时日志查询系统
这几天一直在研究ElasticSearch,在网上看到一篇好的文章和大家分享. ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自:http://baidu.b ...
- java虚拟机和java内存区域概述
什么是虚拟机,什么是Java虚拟机 虚拟机 定义:模拟某种计算机体系结构,执行特定指令集的软件 系统虚拟机(Virtual Box.VMware),进程虚拟机 进程虚拟机 jvm.Adobe Flas ...
- 三、Html常用标签
1,基本标签 <html>:html文档的根元素,可以指定一个xmlns属性,值只能是http://www/w3.org/1999/xhtml. <body>:页面主体部分 & ...
- Tomcat对Struts中的Action进行授权利
.应用的意义 在某些应用下,如果Action类执行的功能比较重要,可以对该Action类进行授权利以实现只有特定角色的用户能够访问,此时可以在struts-config.xml文件中进行配置 2. ...
- Newtonsoft.Json 版本冲突时解决方案
如果同一项目中不同第三方类库分别使用了不同版本的Newtonsoft.Json的情况下,可以在主项目配置文件中添加以下节点,将0.0.0.0-11.0.0.0此区间的Newtonsoft.Json使用 ...
- 【转】Shell执行MySql操作
mysql -hhostname -Pport -uusername -ppassword -e 相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作m ...