Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法
Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法 博客分类: java 搜索引擎,爬虫
主题:Levenshtein Distance(LD);
相关介绍:Levenshtein distance是由俄国科学家Vladimir Levenshtein在1965年设计并以他的名字命名的。如果不能拼写或发Levenshtein音,通常可以称它edit distance(编辑距离);
用途:该算法用于判断两个字符串的距离,或者叫模糊度。个人理解就是差异程度。而差异的标准就是1)加一个字母(Insert),2)删一个字母(Delete),3改变一个字母(Substitute)。
算法描述:
| Step | Description | 
| 1 | Set n to be the length of s.Set m to be the length of t. | 
| 2 | Initialize the first row to 0..n. | 
| 3 | Examine each character of s (I from 1 to n). | 
| 4 | Examine each character of t (j from 1 to m). | 
| 5 | If s[i] equals t[j], the cost is 0. | 
| 6 | Set cell d[I,j] of the matrix equal to the minimum of: | 
| 7 | After the iteration steps (3, 4, 5, 6) are complete, the distance is found in cell d[n,m]. | 
1、 得到源串s长度n与目标串t的长度m,如果一方为的长度0,则返回另一方的长度。
2、 初始化(n+1)*(m+1)的矩阵d,第一行第一列的值为0增至对应的长度。
3、 遍历数组中的每一个字符(i,j从1开始)。如果s[i]与t[j]的值相等,cost值为0,否则为1。D[i][j]的值为d[i-1,j] + 1(左边的值加1)、d[I,j-1] + 1.(上边的值加1)、d[i-1,j-1] + cost (斜上角的值加cost) 中的最小者。
4、 等第三步遍历完后,右下角d[n,m]的值就为两个字符串的距离。
应用演示:source:word与target:world比较过程。

应用举例:据《开发自己的搜索引擎——Lucene 2.0+Heriterx
》记载P134页记载,lucene中FuzzyQuery(模糊匹配)就是应用该算法的;也可用于Spell checking(拼写检查),Speech recognition(语句识别),DNA analysis(DNA分析) ,Plagiarism detection(抄袭检测)。
参考资料:
http://www.merriampark.com/ld.htm
http://my.oschina.net/MrMichael/blog/339217
转载于:https://my.oschina.net/xiaominmin/blog/1597443
Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法的更多相关文章
- 扒一扒编辑距离(Levenshtein Distance)算法
		最近由于工作需要,接触了编辑距离(Levenshtein Distance)算法.赶脚很有意思.最初百度了一些文章,但讲的都不是很好,读起来感觉似懂非懂.最后还是用google找到了一些资料才慢慢理解 ... 
- Levenshtein distance 编辑距离算法
		这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算 ... 
- Levenshtein Distance (编辑距离) 算法详解
		编辑距离即从一个字符串变换到另一个字符串所需要的最少变化操作步骤(以字符为单位,如son到sun,s不用变,将o->s,n不用变,故操作步骤为1). 为了得到编辑距离,我们画一张二维表来理解,以 ... 
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
		//LD最短编辑路径算法 public static int LevenshteinDistance(string source, string target) { int cell = source ... 
- C#实现Levenshtein distance最小编辑距离算法
		Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑 ... 
- 利用Levenshtein Distance (编辑距离)实现文档相似度计算
		1.首先将word文档解压缩为zip /** * 修改后缀名 */ public static String reName(String path){ File file=new File(path) ... 
- Levenshtein Distance算法(编辑距离算法)
		编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符, ... 
- 最喜欢的算法(们) - Levenshtein distance
		String Matching: Levenshtein distance Purpose: to use as little effort to convert one string into th ... 
- Magic Number(Levenshtein distance算法)
		Magic Number Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ... 
随机推荐
- python--算法相关
			一.时间复杂度排序 1.O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) ... 
- 天天写order by,你知道Mysql底层执行原理吗?
			前言 文章首发于微信公众号[码猿技术专栏]. 在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗? 假设你要查询城市是苏州 ... 
- uni-app商城项目(01)
			1.项目准备: 1.新建项目,清理项目结构 2.完成项目初始化配置. 2.项目开始阶段: 1.完成tabBar配置,新建需要的页面 2.在 '/utis'封装需要的发送请求api,有利于功能的实现. ... 
- 力软敏捷框架集成布局插件(ce-layout)
			最近用力软的框架觉得框架在布局这块不是很友好特别是对像css不是很好的程序员来说,大部分大家都是后端程序员. 所以决定集成一个和力软敏捷框架风格比较一致的布局插件进来 插件ce-layout ,下载地 ... 
- 【python实现卷积神经网络】激活函数的实现(sigmoid、softmax、tanh、relu、leakyrelu、elu、selu、softplus)
			代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ... 
- tf.nn.relu 激活函数
			tf.nn.relu(features, name = None) 计算校正线性:max(features, 0) 参数: features:一个Tensor.必须是下列类型之一:float32,fl ... 
- linux常用命令整理(一)
			1.sort(排序) 典型例题:sort -t: -k3n /etc/passwd 以冒号为分隔符根据第三个域的数字大小进行排序(默认分隔符是空格) 2.uniq(去除文件中的连续重复行) 典型例题: ... 
- three.js中让模型自动居中的代码如下:
			//load_Model为需要居中的3D模型 //原理是通过boundingBoxHelper 来计算模型的大小范围 var hex = 0xff0000; var MD_Length,MD_Widt ... 
- Three.js三维模型几何体旋转、缩放和平移
			创建场景中的三维模型往往需要设置显示大小.位置.角度,three.js提供了一系列网格模型对象的几何变换方法,从WebGL的角度看,旋转.缩放.平移对应的都是模型变换矩阵,关于矩阵变换内容可以观看本人 ... 
- Key Set  HDU - 5363
			这个题目套公式 2^(n-1)-1,再来个快速幂基本上就可以AC了 写这个题目的: 公式容易推到错: 容易写成 2^n-1/2...这样写出来结果也不错 但是一直哇 AC: #include< ... 
 
			
		