`
hpjianhua
  • 浏览: 241753 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

lucene3.0 中文分词实例IKAnalyzer StandardAnalyzer

阅读更多
之前想做lucene的中文分词,上网一搜,结果都是针对lucene2.x的,于是就写了一实例针对lucene3.x版本的,以下仅为学习交流之用;

时间仓促,实例示下:

package com.hpjianhua.lucene;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * 分词器测试类,支持lucene3.0以上版本
 * 分词器IKAnalyzer3.2.5Stable.jar
 * @author hpjianhua
 * @Date 2011 04 08
 *
 */
public class TokenTest {
	
	//	要分词的字符串
	private static String text = "中国,古时通常泛指中原地区,与中华中夏 中土中州含义相同。古代华夏族、汉族建国于黄河流域一带,以为居天下之中,故称中国";
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		Analyzer ikAnalyzer = new IKAnalyzer();
		System.out.println("======中文=======IKAnalyzer======分词=======");
		showToken(ikAnalyzer, text);
		
		Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_30);
		System.out.println("=====一元========StandardAnalyzer=====分词========");
		showToken(standardAnalyzer, text);
	}
	
	/**
	 * 分词及打印分词结果的方法
	 * @param analyzer     分词器名称
	 * @param text         要分词的字符串
	 * @throws IOException 抛出的异常
	 */
	public static void showToken(Analyzer analyzer, String text) throws IOException {
		
		Reader reader = new StringReader(text);
		TokenStream stream = (TokenStream)analyzer.tokenStream("", reader);
		//添加工具类  注意:以下这些与之前lucene2.x版本不同的地方
		TermAttribute termAtt  = (TermAttribute)stream.addAttribute(TermAttribute.class);
		OffsetAttribute offAtt  = (OffsetAttribute)stream.addAttribute(OffsetAttribute.class);
		// 循环打印出分词的结果,及分词出现的位置
		while(stream.incrementToken()){
			System.out.print(termAtt.term() + "|("+ offAtt.startOffset() + " " + offAtt.endOffset()+")"); 
		}
		System.out.println();
	}

}




输出结果如下:

======中文=======IKAnalyzer======分词=======
中国|(0 2)古时|(3 5)通常|(5 7)泛指|(7 9)中原地区|(9 13)中原|(9 11)原地区|(10 13)原地|(10 12)地区|(11 13)与|(14 15)中华|(15 17)华中|(16 18)中夏|(17 19)中土|(20 22)中州|(22 24)含义|(24 26)相同|(26 28)古代|(29 31)华夏|(31 33)夏|(32 33)族|(33 34)汉族|(35 37)建国|(37 39)于|(39 40)黄河流域|(40 44)黄河|(40 42)河流|(41 43)流域|(42 44)一带|(44 46)一|(44 45)以为|(47 49)居|(49 50)天下|(50 52)之中|(52 54)故|(55 56)称|(56 57)中国|(57 59)
=====一元========StandardAnalyzer=====分词========
中|(0 1)国|(1 2)古|(3 4)时|(4 5)通|(5 6)常|(6 7)泛|(7 8)指|(8 9)中|(9 10)原|(10 11)地|(11 12)区|(12 13)与|(14 15)中|(15 16)华|(16 17)中|(17 18)夏|(18 19)中|(20 21)土|(21 22)中|(22 23)州|(23 24)含|(24 25)义|(25 26)相|(26 27)同|(27 28)古|(29 30)代|(30 31)华|(31 32)夏|(32 33)族|(33 34)汉|(35 36)族|(36 37)建|(37 38)国|(38 39)于|(39 40)黄|(40 41)河|(41 42)流|(42 43)域|(43 44)一|(44 45)带|(45 46)以|(47 48)为|(48 49)居|(49 50)天|(50 51)下|(51 52)之|(52 53)中|(53 54)故|(55 56)称|(56 57)中|(57 58)国|(58 59)



分享到:
评论

相关推荐

    java单独整合ikanalyzer中文分词器提取关键字及动态拓展词库并兼容lucene高版本

    IKAnalyzer是一款开源的、基于Java实现的中文分词工具,它最初是为Lucene搜索引擎设计的,但随着时间的发展,已经逐渐成为一个独立的、可扩展的分词系统,能够很好地兼容高版本的Lucene。 首先,我们需要了解IK...

    Lucene-Demo.rar Lucene分词的demo

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

    全文检索技术学习(三)——Lucene支持中文分词 - 李阿昀的博客 - CSDN博客1

    然而,对于中文分词,我们需要使用专门针对中文的 Analyzer,如 IKAnalyzer、SmartChineseAnalyzer 或 HanLP 分词库。这些分析器内置了中文分词规则和词典,能够更准确地将中文文本切分成有意义的词语。例如,IK...

    lucene4.7 开发简单实例

    对于中文,我们可以使用IKAnalyzer、SmartChineseAnalyzer或其他专门为中文设计的分词器,以更好地理解和拆分中文词汇。 索引创建完成后,我们可以通过IndexWriter接口进行修改和删除操作。IndexWriter允许我们添加...

    lucene与sqlserver数据库实现索引的简单实例

    Lucene支持多种分词器,如StandardAnalyzer、IKAnalyzer等,选择合适的分词器对提高搜索精度至关重要。 3. **创建索引**:使用Lucene的`IndexWriter`类,将预处理后的数据转换为Lucene的文档(Document)对象,并...

    lucene 3.6 全文检索

    IndexWriter配置了各种参数,如分词器(Analyzer)、写入模式等。接着,通过addDocument()方法将一个个文档添加到索引中。每个文档由多个Field对象构成,每个Field包含特定的文本内容和属性,如是否存储原始内容、...

    lucene实例

    不同的语言可能需要不同的分词器,例如英文的 StandardAnalyzer 和中文的 IKAnalyzer。 4. **术语(Term)**:分词后的结果称为术语,它是 Lucene 搜索的基本单元。 5. **倒排索引(Inverted Index)**:这是 ...

    lucene3.6的入门案例

    在本案例中,我们使用的是 IKAnalyzer,这是一个针对中文的开源分词器,能较好地处理中文分词问题。 4. **索引writer(IndexWriter)**:负责创建或更新索引。我们可以向 IndexWriter 添加文档,然后调用 commit() ...

    Java搜索工具——Lucene实例总结(一)

    但也可以根据需求选择或自定义其他分析器,比如针对中文的IK Analyzer。 5. 扩展与优化 Lucene提供许多高级特性,如评分系统、布尔查询、短语查询、模糊查询、近似搜索等。此外,可以通过缓存、多线程和优化索引等...

    lucene4.6实例

    - 使用合适的分析器:根据应用需求选择合适的分析器,例如英文的StandardAnalyzer或中文的IKAnalyzer。 - 调优索引性能:合理设置索引参数,如缓冲区大小、合并策略等,以平衡速度与磁盘空间。 - 多线程处理:...

    lucene基本使用

    然后,根据项目需求选择合适的Analyzer,例如标准Analyzer用于处理英文文本,中文则通常使用IKAnalyzer或SmartChineseAnalyzer。 三、创建索引 1. 创建索引目录:使用Directory类(如FSDirectory)创建一个文件...

    lucene5.3.1增删改查

    对于中文,可以选择IKAnalyzer或其他针对中文优化的Analyzer。 2. **创建Directory**: Directory是Lucene中存储索引的地方,它可以是内存中的RAMDirectory,也可以是磁盘上的FSDirectory。 3. **创建IndexWriter**...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-06.Lucene索引搜索 共13页.pptx

    在实际应用中,除了这些基本操作,还需要了解其他Lucene组件,如Filter(用于进一步筛选结果)、Sort(用于结果排序)、分词器(如StandardAnalyzer、IKAnalyzer等)以及高级查询构造如BooleanQuery、PhraseQuery、...

    lucene-api.rar_lucene

    此外,还可以结合IKAnalyzer、HanLP等第三方分词库增强中文处理能力。 ### 5. 扩展与优化 - **Memory Management**: 使用Lucene的段合并策略控制内存使用,避免一次性加载大量索引数据。 - **多线程索引和搜索**:...

    最简单的Lucene建立、搜索索引的方法

    例如,如果你处理的是中文文本,可以选择`StandardAnalyzer`或`IKAnalyzer`(针对中文的分词器)。 4. **创建IndexWriter**:使用`Directory`对象(如`FSDirectory`)和Analyzer创建`IndexWriter`实例,`...

    全文搜索-Lucene

    开发者可以根据需求选择不同的分析器,例如标准分析器(StandardAnalyzer)用于处理英文文本,而中文则需要使用如 IK 分析器(IKAnalyzer)。 2. **Document**: 文档对象代表要索引的信息,可以包含多个字段(Field...

    lucene的使用

    3. 在创建IndexWriter对象时,可以使用IK分词器实例替代默认的StandardAnalyzer。通过IndexWriterConfig的构造方法传入所需的分词器实现。 4. 在创建查询语句时,可以使用不同的查询对象,如TermQuery,从而根据需要...

    ssd.rar_lucene_搜索 lucene_搜索引擎_文本搜索

    在本例中,可能使用了默认的StandardAnalyzer,针对中文可能还使用了IKAnalyzer或其他中文分词器。 2. **Document**: 存储要索引的信息,如文件名、内容等,可以视为数据库中的记录。 3. **IndexWriter**: 负责...

    LuceneUtils_lucenejava_全文检索_lucene_

    Lucene对中文处理需要特殊的Analyzer,如`IKAnalyzer`或`SmartChineseAnalyzer`。这些Analyzer能对中文进行分词,便于索引和搜索。例如: ```java Analyzer analyzer = new IKAnalyzer(); ``` 3. **创建...

    【java、lucene、python】互联网搜索引擎课程报告二:建立搜索引擎

    - **分词器的选择**:对于中文文档,通常会使用IK Analyzer这样的分词器来进行分词操作。而对于英文文档,则可以采用默认的StandardAnalyzer或其他适用于英文文本的分词器。 - **文档模型定义**:每个文档被定义为...

Global site tag (gtag.js) - Google Analytics