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实例,这是我们应用程序的核心。 请注意,默认的StringDistance是LevensteinDistance 。 如果您希望使用其他算法( JaroWinklerDistance或NGramDistance ),则可以使用setStringDistance方法。 接下来,我们实例化一个PlainTextDictionary ,它指向我们下载的文本文件。 将字典编入索引,然后使用SpellChecker对象检索拼写错误的单词的建议单词。
我想您现在准备创建下一个大型搜索引擎。 您可以在此处找到相关的Eclipse项目。
请享用!
- 全文搜索Apache Lucene简介
- 使用Spring AspectJ和Maven进行面向方面的编程
- 调度Java应用程序中的主体
- 依赖注入–手动方式
翻译自: https://www.javacodegeeks.com/2010/05/did-you-mean-feature-lucene-spell.html
Apache Lucene拼写检查器的“您是不是要”功能相关推荐
- apache lucene_Apache Lucene拼写检查器的“您是不是要”功能
apache lucene Google的"您是不是要"功能 在上一篇文章中对Lucene进行了介绍之后 ,现在是时候提高它并创建一个更复杂的应用程序了. 您肯定最熟悉Google ...
- 介绍 Java 平台的 Jazzy:一种新的拼写检查器 API
计算机擅长执行快速搜索操作,可以根据给定的搜索词,对大量存储的信息快速进行搜索.但是,拼写检查应用程序所要求的搜索能力,不仅仅是正确的字符串匹配.在这篇文章中,我将介绍搜索算法的一些历史,包括语音匹配 ...
- solr创建索引_Solr:创建拼写检查器
solr创建索引 在上一篇文章中,我谈到了Solr Spellchecker的工作原理,然后向您展示了其性能的一些测试结果. 现在,我们将看到另一种拼写检查方法. 与其他方法一样,此方法使用两步过程. ...
- Solr:创建拼写检查器
在上一篇文章中,我谈到了Solr Spellchecker的工作原理,然后向您展示了其性能的一些测试结果. 现在,我们将看到另一种拼写检查方法. 与其他方法一样,此方法使用两步过程. 相当快速的&qu ...
- Jazzy--一种新的拼写检查器API(Java平台)
计算机擅长执行快速搜索操作,可以根据给定的搜索词,对大量存储的信息快速进行搜索.但是,拼写检查应用程序所要求的搜索能力,不仅仅是正确的字符串匹配. 在这篇文章中,我将介绍搜索算法的一些历史,包括语音匹 ...
- [Google API](6)拼写检查器和缓存页面
作为 Google 创建索引过程的有机组成部分,Google 要检索被建立索引的页面副本,在搜索结果中为用户提供到缓存页面的链接.主要的缺点是用户看不到更新后的内容,但一些优点也是存在的. 检索缓存页 ...
- python代码大全p-21行Python代码实现拼写检查器
引入 大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供非常好的拼写检查,比如你输入 speling,谷歌会马上返回 spelling. 下面是用21行python代码实现的一个简易但是具备 ...
- 拼写检查工具是android,Android的文本和输入---拼写检查器(一)-Go语言中文社区...
Android平台提供能够让你在应用程序中执行和访问拼写检查的拼写检查器框架.这个框架是由Android平台提供的文本服务API之一. 要在应用程序中使用该框架,你就要创建一个特殊的Android服务 ...
- 【小实验讲解】贝叶斯拼写检查器
贝叶斯拼写检查器 python代码 拼写检查器的代码+注释 python代码 big.txt只是一个语料库大家网上可以找得到. 拼写检查器的代码+注释 # ##求解: argmaxc P(c|w) & ...
最新文章
- Android学习笔记2---多界面切换
- SAP Cloud SDK for JavaScript 概述
- 前端学习(1902)vue之电商管理系统电商系统之渲实现添加用户前的预先校验
- 线性表的顺序表示和实现(严蔚敏版)
- tomcat--because there was insufficient free space available after evicting expired cache entries
- cbitmap 从内存中加载jpg_Pytorch数据加载的分析
- android 搜索文件代码怎么写,android学习笔记(5)-一个搜索文件的APP(2)-搜索功能的实现...
- java编程新手初学者入门学习,看什么书比较好
- 计算机显示无法格式化,计算机格式化SD卡提示Windows无法完成格式化解决方法
- Python(PyCharm)的下载安装汉化(2022)
- 计算机考研复试难,艰难与快乐:2008年重庆邮电大学计算机考研复试经历
- 使用拟合方法实现光敏电阻传感器数值与光照强度的近似转换
- yum安装ruby_安装 Ruby
- java 微信主动推送消息_java微信主动推送消息,java微信主动推送消息怎么实现?
- 什么是Promise
- TestNG-学习笔记
- 360极速浏览器Onetab插件存储位置
- visio-软件设计的各种图
- Delphi 关于 Assigned
- 代理ARP(Proxy Arp)
热门文章
- java面包屑实现_在Java中实现过滤器和面包店锁
- glass fish_Glass Fish 4.0.1中的Jersey SSE功能
- 将Java类作为子进程运行
- 使用threadlocal_何时以及如何使用ThreadLocal
- 对状态代码使用JAX-RS异常
- macosx jdk_MacOSX环境上的多个Java JDK
- Java Finalizer和Java文件输入/输出流
- 从微服务到分布式系统-Java开发人员生存指南
- JDK 9是某些功能的终结
- java 自定义注释_带有自定义注释的Java注释教程