热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ElasticSearch与ICTCLAS中文分词系统

为什么80%的码农都做不了架构师?1.ElasticSearchSmartChineseAnalysis插件今天在学习ElasticSearch插件时ÿ

为什么80%的码农都做不了架构师?>>>   hot3.png

1. ElasticSearch Smart Chinese Analysis插件

    今天在学习ElasticSearch插件时,其中包含了Smart Chinese Analysis插件,这个插件集成了Lucene的Smart Chinese analysis模块到ES中,可以对中文或中英混合text来分析[1]。

    再搜索了Lucene的Smart Chinese analysis模块,发现是2009年5月9日,Gao xiaoping贡献给Apache Lucene社区的智能中文分词模块imdict-chinese-analyzer, 当时的Lucene是2.4.1版本[2,3]。在[3]中,有对imdict-chinese-analyzer的简要描述。

2.  imdict智能词典所采用的智能中文分词程序

    imdict-chinese-analyzer 是 imdict智能词典 的智能中文分词模块,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene搜索引擎提供*简体中文*分词支持。

    Apache Lucene的中文分词

    Apache Lucene是java实现的一个高效的文本搜索引擎软件,它适用于几乎所有要求全文检索的应用项目,尤其是跨平台应用。对英文的处理已经非常完善,但在中文方面仍然非常欠缺,目前lucene的contribution中,中日韩语言只有一个分析器(cjk analyzer),还是按中日韩文字来逐个切分的,无论从索引效率还是搜索准确度上都很难符合要求。

    为什么需要智能分词

    中文与西方语言最大的区别就在于语句的词汇之间没有明显的分词界限,但是计算机自然语言处理是按词汇来进行分析的,因此中文分词的效果直接影响中文检索和自然语言处理的准确性。例如: “我购买了道具和服装”,如果采用比较简单的正向最大匹配算法,分词结果是“我 购买 了 道具 和服 装”,明显偏离了原句的意思;而采用基于HMM的智能分词模型,能够综合分析句子的结构、各个词的频率以及各个词汇之间的跳转频率,从而能产生最优化的分词结果:“我 购买 了 道具 和 服装”。

    imdict-chinese-analyzer的特性

    1. 完全Unicode支持

    分词核心模块完全采用Unicode编码,无须各种汉字编码的转换,极大的提升了分词的效率。

    2. 提升搜索效率

    根据imdict智能词典的实践,在有智能中文分词的情况下,索引文件比没有中文分词的索引文件小1/3

    3. 提高搜索准确度

    imdict-chinese-analyzer采用了HHMM分词模型,极大的提高了分词的准确率,在此基础上的搜索,比对汉字逐个切分要准确得多!

    4. 更高效的数据结构

    为了提高效率,针对常用中文检索的应用场景,imdict-chinese-analyzer对一些不必要的功能进行了删减,例如词性标注、人名识别、时间识别等等。另外还修改了算法的数据结构,在内存占用量缩减到1/3的情况下把效率提升了数倍。

    三种智能分词软件效率对比

    ICTCLAS 1.0是中科院张华平博士开发的一款基于HHMM的智能分词软件,2009年5月时版本为3.0(商业版,C++实现),而imdict-chinese-analyzer 和 ictclas4j 都是基于同一模型开发的Java版分词软件,三者的分词效率对比如下图:

  |                            | ictclas4j      | imdict-chinese-analyzer | ICTCLAS 3.0 |

                               |:--------------|:----------------------------|:----------------|

 | 分词速度(字节/秒) | 13.86       | 483.64                        | 678.15        |

| 分词速度(汉字/秒) | 7439      | 259517                        | 363888      |

测试数据采用中文文件大小为62390KB,内容长度为33477693字符,各软件独立分词并将分开的词写到文件里。

测试环境为:酷睿E7200双核,内存2G,JDK参数为:"-Xms512m -Xmx1024m "

由此对比可以看出, imdict-chinese-analyzer的分词效率与C++实现的ICTCLAS 3.0的分词效率在同一个数量级,是 ictclas4j 的 36 倍!

3. Lucene SmartChineseAnalyzer

    imdict-chinese-analyzer在Apache Lucene中被重新命名为SmartChineseAnalyzer。其源代码中有以下注释:

    SmartChineseAnalyzer 是一个智能中文分词模块, 能够利用概率对汉语句子进行最优切分, 并内嵌英文tokenizer,能有效处理中英文混合的文本内容。

    它的原理基于自然语言处理领域的隐马尔科夫模型(HMM), 利用大量语料库的训练来统计汉语词汇的词频和跳转概率, 从而根据这些统计结果对整个汉语句子计算最似然(likelihood)的切分。

    因为智能分词需要词典来保存词汇的统计值,SmartChineseAnalyzer的运行需要指定词典位置,如何指定词典位置请参考 org.apache.lucene.analysis.cn.smart.AnalyzerProfile

    SmartChineseAnalyzer的算法和语料库词典来自于ictclas(http://ictclas.nlpir.org/downloads)

    @see org.apache.lucene.analysis.cn.smart.AnalyzerProfile

4. NLPIR汉语分词系统与张华平博士

     NLPIR汉语分词系统,又名ICTCLAS,当前最新版本是2017。NLP表示自然语言处理,IR表示信息检索,NLPIR.org是自然语言处理与信息检索共享平台。

     张华平,NLPIR(ICTCLAS)创始人与开发者,2009年担任北京理工大学大数据搜索挖掘实验室主任,博士,副教授。其微博见[5]

 

参考资料:

[1] Smart Chinese Analysis plugin, https://www.elastic.co/guide/en/elasticsearch/plugins/master/analysis-smartcn.html

[2] contrib intelligent Analyzer for Chinese, https://issues.apache.org/jira/browse/LUCENE-1629

[3] Source code of imdict-chinese-analyzer, https://code.google.com/archive/p/imdict-chinese-analyzer/

[4] NLPIR/ICTCLAS汉语分词系统, http://ictclas.nlpir.org/downloads

[5] 张华平博士微博, http://weibo.com/drkevinzhang?refer_flag=1005055013_&is_hot=1


转:https://my.oschina.net/1pei/blog/898291



推荐阅读
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • 优化后的标题:Apache Cassandra数据写入操作详解
    本文详细解析了 Apache Cassandra 中的数据写入操作,重点介绍了 INSERT 命令的使用方法。该命令主要用于将数据插入到指定表的列中,其基本语法为 `INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...)`。通过具体的示例和应用场景,文章深入探讨了如何高效地执行数据写入操作,以提升系统的性能和可靠性。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
author-avatar
lanhai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有