您的位置:首页 > 其它

Lucene+paoding 使用"庖丁解牛" 构建Analyzer paoding

2015-05-25 15:07 525 查看
[b]转自:http://2024486.blog.51cto.com/339445/155642[/b]

注意:这里配置环境变量要重新启动系统后生效

我现在测试用的Lucene版本是lucene-2.4.0,它已经能够支持中文分词,但它是采用一元分词(逐字拆分)的方法,即把每一个汉字当作是一个词,这样会使建立的索引非常庞大,会影响查询效率.所以大多运用lucene的朋友,都会考虑使用其它的中文分词包,这里我就介绍最为常用的"庖丁解牛"分词包,当然它也是一个值得推荐的中文分词包.

本文主要讲解Lucene如何整合"庖丁解牛"分词包,在整合前,还是先通过一个实例演示一下Lucene自带的中文分词器的分词效果.

package gzu.lyq.luceneAnalyzer;

import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.Token;

import org.apache.lucene.analysis.TokenStream;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

//测试Lucene自带的中文分词器

public class LuceneAnalyzer {

public static void main(String[] args) throws Exception {

//StandardAnalyzer:
一元分词

Analyzer analyzer = new StandardAnalyzer();

String indexStr = "我的QQ号码是58472399";

StringReader reader = new StringReader(indexStr);

TokenStream ts = analyzer.tokenStream(indexStr, reader);

Token t = ts.next();

while (t != null) {

System.out.print(t.termText()+" ");

t = ts.next();

}

}

}

分词结果:我 的 qq 号 码 是 58472399

通过上面的例子就会发现,Lucene自带分词器是将中文逐字拆分的,这是最为原始的分词方法,现在大都不采用.

下面进入主题,来讲解Lucene和"庖丁解牛"中文分词包的整合.

"庖丁解牛"的下载地址是http://code.google.com/p/paoding/downloads/list,下载好后解压,我解压在E:\paoding2_0_4,进入该目录,首先将paoding-analysis.jar拷贝到项目的WEB-INF/lib目录;接着需要设置环境变量PAODING_DIC_HOME,变量名:PAODING_DIC_HOME
变量值:E:\paoding2_0_4\dic 第三步将E:\paoding2_0_4\src目录下的paoding-dic-home.properties属性文件拷贝到项目的src目录下,添加一行paoding.dic.home=E:/paoding2_0_4/dic 好了,到这里,已经完成了Lucene和"庖丁解牛"的整合,下面写个例子来测试一下.

package gzu.lyq.luceneAnalyzer;

import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.Token;

import org.apache.lucene.analysis.TokenStream;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

//测试"庖丁解牛"中文分词器的分词效果

public class PaodingAnalyzer {

public static void main(String[] args) throws Exception {

Analyzer analyzer = new PaodingAnalyzer();

String indexStr = "我的QQ号码是58472399";

StringReader reader = new StringReader(indexStr);

TokenStream ts = analyzer.tokenStream(indexStr, reader);

Token t = ts.next();

while (t != null) {

System.out.print(t.termText()+" ");

t = ts.next();

}

}

}

分词结果:我的 qq 号码 58472399

如果把indexStr换成是"中华人民共和国万岁" ,那么分词结果为:

中华 华人 人民 共和 共和国 万岁

很明显,它的分词效果要比Lucene自带的中文分词器的效果好的多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐