`
liangjian103
  • 浏览: 176905 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene的中文分词器

阅读更多

lucene的中文分词器到现在还没有好的解决办法。下边介绍了两个lucene自己提供的分词器和一个javaeye上的网友实现的分词器。关于各个分词器的不同见代码中的print信息。直接运行得到console的输出结果更容易对比不同。

package analyzer;

import java.io.Reader;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.mira.lucene.analysis.IK_CAnalyzer;
import org.mira.lucene.analysis.MIK_CAnalyzer;

import com.sohospace.lucene.analysis.xanalyzer.XAnalyzer;
import com.sohospace.lucene.analysis.xanalyzer.XFactory;
import com.sohospace.lucene.analysis.xanalyzer.XTokenizer;
//中文分词使用了Paoding的分词技术,特表示感谢
public class TestCJKAnalyzer {
    
private static String testString1 = "中华人民共和国在1949年建立,从此开始了新中国的伟大篇章";
    
private static String testString2 = "比尔盖茨从事餐饮业和服务业方面的工作";
    
public static void testStandard(String testString) throws Exception{
        Analyzer analyzer 
= new StandardAnalyzer();      
        Reader r 
= new StringReader(testString);      
        StopFilter sf 
= (StopFilter) analyzer.tokenStream("", r);
        System.err.println(
"=====standard analyzer====");
        System.err.println(
"分析方法:默认没有词只有字");
        Token t;      
        
while ((t = sf.next()) != null{      
            System.out.println(t.termText());      
        }
     
    }

    
public static void testCJK(String testString) throws Exception{
        Analyzer analyzer 
= new CJKAnalyzer();      
        Reader r 
= new StringReader(testString);      
        StopFilter sf 
= (StopFilter) analyzer.tokenStream("", r);
        System.err.println(
"=====cjk analyzer====");
        System.err.println(
"分析方法:交叉双字分割");
        Token t;      
        
while ((t = sf.next()) != null{      
            System.out.println(t.termText());      
        }
     
    }

    
public static void testChiniese(String testString) throws Exception{
        Analyzer analyzer 
= new ChineseAnalyzer();      
        Reader r 
= new StringReader(testString);      
        TokenFilter tf 
= (TokenFilter) analyzer.tokenStream("", r);
        System.err.println(
"=====chinese analyzer====");
        System.err.println(
"分析方法:基本等同StandardAnalyzer");
        Token t;      
        
while ((t = tf.next()) != null{      
            System.out.println(t.termText());      
        }
     
    }

    
public static void testPaoding(String testString) throws Exception{
        XAnalyzer analyzer 
= XFactory.getQueryAnalyzer();   
        Reader r 
= new StringReader(testString);   
        XTokenizer ts 
= (XTokenizer) analyzer.tokenStream("", r);   
        System.err.println(
"=====paoding analyzer====");
        System.err.println(
"分析方法:字典分词,去掉停止词。在字典不能匹配的情况下使用CJKAnalyzer的分割发。");
        Token t;   
        
while ((t = ts.next()) != null{   
           System.out.println(t.termText());   
        }
   
    }

    
public static void testJe(String testString) throws Exception{
//        Analyzer analyzer = new MIK_CAnalyzer();
        Analyzer analyzer = new IK_CAnalyzer();
        Reader r 
= new StringReader(testString); 
        TokenStream ts 
= (TokenStream)analyzer.tokenStream("", r);
        System.err.println(
"=====je analyzer====");
        System.err.println(
"分析方法:字典分词,正反双向搜索,具体不明");
        Token t;   
        
while ((t = ts.next()) != null{   
           System.out.println(t.termText());   
        }
   
    }

    
public static void main(String[] args) throws Exception{
//        String testString = testString1;
        String testString = testString1;
        System.out.println(testString);
        
        testStandard(testString);
        testCJK(testString);
        testPaoding(testString);
        
//        testChiniese(testString);
//        testJe(testString);
    }


}

 

分享到:
评论

相关推荐

    Lucene中文分词器组件

    本文将深入探讨Lucene中文分词器组件的相关知识点。 首先,我们要明白中文分词的重要性。由于中文是以词为基本单位,不像英文那样有明显的空格分隔,因此在进行信息检索时,需要先对中文文本进行分词,将连续的汉字...

    lucene中文分词器(paoding解牛)

    《Lucene中文分词器——Paoding解牛详解》 在中文信息检索领域,分词是至关重要的一环,它能够将连续的汉字序列切割成具有独立意义的词语,为后续的索引和查询提供基础。Lucene作为Java最著名的全文搜索引擎库,其...

    Lucene中文分词器包

    来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...

    lucene.NET 中文分词

    总的来说,Lucene.NET在中文分词和高亮显示方面的应用需要结合合适的分词器,并进行适当的配置和优化。开发者可以根据实际需求选择适合的分词器,并通过集成和调优提高系统的搜索效率和用户体验。

    lucene3.0 分词器

    lucene3.0 中文分词器, 庖丁解牛

    lucene3庖丁解牛中文分词器

    《深入剖析:Lucene3与庖丁解牛中文分词器》 在信息技术飞速发展的今天,全文检索和搜索引擎已经成为日常开发中不可或缺的部分。Lucene作为一款强大的全文检索库,被广泛应用于各种信息检索系统中。然而,对于中文...

    lucene中文分词器Jceseg和IK Analyzer使用示例

    lucene中文分词器Jceseg和IK Analyzer使用示例,lucene5可以使用,本人亲测成功,大家放心用,喜欢lucene的人大家关注我的博客 http://blog.csdn.net/wuyinggui10000/article/category/3173543 大家共同交流,有需要...

    lucene中文分词工具包

    3. **分词器分词**:这是核心步骤,IKAnalyzer采用动态调优算法,能够在运行时根据上下文调整分词策略,以达到更好的分词效果。它支持基于正向最大匹配(MMAX)和逆向最大匹配(RMMAX)等多种分词模式。 4. **歧义...

    lucene分词测试代码

    用java写的图形分词测试的小东西,用的分词器是: 来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器,其使用“正向全切分算法”,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I...

    Lucene4.0 IK分词器使用pdf

    ### Lucene4.0 IK分词器使用概览 #### IKAnalyzer:中文分词利器 IKAnalyzer是一款基于Java开发的开源中文分词工具包,自2006年首次发布以来,历经多个版本的迭代,已成为业界广泛认可的中文分词解决方案。其最初...

    lucene 中文分词 庖丁解牛

    《Lucene中文分词:庖丁解牛》 在信息技术高速发展的今天,全文搜索引擎已经成为网站内容检索不可或缺的一部分。其中,Apache Lucene作为一个开源的全文检索库,被广泛应用于各种项目中,尤其对于处理中文文本,...

    lucene中文分词

    《Lucene中文分词技术详解》 在信息检索和自然语言处理领域,中文分词是至关重要的一步。Lucene,作为一个强大的全文搜索引擎库,对于处理中文文档,分词的准确性和效率直接影响到搜索效果。本文将围绕“lucene中文...

    lucene.net中文分词器

    《Lucene.NET中文分词器:深入解析与实践》 Lucene.NET是一个开源全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个强大的信息检索工具,Lucene.NET广泛应用于搜索引擎开发、文档检索系统等领域。...

    Lucene-Demo.rar Lucene分词的demo

    分词器的配置是灵活的,可以根据需求选择不同的分词策略,比如标准分词器(StandardAnalyzer)适用于大多数英文文本,而中文分词可能需要使用IKAnalyzer或SmartChineseAnalyzer等针对中文特性的分词器。 在运行这个...

    Lucene中文分词组件 JE-Analysis 1.5.1

    //采用正向最大匹配的中文分词算法,相当于分词粒度等于0 MMAnalyzer analyzer = new MMAnalyzer(); //参数为分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来 MMAnalyzer analyzer = new ...

    Lucene3.0分词系统.doc

    Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...

    lucene中文分词(庖丁解牛)庖丁分词

    《Lucene中文分词——庖丁解牛》 在自然语言处理领域,中文分词是基础且关键的一环。在Java开发中,Apache Lucene是一个强大的全文搜索引擎库,但默认并不支持中文,这就需要借助第三方分词工具。本文将深入探讨...

    lucene中文分词jar包

    关于lucene中文分词的一个辅助jar包

    lucene6.6+拼音分词+ik中文分词包

    然而,对于中文文本,Lucene默认的分词器并不理想,因此我们需要引入专门针对中文的分词工具。 IK Analyzer(IK中文分词器)是为了解决这个问题而诞生的。它是开源的Java实现的中文分词组件,特别适合用于Java开发...

    lucene+中文IK分词器 例子

    **Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。在处理中文文本时,由于中文词汇的复杂性和无...

Global site tag (gtag.js) - Google Analytics