博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全文检索引擎Solr系列——整合中文分词组件IKAnalyzer
阅读量:6886 次
发布时间:2019-06-27

本文共 2746 字,大约阅读时间需要 9 分钟。

IK Analyzer是一款结合了词典和文法分析算法的中文分词组件,基于字符串匹配,支持用户词典扩展定义,支持细粒度和智能切分,比如:

张三说的确实在理

智能分词的结果是:

张三 |  说的 |  确实 |  在理

最细粒度分词结果:

张三 |  三 |  说的 |  的确 |  的 |  确实 |  实在 |  在理

整合IK Analyzer比mmseg4j要简单很多,解压缩IKAnalyzer2012FF_u1.jar放到目录:E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib,修改配置文件schema.xml,添加代码:

1
2
3
4
5
6
<field name=
"content"
type=
"text_ik"
indexed=
"true"
stored=
"true"
/>
 
<fieldType name=
"text_ik"
class
=
"solr.TextField"
>
      
<analyzer type=
"index"
isMaxWordLength=
"false"
class
=
"org.wltea.analyzer.lucene.IKAnalyzer"
/>
      
<analyzer type=
"query"
isMaxWordLength=
"true"
class
=
"org.wltea.analyzer.lucene.IKAnalyzer"
/>
</fieldType>
查询采用IK自己的最大分词法,索引则采用它的细粒度分词法

此时就算配置完成了,重启服务:java -jar start.jar,来看看IKAnalyzer的分词效果怎么样,打开Solr管理界面,点击左侧的Analysis页面

index4
默认分词器进行最细粒度切分。IKAnalyzer支持通过配置IKAnalyzer.cfg.xml 文件来扩充您的与有词典以及停止词典(过滤词典),只需把IKAnalyzer.cfg.xml文件放入class目录下面,指定自己的词典mydic.dic

1
2
3
4
5
6
7
8
9
10
11
<?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;
/com/mycompany/dic/mydict2.dic;</entry> 
  
   
<!--用户可以在这里配置自己的扩展停止词字典-->
  
<entry key=
"ext_stopwords"
>/ext_stopword.dic</entry>   
</properties>

事实上前面的FieldType配置其实存在问题,根据目前最新的IK版本,索引时使用最细粒度分词,查询时最大分词(智能分词)实际上是不生效的。

据作者说,在2012FF_hf1这个版本中已经修复,经测试还是没用,详情请看。

解决办法:重新实现IKAnalyzerSolrFactory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package
org.wltea.analyzer.lucene;
    
   
import
java.io.Reader;
   
import
java.util.Map;
    
   
import
org.apache.lucene.analysis.Tokenizer;
   
import
org.apache.lucene.analysis.util.TokenizerFactory;
   
//lucene:4.8之前的版本
   
//import org.apache.lucene.util.AttributeSource.AttributeFactory;
   
//lucene:4.9
   
import
org.apache.lucene.util.AttributeFactory;
    
   
public
class
IKAnalyzerSolrFactory
extends
TokenizerFactory{
        
       
private
boolean
useSmart;
        
       
public
boolean
useSmart() {
           
return
useSmart;
       
}
        
       
public
void
setUseSmart(
boolean
useSmart) {
           
this
.useSmart = useSmart;
       
}
        
        
public
IKAnalyzerSolrFactory(Map<String,String> args) {
            
super
(args);
            
assureMatchVersion();
            
this
.setUseSmart(args.get(
"useSmart"
).toString().equals(
"true"
));
          
}
    
    
       
@Override
       
public
Tokenizer create(AttributeFactory factory, Reader input) {
           
Tokenizer _IKTokenizer =
new
IKTokenizer(input ,
this
.useSmart);
           
return
_IKTokenizer;
       
}
    
   
}

重新编译后更新jar文件,更新schema.xml文件:

1
2
3
4
5
6
7
8
<fieldType name=
"text_ik"
class
=
"solr.TextField"
>
        
<analyzer type=
"index"
>
            
<tokenizer
class
=
"org.wltea.analyzer.lucene.IKAnalyzerSolrFactory"
useSmart=
"false"
/>
        
</analyzer>
        
<analyzer type=
"query"
>
            
<tokenizer
class
=
"org.wltea.analyzer.lucene.IKAnalyzerSolrFactory"
useSmart=
"true"
/>
        
</analyzer>
</fieldType>

转载地址:http://zrtbl.baihongyu.com/

你可能感兴趣的文章
通向架构师的道路(第一天)之Apache整合Tomcat - lifetragedy的专栏 - 博客频道 - CSDN.NET...
查看>>
项目、软件开发过程中版本术语
查看>>
T-SQL中INSERT、UPDATE
查看>>
openSUSE13.2安装ruby和rails
查看>>
python 高级函数
查看>>
F.Cards with Numbers
查看>>
简单入门Buffer
查看>>
OO第四阶段总结
查看>>
javascript总结02
查看>>
创建windows服务
查看>>
C++文件操作(fstream)
查看>>
用main函数传参做简单的计算器的代码
查看>>
python中struct.unpack的用法
查看>>
体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
查看>>
Python实践之(七)逻辑回归(Logistic Regression)
查看>>
PAT (Advanced Level) 1107. Social Clusters (30)
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>