主题: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. 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,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

- 大小: 75.2 KB
分享到:
相关推荐
总之,Lucene的`FuzzyQuery`为开发者提供了强大的模糊搜索能力,使得用户可以方便地在大量数据中找到他们想要的信息,即使他们的输入不够精确。通过理解并运用`FuzzyQuery`,我们可以创建出更加用户友好的搜索功能。...
1. **FuzzyQuery**:通过设置模糊度参数`fuzziness`,如`new FuzzyQuery(new Term("field", "keyword"), Fuzziness.AUTO)`,允许查询词与索引词之间有一定的编辑距离。 2. **WildcardQuery**:使用通配符`?`(代表...
本项目"基于FuzzyQuery Lucene库的信息检索系统,Java实现"就是这样一个系统,它利用了Apache Lucene这一强大的全文搜索引擎库,提供了对模糊查询的支持。 Apache Lucene 是一个开源的Java库,用于构建高效、可扩展...
在信息检索和存储系统中,Lucene是一个开源的全文搜索引擎库,广泛应用于各种需要全文搜索功能的软件项目中。为了高效地处理和检索存储的词项(term),Lucene使用了FST(有限状态转换器,Finite State Transducer)...
《深入理解Lucene之四:主要算法介绍》 Lucene是一个强大的开源全文搜索引擎库,它在信息检索领域具有广泛的应用。本资料旨在介绍Lucene在构建索引、增量归并、查找定位等方面的关键算法,帮助读者更深入地理解其...
在Lucene中,我们可以使用`QueryParser`类来构造模糊查询的`Query`对象,然后通过`IndexSearcher`执行这个查询,获取匹配的结果。 在提供的压缩包文件中,"src"目录下可能包含了实现上述功能的Java源代码。这些代码...
《教你运用Lucene算法》 Lucene是一款强大的全文搜索引擎库,它提供了丰富的信息检索功能,包括文本分析、索引构建、搜索以及结果排名等。在深入理解Lucene的工作原理时,我们首先要关注的是其核心算法。 一、单个...
Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍: 1. tf(Term Frequency):...
### Lucene 使用正则表达式 #### 知识点概览 1. **Lucene简介** 2. **正则表达式(regex)在Lucene中的应用** 3. **regexQuery详解** 4. **示例代码解析** 5. **索引创建与查询流程** 6. **正则表达式的语法** #### ...
在搜索阶段,Lucene支持多种查询类型,如标准查询(Standard Query)、短语查询(Phrase Query)、布尔查询(Boolean Query)以及模糊查询。模糊查询允许用户输入近似或部分关键词,系统会尝试找到与之最接近的匹配...
Lucene的`FuzzyQuery`允许设置相似度阈值,从而返回近似匹配的结果。 #### 范围搜索 范围搜索允许用户基于数值或日期字段限定搜索范围。例如,搜索价格在100到200之间的商品,或者查询某个日期区间内的记录。 总之...
3. **近似搜索**:通过编辑距离(Levenshtein Distance)或余弦相似度等算法,查找与查询词相近的术语。 4. **高亮显示**:搜索结果中匹配的查询词可以被高亮显示,使用`Highlighter`类实现。 5. **更新和删除索引...
- **模糊匹配**:考虑到用户可能会输入不准确的拼音,可以引入模糊匹配算法,如Levenshtein距离或Jaccard相似度。 - **性能优化**:大型系统中,拼音转换和索引构建可能会消耗大量资源,因此需要合理设计索引结构和...
总的来说,`lucene开发中用到的jar包`涉及到的核心概念是文件解析和全文搜索。`htmlparser.jar`和`htmllexer.jar`用于处理HTML,`pdfbox-0.8.0-incubating.jar`则服务于PDF文档的解析。了解并熟练掌握这些工具,将有...
Java搜索引擎Lucene是一款开源的全文检索库,由Apache软件基金会开发并维护,它为Java开发者提供了强大的文本搜索功能。Lucene的核心目标是让开发者能够快速地在应用中集成高级的搜索功能,使得用户可以轻松地查找和...
**Lucene站内搜索技术详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎和站内搜索解决方案中。它提供了丰富的文本分析、索引和搜索功能,使得开发者能够轻松地在自己的...
1. **开放源代码的文本检索工具Lucene**:Lucene是一个高性能、全功能的文本搜索引擎库,可以集成到应用程序中进行全文检索和索引。 2. **网页分析器**:用于解析和提取网页中的文本内容。 3. **XML转换器**:将...
3. **模糊查询(Fuzzy Queries)**:允许用户输入近似术语,如 "lucen~" 可匹配 "lucene" 和 "luken"。 4. **范围查询(Range Queries)**:筛选在一定范围内的数值或日期。 5. **评分(Scoring)**:Lucene 会计算...
3. **纠错算法**: Lucene5使用了编辑距离算法(如Levenshtein距离)来计算单词间的相似度,找到最接近的正确拼写。 4. **建议排序与返回**: 根据相似度得分对纠正建议进行排序,然后返回前几个最可能的正确拼写。 *...
近似搜索(Fuzzy Query)允许搜索类似但不完全相同的词汇。评分和排序可以根据相关性对结果进行排列,而命中高亮则可以突出显示文档中匹配的关键词。 ### 5. 示例代码 压缩包中的`SampleLuceneNet`可能包含一个...