Lucene中文分词Paoding

Paoding中文分词库是一个使用Java开发的基于Lucene4.x的分词器,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。Paoding填补了国内中文分词方面开源组件的空白,致力于此并希翼成为互联网网站首选的中文分词开源组件。 Paoding中文分词追求分词的高效率和用户良好体验。
Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。
高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。采用基于 不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析。
项目地址:http://git.oschina.net/zhzhenqin/paoding-analysis
测试实例:
下载最新项目(当前版本2.0.4):
1.将项目中的dic复制到测试工程的根目录下,词典目录默认classpath:dic下,在paoding-dic-home.properties中配置
2.paoding-analysis-2.0.4.jar放在工程的lib下

项目pom配置:


		4.6.0
	

	
		
			commons-logging
			commons-logging
			1.1.1
		
		
			 org.apache.lucene
			lucene-core
			 ${lucene.version}
		
		
			 org.apache.lucene
			lucene-analyzers-common
			 ${lucene.version}
		
		
			 org.apache.lucene
			lucene-queryparser
			 ${lucene.version}
		
		
			 org.apache.lucene
			lucene-highlighter
			 ${lucene.version}
		
		
			net.paoding
			paoding-analysis
			2.0.4
			system
			${project.basedir}/lib/paoding-analysis-2.0.4.jar
		
	
测试实例:

package cn.slimsmart.lucene.paoding.demo;

import java.io.StringReader;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

public class Test {

	public static void main(String[] args) throws Exception {
		String text="生成analyzer实例  将项目中的dic复制到工程的classpath下,默认配置";
		testSplitChinese(text);
		System.out.println("==============");
		testDemo(text);
	}
	/**
	 * 分词测试
	 */
	public static void testSplitChinese(String text) throws Exception{
		// 生成analyzer实例 将项目中的dic复制到工程的根下,若修改paoding.dic.home,更换位置
		Analyzer analyzer = new PaodingAnalyzer();
		// 取得Token流
		TokenStream tokenizer = analyzer.tokenStream("text", new StringReader(text));
		tokenizer.reset();
		// 添加工具类 注意:以下这些与之前lucene2.x版本不同的地方
		CharTermAttribute offAtt = (CharTermAttribute) tokenizer.addAttribute(CharTermAttribute.class);
		// 循环打印出分词的结果,及分词出现的位置
		while (tokenizer.incrementToken()) {
			System.out.print(offAtt.toString() + "\t");
		}
		tokenizer.close();
	}
	
	private static Document createDocument(String title, String content) {
		Document doc = new Document();
		doc.add(new TextField("title", title, Store.YES));
		doc.add(new TextField("content", content, Store.YES));
		return doc;
	}
	
	/**
	 * lucene简单实例
	 */
	public static void testDemo(String text) throws Exception{
		Analyzer analyzer = new PaodingAnalyzer();
		Directory idx = new RAMDirectory();
		IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46,analyzer);
		IndexWriter writer = new IndexWriter(idx, iwc);
		writer.addDocument(createDocument("维基百科:关于中文维基百科", "维基百科:关于中文维基百科"));
		writer.commit();
		IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(idx));
        System.out.println("命中个数:"+searcher.search(new QueryParser(Version.LUCENE_46,
                "title", analyzer).parse("title:'维基'"), 10).totalHits);
        writer.close();
	}
}
参考文章:
1. 在项目中使用paoding分词
2. Paoding Analyzer 庖丁解牛分词
3. Paoding分词器for Lucene4.x-Solr4.x

你可能感兴趣的:(搜索引擎)