欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lucene入门(3) | 利用 IK-analyzer 进行中文分词

程序员文章站 2024-02-22 11:50:34
...

利用 IK-analyzer 进行中文分词

分析器(Analyzer)的执行过程

如下图是语汇单元的生成过程:
Lucene入门(3) | 利用 IK-analyzer 进行中文分词
从一个Reader字符流开始,创建一个基于Reader的Tokenizer分词器,经过三个TokenFilter生成语汇单元Token。

要看分析器的分析效果,只需要看Tokenstream中的内容就可以了。每个分析器都有一个方法tokenStream,返回一个tokenStream对象。

实操代码

一、不配置暂停词和字典

1、在pom.xml里添加中文分析器IK-analyzer的依赖

<!--中文分析器-->
	<dependency>
		<groupId>com.janeluo</groupId>
		<artifactId>ikanalyzer</artifactId>
		<version>2012_u6</version>
	</dependency>

2、新建一个class,名为tokenLucene.java

代码实现

package com.hadoop.Lucene;

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

import org.junit.Test;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

public class tokenLucene {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
	
	@Test
	public void tokenstream() throws IOException
	{
		//需要分词的文本
		String text = "黑化肥发灰,灰化肥发黑,黑化肥发黑不发灰,灰化肥发灰不发黑";
		//创建StringReader对象来读文本
		StringReader str = new StringReader(text);
		//创建IK-analyzer分析器
		IKSegmenter ik = new IKSegmenter(str, true);
		
		Lexeme lex = null;
		while((lex=ik.next())!=null)
		{
			//用|作为分隔符
			System.out.print(lex.getLexemeText()+"|");
		}
	}
}

3、实现结果
Lucene入门(3) | 利用 IK-analyzer 进行中文分词

二、配置暂停词和字典

1、在src/main/java/的目录下配置以下三个文件

①IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">test.dic;</entry>
	<!--用户可以在这里配置自己的扩展停止词字典 -->
	<entry key="ext_stopwords">teststop.dic;</entry>
</properties>

下面的两个文件的内容是根据各自的内容添加的:

②配置扩展字典test.dic

灰化肥

③配置扩展停止词字典teststop.dic

2、然后再运行tokenLucene,可以得出以下结果:
Lucene入门(3) | 利用 IK-analyzer 进行中文分词
可以看出,相比上面没有配置的,灰化肥被单独作为一个词,单独的发也被去掉了。