|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
弁言
良多人在利用搜刮引擎的时分,会出于各类缘故原由,拼错想要搜刮的关头字,好比键盘有成绩(某个按键坏了)、不熟习国际称号(弗洛伊德的全名SigmundFreud)、不当心写错字母(Sinpsons)或多写了一个字母(Frusciaante)。很多用户都很熟习Google搜刮引擎照顾的“您是否是要找”功效。这个功效在检测到搜刮关头字有大概拼写错了的时分会供应一些备选倡议。
文本搜刮在电子商务网站等各种使用中都很罕见。电子商务网站一般供应文本搜刮功效,用户因而可以自行查找切合关头字的产物目次。一旦用户拼错关头字,极可能就间接招致发卖丧失。举例来讲,假设你运营一个发卖DVD的在线商铺。阿诺德·施瓦辛格(ArnoldSchwarzenegger)的影迷想在你的网店购置施瓦辛格主演的一切DVD。他起首做的就是在搜刮栏键进施瓦辛格的名字,但是假如他把名字拼错了,拼成了“ArnoldSwuazeneger”,假设你的网店没有前往任何相干的了局,那他就会往另外一家网店购置。
办理这个成绩的个中一个计划就是使用内置的范畴常识来完成“您是否是要找”的功效,向用户供应“您是否是要找ArnoldSchwarzenegger”的倡议。本文将要切磋的就是怎样用Java来完成这个功效。
编纂间隔算法
在信息论和盘算机迷信范畴,两个字符串之间的编纂间隔是指将个中一个字符串用另外一个字符来交换所必要的操纵次数。界说编纂间隔的体例有好几种,利用这些定义盘算编纂间隔值的算法也有良多。主要的算法有Levenshtein、Jaro-Winkler和n-gram。Jaro-Winkler是Jaro间隔器度的一个延长,次要使用于纪录毗连范畴(反复检测)。Levenshtein算法中,两个字符串之间的间隔定义为将一个字符串转换为另外一字符串所需的起码编纂次数,同意的编纂操纵有拔出、删除、单个字符的交换。该算法由VladimirLevenshtein在1965年提出,并以作者名来定名。n-gram是一个几率模子,按按次展望下一个编纂项,这一模子普遍用于统计天然言语处置和基因序列剖析的各个范畴。
本文并不是要研讨怎样重新完成这些算法,我们要存眷的是怎样借助ApacheLucene中已有的完成——SpellChecker项目来使用这些算法。
复杂来讲,LuceneSpellChecker完成包含主类SpellChecker,主类SpellChecker用到了Directory、Dictionary、和三个StringDistance算法之一。SpellChecker类利用战略形式(GoF)选择StringDistance算法,内置的StringDistance算法完成有JaroWinklerDistance、LevenshteinDistance、NGramDistance,缺省为LevenshteinDistance。你还能够调剂精度,精度的取值局限在0到1之间,缺省为0.5。精度的设置对了局有很年夜影响,大概你会以为精度应该设置得比缺省值要高一些,但大概你会发现设置得太高时算法却不会前往任何了局。拿我的辞书来讲,精度取0.749时失掉的了局最好。Dictionary接口有两个间接完成,你也能够编写本人的完成。
对我们的“您是否是要找”完成来讲,我们在辞书中搜刮关头字的子集,依据选定的字符串间隔算法查找“邻近”的关头字,并且间隔要与事后设置的精度相婚配。是LuceneSpellChecker的类图概览。
<p>
多谢指点,其实我对.net和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。 |
|