字符串相似度评价

时下机器学习和大数据可谓是互联网行业炙手可热的术语,Viktor Mayer在Big Data一书中提到大数据时代我们需要的是混杂性而不是精确性,统计意义在大数据下给了我们更多空间。既然不过分追求精确性,那么字符串完全比配也就不那么重要了,字符串的相似度将会扮演更重要的角色。相似度评价在信息检索系统中也有非常广泛的使用,那么我们可以用那些方法评价字符串的相似度呢,换个说法就是求字符串之间的距离。

1. 欧氏相似度

假设有字符串X和Y,经分词(中文)去停用词之后得到了字符串的词,并统计得到各个词的数量记为:[X1,X2,...,Xn];[Y1,Y2,...,Yn]。

d(X, Y) = sqrt(sum(Xi-Yi)2)

我们也可以为每个词根据词的重要性加一个权重,比如:如果我们有一个文本集,我们可以根据TF-IDF进行词的权重计算。

2. Jaccard相似度

将字符串X中的词看成集合S,将Y中的词看成集合Y,Jsccard(X,Y) = |S∩Y|/|SυY|。

我们也可以灵活设定集合中的元素,可以将分词后的词作为集合元素,也可以将字符串的子串(i<=Len<=j)作为集合的元素。

3. 余弦相似度

采用和计算欧氏相似度相同的方法得到字符串X和Y的向量,然后计算向量的余弦即可,余弦相似度对应于字符串X和Y向量的夹角,夹角越小说明两字符串越相似。吴军在数学之美里描述了如何使用余弦相似度进行新闻文本分类,有兴趣的同学百度之。

4. 编辑距离

编辑距离指的是通过插入/删除操作将X变为Y的步数,网上有很多关于编辑距离计算算法的介绍,感兴趣的同学请自行百度。

5. 海明距离

Hamming距离是指两个向量中不同分量的个数,根据字符串得到各个分量为0/1的向量,然后便可以计算Hamming距离了。

6. LCS

用最长公共子序列长度或最长公共子串长度来衡量字符串的相似度也是一个不错的选择。

小结,以上的字符串相似度评价方法单独使用时不一定能够很准确的评价相似度,但是如果作为机器学习训练集中的一维特征值,应该还是一个不错的选择,如开篇所言,大数据时代不追求精确,但是我们需要更多维表征事物的特征。

时间: 2024-10-06 00:23:15

字符串相似度评价的相关文章

比较2个字符串相似度

我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能.现在提供一个比较两个字符串相似度的方法.通过计算出两个字符串的相似度,就可以通过Linq在内存中对数据进行排序和筛选,选出和目标字符串最相似的一个结果. 本次所用到的相似度计算公式是 相似度=Kq*q/(Kq*q+Kr*r+Ks*s) (Kq > 0 , Kr>=0,Ka>=0)其中,q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,r是字符串

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

http://www.jb51.net/article/55941.htm C#实现: 复制代码 代码如下: #region 计算字符串相似度        /// <summary>         /// 计算字符串相似度         /// </summary>         /// <param name="str1">字符串1</param>         /// <param name="str2&qu

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

在百度的面试,简直就是花样求虐. 首先在面试官看简历的期间,除了一个自己定义字符串相似度,并且写出求相似度的算法. ...这个确实没听说过,php的similar_text函数也是闻所未闻的.之前看seo的时候,到简单了解了一下页面的相似度,百度算法中很常见的需要判断页面是否是重复的,重复的肯定就不收录了,做seo很重的一个工作就是写原创文章,以保持网站的更新,吸引百度的收录,以增加流量. 页面的相似度,是纯数学的,因为百度的主要是收录中文,所以中文需要先拆词,然后计算词语的在文章中出现的频度.

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

在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家V

经典算法题每日演练——第五题 字符串相似度

原文:经典算法题每日演练--第五题 字符串相似度 这篇我们看看最长公共子序列的另一个版本,求字符串相似度(编辑距离),我也说过了,这是一个非常实用的算法,在DNA对比,网 页聚类等方面都有用武之地. 一:概念 对于两个字符串A和B,通过基本的增删改将字符串A改成B,或者将B改成A,在改变的过程中我们使用的最少步骤称之为“编辑距离”. 比如如下的字符串:我们通过种种操作,痉挛之后编辑距离为3,不知道你看出来了没有? 二:解析 可能大家觉得有点复杂,不好理解,我们试着把这个大问题拆分掉,将"字符串

字符串相似度计算----编辑距离

题目描述: 要求两字符串有差异的字符个数.例如: aaaaabaaaaa aaaaacaabaa 这两个字符串,最大公共字串长度是5,但它们只有两个字符不同,函数输出值应为2. 如果是: aaabbbcccddd aaaeeeddd 函数的输出值应该是6. 比较形象地形容一下,把两个字符串排成上下两行,每个字符串都可以在任何位置插入空格以便上下对齐,每个列上至少有一个字符来自这两个字符串.当对齐程度最高的时候,没有对上的列的数即为函数输出值. aaabbbcccddd aaaeeeddd 最优对

POJ 1080 Human Gene Functions(求两字符串相似度:LCS变形)

POJ 1080 Human Gene Functions(求两字符串相似度:LCS变形) http://poj.org/problem?id=1080 题意: HDU1080 给你两个由字符A,C,G,T构造的字符串s1和s2, 现在你可以在这两个字符串中插入空格, 使得两串长相等(但是不能使得s1的空格对应s2的空格位置). 然后给你s1的特定字符对应s2中特定字符所能获得的分数矩阵: 问你最后两个字符串所能获得的最大分数是多少? 分析: 本题很类似于求字符串最短编辑距离或者求字符串LCS的

字符串相似度计算的方法,使用SQL以及C#实现,本文非原创摘自网络(.NET SQL技术交流群入群206656202需注明博客园)

1 CREATE function get_semblance_By_2words 2 ( 3 @word1 varchar(50), 4 @word2 varchar(50) 5 ) 6 returns nvarchar(4000) 7 as 8 begin 9 declare @re int 10 declare @maxLenth int 11 declare @i int,@l int 12 declare @tb1 table(child varchar(50)) 13 declare

Edit Distance || 计算字符串相似度

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have the following 3 operations permitted on a word: a) Insert a character b) Delete a character c) Repla