lucene分词器解析
程序员文章站
2022-07-01 15:30:12
...
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
/**
*
* 测试分词器...
* @author Administrator
*
*/
public class TestAnalyzer {
/**
*
* 1、分词器的作用
* 在创建索引时会用到分词器,在使用字符串搜索时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不出结果。
Analyzer(分词器)的作用是把一段文本中的词按规则取出所包含的所有词。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言(规则),要用不同的分词器
* @throws IOException
*
*
*/
public static void main(String[] args) throws IOException {
//单字分词
// Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_44);
//二分法分词...
// Analyzer analyzer=new CJKAnalyzer(Version.LUCENE_44);
//Analyzer 是一个抽象类,我们能不能改造它,来定义自己的分词规则..
//有没有第三方已经实现好了。我们直接拿过来用,
//google download 第三方 的一些开发工具包...
//github 很多第三方的资料...
//第三方的中文的分词器,庖丁分词器, 中文分词,特点:扩展新的词,自定义停用词...
//2012FF_u1
Analyzer analyzer=new IKAnalyzer();
//自定义扩展词...
String text="lucene 是传智播客的一个全文检索的高大上的工具包";
testAnalzyer(analyzer, text);
}
public static void testAnalzyer(Analyzer analyzer,String text) throws IOException{
System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName());
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(text));
tokenStream.addAttribute(CharTermAttribute.class);
tokenStream.reset();
while (tokenStream.incrementToken()) {
CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
System.out.println(new String(charTermAttribute.toString()));
}
}
}
庖丁分词器首先要有一个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">mydict.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopword.dic</entry>
</properties>
建立一个扩展词典mydict.dic文件,内容如下所示
传智播客
高大上
建立一个扩展停止词字典ext_stopword.dic,内容如下所示
也
了
仍
从
以
使
则
却
又
及
对
就
并
很
或
把
是
的
着
给
而
被
让
在
还
比
等
当
与
于
但
乃
一
个
包
上