了解下JAVA的用Java完成Google的“您是否是要找”功能
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也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Java是一种计算机编程语言,拥有跨平台、面向对java 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
页:
[1]