自己动手写搜索引擎(常搜吧历程四#分词#)(Java、Lucene、hadoop)
分词的基本原理:1、分词是用来对文本按语言特征按算法进行过滤、分组处理的一种技术。2、分词的对象是文本,而不是图像动画脚本等等。3、分词的方式就是过滤和分组。4、过滤主要把文本中那些没有实际意义的字或词过滤掉。5、分组就是按照”分词数据库“内已添加好的词,进行匹配。下面来看Lucene分词器的使用[java]package com.qianyan.analyzer;import java.io.IOException;import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.SimpleAnalyzer;import org.apache.lucene.analysis.Token;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.WhitespaceAnalyzer;import org.apache.lucene.analysis.cjk.CJKAnalyzer;import org.apache.lucene.analysis.cn.ChineseAnalyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;public class TestAnalyzer {public static void main(String[] args) throws IOException {Analyzer analyzer = new StandardAnalyzer(); //标准 过滤停用次//Analyzer analyzer = new SimpleAnalyzer(); //简单 过滤空格和符号//Analyzer analyzer = new WhitespaceAnalyzer(); //过滤空格//Analyzer analyzer = new ChineseAnalyzer(); //lucene下的中文分词器 拆分每个字符,过滤符号//Analyzer analyzer = new CJKAnalyzer(); //中文 两字两字拆分 英文和standard功能一样String input = "this is test lucene analyzer class!";TokenStream tokenStream = analyzer.tokenStream("", new StringReader(input));Token token = new Token();while(null != tokenStream.next(token))System.out.println(token.term());}}对于初学者,我们只需要掌握这些经典的分词器就足够了。但在实际的开发过程中,满足我们需要得,是一些基于lucene分词之上的第三方中文分词包,在这里我们只介绍 ”庖丁分词包“,命令借鉴了”庖丁解牛“这个成语。庖丁解牛,我国古代成语,出自《庄子》,比喻经过反复实践,掌握了事物的客观规律,做事得心应手,运用自如。解压后我们需要对项目添加2个jar包,解压目录下的paoding-analysis.jar 和lib下的 commons-logging.jar 。令把dic文件夹复制到我们的项目src目录下。[java]package com.qianyan.analyzer;import java.io.IOException;import java.io.StringReader;import net.paoding.analysis.analyzer.PaodingAnalyzer;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.Token;import org.apache.lucene.analysis.TokenStream;public class TestPaodingAnalyzer {public static void main(String[] args) throws IOException {Analyzer analyzer = new PaodingAnalyzer();String input = "我爱北京天安门!";TokenStream ts = analyzer.tokenStream("", new StringReader(input));Token token = new Token();while(null != (token = ts.next(null)))System.out.println(token.term());}}大家通过这个例子可以看到,paoding分词器相当的强大,它的语法在此不过多介绍,有兴趣的朋友可以看解压后的中文操作手册。下面来看下实际中运用首先根据paoding分词器建立索引:[java]package com.qianyan.index;import java.io.IOException;import net.paoding.analysis.analyzer.PaodingAnalyzer;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;public class TestPaodingIndex {public static void main(String[] args) throws IOException{String[] ids = {"1", "2", "3", "4"};String[] names = {"张三", "李四", "李五", "赵六"};String[] addresses = {"居住在北京", "南京", "北京海淀", "南宁"};String[] birthdays = {"19820720", "19840203", "19770409", "19830130"};Analyzer analyzer = new PaodingAnalyzer();String indexDir = "E:/luceneindex";Directory dir = FSDirectory.getDirectory(indexDir);IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);for(int i = 0; i < ids.length; i++){Document document = new Document();document.add(new Field("id", ids[i], Field.Store.YES, Field.Index.ANALYZED));document.add(new Field("name", names[i], Field.Store.YES, Field.Index.ANALYZED));document.add(new Field("address", addresses[i], Field.Store.YES, Field.Index.ANALYZED));document.add(new Field("birthday", birthdays[i], Field.Store.YES, Field.Index.ANALYZED));writer.addDocument(document);}writer.optimize();writer.close();}}然后来看简单的检索类[java]package com.qianyan.search;import java.io.IOException;import org.apache.lucene.document.Document;import org.apache.lucene.index.Term;import org.apache.lucene.search.IndexSearcher;import org.补充:软件开发 , Java ,
上一个:java实现u盘指定内容的自动复制
下一个:Maven使用教程
- 更多JAVA疑问解答:
- java怎么在线读取ftp服务器上的文件内容
- 关于程序员的职业规划
- HTML和JSP矛盾吗?
- java小程序如何打包?
- java怎么split路径文件名?
- 关于Hibernate实体自身多对一的抓取问题
- 关于apache2+tomcat群集出现的问题
- SSH 导入导出excel 谁有这块的资料吗?
- springmvc 加载一个jsp页面执行多个方法 报404
- 关于用jquery 导入 excel
- java对时间进行循环放到List中
- 一个图片的输入输出程序,第一次调用某方法会中断,第二次调用则正常
- 请上过传智播客的人说一下传智播客怎么样呀!是不是像它说的那样好呀!
- spring的schema怎么配置
- 【菜鸟求助】SSH中怎么从JSP页面往后台传值呢