热门标签 | 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



推荐阅读
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
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社区 版权所有