`
m635674608
  • 浏览: 5029312 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Lucene的FuzzyQuery中用到的Levenshtein Distance(LD)算法

 
阅读更多

主题:Levenshtein Distance(LD);

相关介绍:Levenshtein distance是由俄国科学家Vladimir Levenshtein1965年设计并以他的名字命名的。如果不能拼写或发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.
If n = 0, return m and exit.If m = 0, return n and exit.
Construct a matrix containing 0..m rows and 0..n columns.

2

Initialize the first row to 0..n.
Initialize the first column to 0..m.

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.
If s[i] doesn’t equal t[j], the cost is 1.

6

Set cell d[I,j] of the matrix equal to the minimum of:
a. The cell immediately above plus 1: d[i-1,j] + 1.
b. The cell immediately to the left plus 1: d[I,j-1] + 1.
c. The cell diagonally above and to the left plus the cost: d[i-1,j-1] + cost.

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,j1开始)。如果s[i]t[j]的值相等,cost值为0,否则为1D[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:wordtarget:world比较过程。

 

 应用演示

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

应用举例:据《开发自己的搜索引擎——Lucene 2.0+Heriterx

》记载P134页记载,luceneFuzzyQuery(模糊匹配)就是应用该算法的;也可用于Spell checking(拼写检查),Speech recognition(语句识别),DNA analysis(DNA分析) ,Plagiarism detection(抄袭检测)

参考资料

http://www.merriampark.com/ld.htm

 

http://my.oschina.net/MrMichael/blog/339217

分享到:
评论

相关推荐

    Lucene 搜索方法(模糊搜索)

    `FuzzyQuery`基于Levenshtein距离算法,该算法计算两个字符串之间的差异程度,用于衡量它们的相似性。 首先,我们需要了解如何创建一个`FuzzyQuery`。在`FuzzyQueryDemo.java`这个示例文件中,我们可能会看到类似...

    FuzzyQuery-Information-Retrieval:基于FuzzyQuery Lucene库的信息检索系统,Java实现

    FuzzyQuery允许设置一个最小编辑距离(Levenshtein Distance),这是衡量两个字符串之间差异的一种度量。当用户输入查询时,Lucene会自动计算查询词与其他词汇的编辑距离,并返回那些距离小于设定阈值的文档。 项目...

    Lucene中的FST算法描述

    为了高效地处理和检索存储的词项(term),Lucene使用了FST(有限状态转换器,Finite State Transducer)这一核心算法构建内存索引。FST算法不仅可以用于快速检索term信息存储的位置,而且还支持判断一个term是否...

    Lucene全文搜索 分组,精确查找,模糊查找

    1. **FuzzyQuery**:通过设置模糊度参数`fuzziness`,如`new FuzzyQuery(new Term("field", "keyword"), Fuzziness.AUTO)`,允许查询词与索引词之间有一定的编辑距离。 2. **WildcardQuery**:使用通配符`?`(代表...

    lucene开发中用到的jar包

    总的来说,`lucene开发中用到的jar包`涉及到的核心概念是文件解析和全文搜索。`htmlparser.jar`和`htmllexer.jar`用于处理HTML,`pdfbox-0.8.0-incubating.jar`则服务于PDF文档的解析。了解并熟练掌握这些工具,将有...

    lucene讲义 叫你用lucene算法

    《教你运用Lucene算法》 Lucene是一款强大的全文搜索引擎库,它提供了丰富的信息检索功能,包括文本分析、索引构建、搜索以及结果排名等。在深入理解Lucene的工作原理时,我们首先要关注的是其核心算法。 一、单个...

    深入了解Lucene之四 主要算法介绍.ppt

    《深入理解Lucene之四:主要算法介绍》 Lucene是一个强大的开源全文搜索引擎库,它在信息检索领域具有广泛的应用。本资料旨在介绍Lucene在构建索引、增量归并、查找定位等方面的关键算法,帮助读者更深入地理解其...

    深入了解Lucene之三 排序算法.doc

    深入了解 Lucene 之三排序算法 Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍...

    Lucene 使用正则表达式

    ### Lucene 使用正则表达式 #### 知识点概览 1. **Lucene简介** 2. **正则表达式(regex)在Lucene中的应用** 3. **regexQuery详解** 4. **示例代码解析** 5. **索引创建与查询流程** 6. **正则表达式的语法** #### ...

    Lucene检索算法的改进.pdf

    ### Lucene检索算法的改进 #### 检索系统采用的技术 在《Lucene检索算法的改进》一文中,作者们介绍了他们所采用的一系列技术来改进基于Lucene的检索系统。具体而言,这些技术包括: 1. **开放源代码的文本检索...

    Lucene的原理完整版pdf

    3. **近似搜索**:通过编辑距离(Levenshtein Distance)或余弦相似度等算法,查找与查询词相近的术语。 4. **高亮显示**:搜索结果中匹配的查询词可以被高亮显示,使用`Highlighter`类实现。 5. **更新和删除索引...

    Lucene示例 BM25相似度计算

    总之,Lucene的BM25示例是一个极好的学习资源,它涵盖了从索引构建到查询执行的关键步骤,并通过实际对比展示了如何使用更先进的相似度算法提升搜索效果。对于希望在文本检索领域深入研究或应用Lucene的开发者来说,...

    lucene-query-string-builder:使用基本功能构建复杂的Lucene查询字符串

    npm install lucene-query-string-builder --save 特征 创建术语字符串时转义lucene特殊字符 包含所有lucene用途的运算符 简单的lucene.builder函数,用于定义lucene查询构建器 用法 让我们看看如何使用Lucene查询...

    Lucene5学习之SpellCheck拼写纠错

    3. **纠错算法**: Lucene5使用了编辑距离算法(如Levenshtein距离)来计算单词间的相似度,找到最接近的正确拼写。 4. **建议排序与返回**: 根据相似度得分对纠正建议进行排序,然后返回前几个最可能的正确拼写。 *...

    lucene例子

    支持许多强大的查询类型,比如 PhraseQuery、WildcardQuery、RangeQuery、FuzzyQuery、BooleanQuery 等。 支持解析人们输入的丰富查询表达式。 允许用户使用定制排序、过滤和查询表达式解析扩展搜索行为。 使用基于...

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    运用在lucene中的中文分词算法源码

    《深入剖析Lucene中的中文分词算法源码》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种数据检索系统。而中文分词是Lucene处理中文文本时的关键步骤,它决定了搜索的准确性和效率。本文将...

    lucene中的SpanQuery和PhraseQuery详解(有图示)

    Lucene中的SpanQuery和PhraseQuery详解 Lucene是一个功能强大的搜索引擎库,提供了多种查询方式,其中SpanQuery和PhraseQuery是两个重要的查询类型。本文将详细介绍SpanQuery和PhraseQuery的使用和区别。 一、...

    Java搜索引擎 Lucene

    1. **高性能**:Lucene采用了高效的索引和搜索算法,能够在海量数据中迅速找到匹配的文档。 2. **分词处理**:Lucene支持多种分词器,可以对文本进行分析,将句子拆分成可搜索的关键词。 3. **倒排索引**:Lucene...

Global site tag (gtag.js) - Google Analytics