当前位置: 首页 > Java教程 > 正文

Lucene4.6基于SmartChineseAnalyzer的中文分词

收藏文章Loading
收藏
(56)

Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java资讯检索程式库。

全文检索服务主要由两大部门构成:索引器及搜索器。索引器主要负责对文件名称及文件内容进行分词,并创建索引表。搜索器负责检索索引表,获取相关内容信息,并显示。

在搜索引擎的构建中,分词器是索引器和搜索器中重要的一部分。分词器的好坏直接影响着搜索效果的优劣。Lucene4.6是当前的最新版本。作为最新版本的Lucene,其自带的中文分词器效果也相当不错。

分词测试代码如下:

package com.lm.IndexTxt;  
import java.io.IOException; import java.util.ArrayList; import java.util.List;  
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; 
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; 
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.util.Version;  
/** 
 * 中文切词 
 * @author lm  
 */ 
public class AnalyzerCN_LM {   
//    分析器类型            基本介绍 
//    WhitespaceAnalyzer   以空格作为切词标准,不对语汇单元进行其他规范化处理 
//    SimpleAnalyzer       以非字母符来分割文本信息,并将语汇单元统一为小写形式,并去掉数字类型的字符 
//    StopAnalyzer         该分析器会去除一些常有a,the,an等等,也可以自定义禁用词 
//    StandardAnalyzer     Lucene内置的标准分析器,会将语汇单元转成小写形式,并去除停用词及标点符号 
//    CJKAnalyzer          能对中,日,韩语言进行分析的分词器,对中文支持效果一般。 
//    SmartChineseAnalyzer 对中文支持稍好,但扩展性差 
   
/**   
 * 中文切词   
 */  
@SuppressWarnings("unchecked")  
public List<String> analyzerCnStr(String str{   
    List<String> result = new ArrayList();      
    Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_46,true);//指定当前版本为4.6   
    try { 
        TokenStream tokenStream = analyzer.tokenStream("field", str);    
        CharTermAttribute term=tokenStream.addAttribute(CharTermAttribute.class);    
        tokenStream.reset();       
        while( tokenStream.incrementToken() ){        
            result.add( term.toString() );       
        }       
        tokenStream.end();       
        tokenStream.close();   
    } catch (IOException e1) {    
        e1.printStackTrace();   
    }   
    return result;  
}    

//测试切词  
public static void main(String[] args) {   
    AnalyzerCN_LM analyzer = new AnalyzerCN_LM();   
    List<String> l = analyzer.analyzerCnStr("对于Lucene4.3开发首先摆在我们面前的第一个必须要解决的问题,就是关于中文分词的问题,因为Lucene毕竟是国外的大牛们开发的,显然会比较侧重英文文章,不过还好,在Lucene的下载包里同步了SmartCN的分词器针对中文发行的,每一次Lucene有新的版本发行,这个包同时更新。");   
    System.out.println(l);  
}  
} 

分词效果如下:

[对于, lucen, 4, 3, 开发, 首先, 摆, 在, 我们, 面前, 的, 第一, 个, 必须, 要, 解决, 的, 问题, 就, 是, 关于, 中文, 分, 词, 的, 问题, 因为, lucen, 毕竟, 是, 国外, 的, 大, 牛, 们, 开发, 的, 显然, 会, 比较, 侧重, 英文, 文章, 不过, 还, 好, 在, lucen, 的, 下载, 包, 里, 同步, 了, smartcn, 的, 分词, 器, 针对, 中文, 发行, 的, 每, 一, 次, lucen, 有, 新, 的, 版本, 发行, 这个, 包, 同时, 更新]

本文固定链接: http://www.csyor.com/444.html - 穿梭于偶然

该日志由 Csyor 于2014年01月16日发表在 Java教程 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Lucene4.6基于SmartChineseAnalyzer的中文分词 - 穿梭于偶然
关键字: , , ,

Lucene4.6基于SmartChineseAnalyzer的中文分词:目前有1 条留言

发表评论


快捷键:Ctrl+Enter