Lucene入门(3) | 利用 IK-analyzer 进行中文分词
程序员文章站
2024-02-22 11:50:34
...
利用 IK-analyzer 进行中文分词
分析器(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、实现结果
二、配置暂停词和字典
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,可以得出以下结果:
可以看出,相比上面没有配置的,灰化肥被单独作为一个词,单独的发也被去掉了。