Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能
在上一篇文章中对Lucene进行了介绍之后 ,现在是时候提高它,创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能(其他搜索引擎也支持此功能)。 这是一个例子:

Lucene SpellChecker子项目
可以使用Lucene项目在Java中实现此功能,本教程将向您展示如何使用。 该实现将基于Lucene的子项目之一,即SpellChecker(请参阅拼写检查器API )。 这篇文章的灵感来自于我在InfoQ上读到的一篇最近的文章,名为“ 在Java中实现Google的“您的意思”功能 ”。 作者简短描述了所使用的编辑距离算法,然后提供了一个简单的代码示例。 我还找到了一篇类似的文章,标题为“ 您的意思是:Lucene吗? ”,但这是在2005年写的,所以我想它现在已经过时了。 首先查看这些内容,然后再采取一些措施是一个好主意。

寻找基础字典
在本教程中,将使用英语词典文本文件。 您可以对此进行简单搜索 ,也可以直接下载此压缩文件 。 该文件非常简单,仅包含用行分隔的单词。 提取的文件名为“ fulldictionary00.txt”。

使用Lucene SpellChecker API
让我们开始创建一个新的Eclipse项目(可能名为“ LuceneSuggestionsProject”),然后导入必要的JAR文件。 除了主要的JAR lucene-core-3.0.1.jar外,我们还需要lucene-spellchecker-3.0.1.jar。 这可以在解压缩的tarball文件夹“ lucene-3.0.1 \ contrib \ spellchecker”中找到。 如果您不知道如何查找发行版以及如何开始该项目,请查看我以前的文章( 全文搜索Apache Lucene简介 )。 创建一个名为“ SimpleSuggestionService”的新类,并确保包含一个主要方法。 此类的源代码如下:

package com.javacodegeeks.lucene.spellcheck;

import java.io.File;

import org.apache.lucene.search.spell.PlainTextDictionary;
import org.apache.lucene.search.spell.SpellChecker;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class SimpleSuggestionService {
    
    public static void main(String[] args) throws Exception {
        
        File dir = new File("c:/spellchecker/");
        
        Directory directory = FSDirectory.open(dir);
        
        SpellChecker spellChecker = new SpellChecker(directory);
        
        spellChecker.indexDictionary(
             new PlainTextDictionary(new File("c:/fulldictionary00.txt")));
        
        String wordForSuggestions = "hwllo";
        
        int suggestionsNumber = 5;

        String[] suggestions = spellChecker.
            suggestSimilar(wordForSuggestions, suggestionsNumber);

        if (suggestions!=null && suggestions.length>0) {
            for (String word : suggestions) {
                System.out.println("Did you mean:" + word);
            }
        }
        else {
            System.out.println("No suggestions found for word:"+wordForSuggestions);
        }
            
    }

}

是的,就是这么简单。 如果运行应用程序(使用“ hwllo”作为输入字),将出现以下输出:

解释SpellChecker API
该代码非常简单,但是我将详细介绍一些类。 首先,您需要一个Directory ,它是文件的平面列表。 此类是抽象的,因此我们将FSDirectory用作实际实现。 FSDirectory将索引文件存储在文件系统中(为了评估访问速度更快的RAMDirectory ,它是驻留在内存中的实现,应该进行评估)。 下一步是创建一个SpellChecker实例,这是我们应用程序的核心。 请注意,默认的StringDistanceLevensteinDistance 。 如果您希望使用其他算法( JaroWinklerDistanceNGramDistance ),则可以使用setStringDistance方法。 接下来,我们实例化一个PlainTextDictionary ,它指向我们下载的文本文件。 将字典编入索引,然后使用SpellChecker对象检索拼写错误的单词的建议单词。

我想您现在准备创建下一个大型搜索引擎。 您可以在此处找到相关的Eclipse项目。

请享用!

相关文章 :

翻译自: https://www.javacodegeeks.com/2010/05/did-you-mean-feature-lucene-spell.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值