设为首页 加入收藏

TOP

自己动手写搜索引擎(常搜吧历程四#分词#)(Java、Lucene、hadoop)(一)
2014-11-24 12:04:51 来源: 作者: 【 】 浏览:159
Tags:自己 手写 搜索引擎 常搜吧 历程 #分词 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"};
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇设计模式详解之建造者模式 下一篇Java中的Annotation(1)----三个基..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: