项目背景:

  某银行呼叫中心工单数据挖掘和分析项目,旨在利用文本计算实现热点聚焦和舆情分析。

一、引言:

  中文分词一直是自然语言处理的一个痛处,早在08年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜索引擎),那时的痛,没想到5年后的今天依然存在,切分效果、扩展支持、业务应用等方面依然不甚理想。收费的版本不提了,原因自不必言表,开源版本中,发现之前曾经活跃的版本,大多已经没落(好几年没更新了),存活下来的寥寥无几。我是一个守旧的人,评估版本的选择有些保守,至少目前为止,只看1.0正式版本之后的版本,0.XX的不在考虑范围之内,用了一个周末的时间,对比了十多款的样子,个人感觉源于中科院ICTCLAS的smartcn和IKAnanlyzer效果还是不错的。

二、结果对比

2.1 原始文本

"lucene\分析器\使用\分词器\和\过滤器\构成\一个\“管道”,文本\在\流经\这个\管道\后\成为\可以\进入\索引\的\最小单位,因此,一个\标准\的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理";
2.2 smartcn

lucen\分析器\使用\分词\器\和\过滤器\构成\一个\管道\文本\流经\这个\管道\后\成为\可以\进入\索引\最\小\单位\因此\一个\标准\分析器\有\两\个\部分\组成\一个\分词\器\token\它\用于\将\文本\按照\规则\切分\为\一个\个\可以\进入\索引\最\小\单位\另外\一个\tokenfilt\它\主要\作用\对\切\出来\词\进行\进一步\处理\如\去掉\敏感\词\英文\大小写\转换\单\复数\处理\等\lucen\中\tokenstram\方法\首先\创建\一\个\token\对象\处理\reader\对象\中\式\文本\然后\利用\tokenfilt\对\输出\进行\过滤\处理\

2.3 IKanalyzer

lucene\分析器\分析\器使\使用\分词器\分词\器\和\过滤器\过滤\滤器\构成\一个\一\个\管道\文本\在\流经\这个\管道\后\成为\可以\进入\索引\的\最小\单位\因此\一个\一\个\标准\的\分析器\分析\器\有\两个\两\个\部分\分组\组成\一个是\一个\一\个\是\分词器\分词\器\tokenizer\它用\用于\将\文本\按照\规则\切分\切\分为\一个个\一个\一\个个\个\个\可以\进入\索引\的\最小\单位\另外\一个是\一个\一\个\是\tokenfilter\它\主要\作用\用是\对\切出来\切出\切\出来\的\词\进行\行进\进一步\进一\一步\一\步\的\处理\如\去掉\敏感\词\英文\大小写\大小\小写\转换\单\复数\处理\等\lucene\中\的\tokenstram\方法\首先\创建\一个\一\个\tokenizer\对象\处理\reader\对象\中\的\流式\文本\然后\利用\tokenfilter\对\输出\流进\进行\过滤\处理\

三、smartcn示例程序

 1 package dictTest;
2
3 import java.util.Iterator;
4
5 import org.apache.lucene.analysis.TokenStream;
6 import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
7 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
8 import org.apache.lucene.analysis.util.CharArraySet;
9 import org.apache.lucene.util.Version;
10
11 public class SmartChineseAnalyzerTest {
12
13 public static void main(String[] args) {
14 try {
15 // 要处理的文本
16 String text = "lucene分析器使用分词器和过滤器构成一个“管道”,文本在流经这个管道后成为可以进入索引的最小单位,因此,一个标准的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理";
17 //String text = "目前我已经用了lucene4.0,虽然是alpha版,但是也是未来的第一步。但是IKAnalyzer不支持lucene4,如果作者在,是否有计划对4支持?何时支持?";
18 // 自定义停用词
19 String[] self_stop_words = { "的", "在","了", "呢", ",", "0", ":", ",", "是", "流" };
20 CharArraySet cas = new CharArraySet(Version.LUCENE_46, 0, true);
21 for (int i = 0; i < self_stop_words.length; i++) {
22 cas.add(self_stop_words[i]);
23 }
24
25 // 加入系统默认停用词
26 Iterator<Object> itor = SmartChineseAnalyzer.getDefaultStopSet().iterator();
27 while (itor.hasNext()) {
28 cas.add(itor.next());
29 }
30
31
32 // 中英文混合分词器(其他几个分词器对中文的分析都不行)
33 SmartChineseAnalyzer sca = new SmartChineseAnalyzer(Version.LUCENE_46, cas);
34
35 TokenStream ts = sca.tokenStream("field", text);
36 CharTermAttribute ch = ts.addAttribute(CharTermAttribute.class);
37
38 ts.reset();
39 while (ts.incrementToken()) {
40 System.out.print(ch.toString()+"\\");
41 }
42 ts.end();
43 ts.close();
44 } catch (Exception ex) {
45 ex.printStackTrace();
46 }
47 }
48
49 }

四、IKanalyzer示例程序

 1 package dictTest;
2
3 import org.wltea.analyzer.*;
4 import org.apache.lucene.analysis.Analyzer;
5 import org.apache.lucene.analysis.TokenStream;
6 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
7 import org.wltea.analyzer.lucene.*;
8
9 public class IKAnalyzerTest {
10
11 public static void main(String[] args) {
12 // TODO Auto-generated method stub
13 Analyzer ik = new IKAnalyzer();
14 try{
15 String text = "lucene分析器使用分词器和过滤器构成一个“管道”,文本在流经这个管道后成为可以进入索引的最小单位,因此,一个标准的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理";
16 TokenStream ts = ik.tokenStream("field", text);
17
18 CharTermAttribute ch = ts.addAttribute(CharTermAttribute.class);
19
20 ts.reset();
21 while (ts.incrementToken()) {
22 //System.out.println(ch.toString());
23 System.out.print(ch.toString() + "\\");
24 }
25 ts.end();
26 ts.close();
27
28 } catch (Exception ex) {
29 ex.printStackTrace();
30 }
31
32 }
33 }

五、结论

1.二者分词效果,相比其他已经不错,都值得肯定;

2.smartcn为Lucene4.6版本自带(之前版本也有),中文分词不错,英文分词有问题,Lucene分词后变成了Luncn;

3.IKAnalyzer分词后的碎片太多,可以和人工分析效果做对比;

4.从自定义词库的角度考虑,因为smartcn在Lucene4.6中的版本,目前不支持自定义词库,成为致命缺陷,只能放弃。

smartcn与IKanalyzer的更多相关文章

  1. 开源中文分词框架分词效果对比smartcn与IKanalyzer

    一.引言: 中文分词一直是自然语言处理的一个痛处,早在08年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜索引擎),那时的痛,没想到5年后的今天依然存在,切分效果.扩展支持.业务应用等方面 ...

  2. solr、Lucene、IKAnalyzer这三者关系是怎样的?

    lucene 是开源搜索引擎 solr 是基于 lucene开发的搜索引擎 IK 是中文分词. lucene 不是一个搜索引擎,只是一个基础的文件索引工具包,或者叫“搜索引擎开发包”.不能单独作为程序 ...

  3. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  4. IKAnalyzer

    我们的项目中中文切词使用的是mmseg,有一个不满意的地方是jar包中的默认词典一定会被加载进去,当我对有些term有意见时,无法删除. mmseg中Dictionary.java里一段代码保证了/d ...

  5. lucene+IKAnalyzer实现中文纯文本检索系统

    首先IntelliJ IDEA中搭建Maven项目(web):spring+SpringMVC+Lucene+IKAnalyzer spring+SpringMVC搭建项目可以参考我的博客 整合Luc ...

  6. JAVA 中配置IKAnalyzer扩展词库和停止词库

    1.后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件.如果不确定什么是 无BOM的UTF-8编码,最简单的方式就是 用Notepad++编辑器打开,Encoding ...

  7. solr 中文分词 IKAnalyzer

    solr中文分词器ik, 推荐资料:http://iamyida.iteye.com/blog/2220474?utm_source=tuicool&utm_medium=referral 使 ...

  8. paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.

    paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:// ...

  9. Solr整合中文分词组件IKAnalyzer

    我用的Solr是4.10版本, 在csdn下载这个版本的IKAnalyzer:IK Analyzer 2012FF_hf1.zip 解压后目录如下: (1)这里还用solr自带的example实验分词 ...

随机推荐

  1. 在四川大学的第二个冠军游戏在线编程:Peter的X

    四川大学线下编程比赛第二题:Peter的X 公布公司: 有 效 期: CSDN 2014-09-27至2015-09-26 难 度 等 级: 答 题 时 长: 编程语言要求: 120分钟 C C++ ...

  2. C语言中符号格式说明

    scanf 语法: #include <stdio.h>int scanf( const char *format, ... ); scanf()函数根据由format(格式)指定的格式从 ...

  3. TableLayout中stretchColumns、shrinkColumns的使用方法

    android:stretchColumns="1" android:shrinkColumns="1"这两个属性是TableLayout所特有的,也是这两个属 ...

  4. JSP具体条款——response对象

    response对象 response为响应对象client要求.输出信息到客户.他封装JSP反应生成.发送client在回应client要求. 1.重定向网页 使用response对象的sendRe ...

  5. jquery插件之DataTables 参数介绍

    DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内). 先把它主页上写的特性 ...

  6. java_面试_20140402(爬虫面试题)

  7. java_windows下修改eclipse的默认编码

    windows下修改eclipse的默认编码   windows下一般系统编码为 GB2312(中文版的windows), 由于我比较喜欢utf8格式的编码,现将修改方式和大家分享 如果要使新建立工程 ...

  8. POJ2771_Guardian of Decency(二分图/最大独立集=N-最大匹配)

    解决报告 http://blog.csdn.net/juncoder/article/details/38159017 题目传送门 题意: 看到题目我就笑了.., 老师觉得这种两个学生不是一对: 身高 ...

  9. Jquery()核心函数的7个重载方法

    (1) jquery() 该函数返回一个空的jQuery对象.在jQuery1.4以后的版本中,改函数返回一个空的jQuery对象.在之后的版本中,该函数会返回一个包含document节点的对象. ( ...

  10. CSS3+HTML5特效3 - 纵向无缝滚动

    老惯例,先看例子. This is a test 1. This is a test 2. This is a test 3. This is a test 4. This is a test 5. ...