分类目录归档:中文分词

中文分词文章索引和分词数据资源分享

昨天在AINLP公众号上分享了乐雨泉同学的投稿文章:《分词那些事儿》,有同学留言表示"不过瘾",我想了想,其实我爱自然语言处理博客上已经积攒了不少中文分词的文章,除了基于深度学习的分词方法还没有探讨外,“古典”机器学习时代的中文分词方法都有涉及,从基于词典的中文分词(最大匹配法),到基于统计的分词方法(HMM、最大熵模型、条件随机场模型CRF),再到Mecab、NLTK中文分词,都有所涉及。回头看,这些文章最早的大概有10年了,现在看有些稚嫩,可能不适宜再放到公众号上推了,但是这里做个索引,感兴趣的同学可以在博客上阅读,基本上都是有代码可以参考的。

中文分词入门系列

rickjin老大的两篇日文翻译文档,很有帮助

其他同学在52nlp博客上分享的中文分词相关文章,感谢大家

最后关于中文分词的数据资源,多说两句,中文分词的研究时间比较长,方法比较多,从实际经验看,好的词库资源可能更重要一些,最后提供一份中文分词的相关资源,包括中文分词字标注法全文pdf文档,以及web上其他同学分享的词库资源,感兴趣的同学可以关注AINLP,回复“fenci"获取:

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

本文链接地址:中文分词文章索引和分词数据资源分享 http://www.52nlp.cn/?p=11408

Start your future on Coursera today.

Python自然语言处理工具NLTK学习导引及相关资料

NLTK 大概是最知名的Python自然语言处理工具了,全称"Natural Language Toolkit", 诞生于宾夕法尼亚大学,以研究和教学为目的而生,因此也特别适合入门学习。NLTK虽然主要面向英文,但是它的很多NLP模型或者模块是语言无关的,因此如果某种语言有了初步的Tokenization或者分词,NLTK的很多工具包是可以复用的。

关于NLTK,网上已经有了很多介绍资料,当然首推的NLTK学习资料依然是官方出的在线书籍 NLTK Book:Natural Language Processing with Python – Analyzing Text with the Natural Language Toolkit ,目前基于Python 3 和 NLTK 3 ,可以在线免费阅读和学习。早期的时候还有一个基于Python 2 的老版本:http://www.nltk.org/book_1ed/ ,被 O'Reilly 正式出版过,2012年的时候,国内的陈涛同学无偿翻译过一个中文版,我还在这里推荐过:推荐《用Python进行自然语言处理》中文翻译-NLTK配套书 ,后来才有了基于此版本的更正式的中文翻译版:《Python自然语言处理》。不过如果英文ok的话,优先推荐看目前官方的最新版本:http://www.nltk.org/book/

几年前我尝试写英文博客,觉得可以从NLTK的入门介绍开始,所以写了一个英文系列:Dive into NLTK,基于Python 2,感兴趣的同学可以关注:

Part I: Getting Started with NLTK
Part II: Sentence Tokenize and Word Tokenize
Part III: Part-Of-Speech Tagging and POS Tagger
Part IV: Stemming and Lemmatization
Part V: Using Stanford Text Analysis Tools in Python
Part VI: Add Stanford Word Segmenter Interface for Python NLTK
Part VII: A Preliminary Study on Text Classification
Part VIII: Using External Maximum Entropy Modeling Libraries for Text Classification
Part IX: From Text Classification to Sentiment Analysis
Part X: Play With Word2Vec Models based on NLTK Corpus
Part XI: From Word2Vec to WordNet

这个过程中使用了NLTK中嵌入的斯坦福大学文本分析工具包,发现少了斯坦福中文分词器,所以当时动手加了一个:Python自然语言处理实践: 在NLTK中使用斯坦福中文分词器

斯坦福大学自然语言处理组是世界知名的NLP研究小组,他们提供了一系列开源的Java文本分析工具,包括分词器(Word Segmenter),词性标注工具(Part-Of-Speech Tagger),命名实体识别工具(Named Entity Recognizer),句法分析器(Parser)等,可喜的事,他们还为这些工具训练了相应的中文模型,支持中文文本处理。在使用NLTK的过程中,发现当前版本的NLTK已经提供了相应的斯坦福文本处理工具接口,包括词性标注,命名实体识别和句法分析器的接口,不过可惜的是,没有提供分词器的接口。在google无果和阅读了相应的代码后,我决定照猫画虎为NLTK写一个斯坦福中文分词器接口,这样可以方便的在Python中调用斯坦福文本处理工具。

后来,这个版本在 NLTK 3.2 官方版本中被正式引入:stanford_segmenter.py ,我也可以小自豪一下为NLTK做过一点微小的贡献:

使用NLTK来处理中文是很多同学想干的事情,这方面,在NLTK中调用斯坦福大学的中文工具包刚好是一个切入点,关于NLTK中如何使用斯坦福大学工具包进行中文信息处理,推荐两篇文章:

在 NLTK 中使用 Stanford NLP 工具包http://www.zmonster.me/2016/06/08/use-stanford-nlp-package-in-nltk.html

以及白宁超同学的系列文章:

干货!详述Python NLTK下如何使用stanford NLP工具包http://www.cnblogs.com/baiboy/p/nltk1.html

关于NLTK的书籍,其实还有一本很不错:Python Text Processing with NLTK 2.0 Cookbook ,我之前看过这本,不过现在已经更新到Python 3了:Python 3 Text Processing with NLTK 3 Cookbook 。最后提供一个NLTK相关资料的打包下载,包括早期的中文翻译版和这个Cookbook,仅供个人学习使用,感兴趣的同学可以关注我们的公众号: AINLP, 回复'NLTK'获取相关下载链接:

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

本文链接地址:Python自然语言处理工具NLTK学习导引及相关资料 http://www.52nlp.cn/?p=11190

Start your future on Coursera today.

HMM学习最佳范例全文PDF文档及相关文章索引

HMM学习最佳范例系列大概翻译于10年前,是52nlp上早期访问量较高的一批文章,这里提供一个全文PDF下载,关注AINLP公众号,回复'HMM'获取网盘链接:

另外将博客上的隐马尔可夫模型相关文章做个索引,仅供参考:

HMM学习最佳范例

HMM相关文章

HMM应用

Start your future on Coursera today.

polyglot:Pipeline 多语言NLP工具

知道创宇IA-Lab 岳永鹏

目前,在NLP任务处理中,Python支持英文处理的开源包有NLTK、Scapy、StanfordCoreNLP、GATE、OPenNLP,支持中文处理的开源工具包有Jieba、ICTCLAS、THU LAC、HIT LTP,但是这些工具大部分仅对特定类型的语言提供支持。本文将介绍功能强大的支持Pipeline方式的多语言处理Python工具包:polyglot。该项目最早是由AboSamoor在2015年3月16日在GitHub上开源的项目,已经在Github收集star 1021个。

特征

  • 语言检测 Language Detection (支持196种语言)
  • 分句、分词 Tokenization (支持165种语言)
  • 实体识别 Named Entity Recognition (支持40种语言)
  • 词性标注 Part of Speech Tagging(支持16种语言)
  • 情感分析 Sentiment(支持136种语言)
  • 词嵌入 Word Embeddings(支持137种语言)
  • 翻译 Transliteration(支持69种语言)
  • 管道 Pipelines

继续阅读

Start your future on Coursera today.

推荐NLPIR大数据语义智能分析平台

NLPIR大数据语义智能分析平台由北京理工大学大数据搜索与挖掘实验室( Big Data Search and Mining Lab.BDSM@BIT)张华平博士主导,最近上线了新版,这里做个推荐。张华平博士最广为人知的产品是ICTCLAS中文分词平台,相信这更有助于大家了解NLPIR大数据语义智能分析平台,以下摘自“NLPIR大数据语义智能分析平台新版上线”。

NLPIR大数据语义智能分析平台针对大数据内容采编挖搜的综合需求,融合了网络精准采集、自然语言理解、文本挖掘和语义搜索的最新研究成果,先后历时十八年,服务了全球四十万家机构用户,是大数据时代语义智能分析的一大利器。

NLPIR大数据语义智能挖掘平台,针对大数据内容处理的需要,融合了网络精准采集、自然语言理解、文本挖掘和网络搜索的技术,提供了客户端工具、云服务、二次开发接口。开发平台由多个中间件组成,各个中间件API可以无缝地融合到客户的各类复杂应用系统之中,可兼容Windows,Linux,Android,Maemo5, FreeBSD等不同操作系统平台,可以供Java,C,C#等各类开发语言使用。

NLPIR大数据语义智能分析平台十三大功能:

1、精准采集:对境内外互联网海量信息实时精准采集,有主题采集(按照信息需求的主题采集)与站点采集两种模式(给定网址列表的站内定点采集功能)。

2、文档抽取:对doc、excel、pdf与ppt等多种主流文档格式,进行文本信息抽取,信息抽取准确,效率达到大数据处理的要求。

3、新词发现:从文本中挖掘出新词、新概念,用户可以用于专业词典的编撰,还可以进一步编辑标注,导入分词词典中,提高分词系统的准确度,并适应新的语言变化。

4、批量分词:对原始语料进行分词,自动识别人名地名机构名等未登录词,新词标注以及词性标注。并可在分析过程中,导入用户定义的词典。

5、语言统计:针对切分标注结果,系统可以自动地进行一元词频统计、二元词语转移概率统计。针对常用的术语,会自动给出相应的英文解释。

6、文本聚类:能够从大规模数据中自动分析出热点事件,并提供事件话题的关键特征描述。同时适用于长文本和短信、微博等短文本的热点分析。

7、文本分类:根据规则或训练的方法对大量文本进行分类,可用于新闻分类、简历分类、邮件分类、办公文档分类、区域分类等诸多方面。

8、摘要实体:对单篇或多篇文章,自动提炼出内容摘要,抽取人名、地名、机构名、时间及主题关键词;方便用户快速浏览文本内容。

9、智能过滤:对文本内容的语义智能过滤审查,内置国内最全词库,智能识别多种变种:形变、音变、繁简等多种变形,语义精准排歧。

10、情感分析:针对事先指定的分析对象,系统自动分析海量文档的情感倾向:情感极性及情感值测量,并在原文中给出正负面的得分和句子样例。

11、文档去重:快速准确地判断文件集合或数据库中是否存在相同或相似内容的记录,同时找出所有的重复记录。

12、全文检索:支持文本、数字、日期、字符串等各种数据类型,多字段的高效搜索,支持AND/OR/NOT以及NEAR邻近等查询语法,支持维语、藏语、蒙语、阿拉伯、韩语等多种少数民族语言的检索。

13、编码转换:自动识别内容的编码,并把编码统一转换为其他编码。

欢迎大家下载使用。

NLPIR大数据语义智能分析平台白皮书:

http://www.nlpir.org/NLPIR-Parser-WhitePaper.pdf (约3MB)

NLPIR大数据语义智能分析平台:

http://www.nlpir.org/NLPIR-Parser.zip (约160MB)

Start your future on Coursera today.

Mecab安装过程中的一些坑

先说一点题外话,最近发现 Linode 因为庆祝13周年活动将所有的Plan加了一倍,又来了一次加量不加价,这一下子和别的产品拉开了差距,可惜目前Linode日本节点并不参加活动,否则52nlp目前所用的这台 Linode 主机性能就可以翻倍了。不过还是搞了一台 Linode 8GB(8G内存,4核,96G SSD硬盘容量) 的VPS套餐(40$/mo),选择了美国西部的 Fremont 节点,据说国内连接速度很不错。在上面选择了64位的Ubuntu14.04 版本,但是在这个环境下安装Mecab的过程中接连踩了几个坑,所以记录一下。

==============================================================================
Update: 2017.03.21

近期又试了一下Ubuntu上基于apt-get的安装方式,非常方便,如果不想踩下面源代码编译安装的坑,推荐这种方式,参考自:https://gist.github.com/YoshihitoAso/9048005

$ sudo apt-get install mecab libmecab-dev mecab-ipadic
$ sudo apt-get install mecab-ipadic-utf8
$ sudo apt-get install python-mecab

注意其中mecab-ipadic 和 mecab-ipadic-utf8 是日文词典和模型,可以选择安装或者不安装,基于需求而定。剩下的用法和之前的一样,选定一个中文词典和模型,使用即可。

==============================================================================

这里曾写过“Mecab中文分词”系列文章,也在github上发布过一个中文分词项目 MeCab-Chinese:Chinese morphological analysis with Word Segment and POS Tagging data for MeCab ,但是这个过程中没有怎么写到Mecab安装的问题,因为之前觉得rickjin的这篇《日文分词器 Mecab 文档》应该足够参考,自己当时也在Mac OS和Ubuntu环境下安装成功并测试,印象貌似不是太复杂。这次在Ubuntu 14.04的环境安装的时候,遇到了几个小坑,记录一下,做个备忘,仅供参考。
继续阅读

Start your future on Coursera today.

用MeCab打造一套实用的中文分词系统(四):MeCab增量更新

最近在处理NLPJob的一些数据,发现之前训练的Mecab中文分词工具包还有一些问题,所以想到了为NLPJob定制一个MeCab中文分词器,最简单的方法就是整理一批相关的词条,可以通过词条追加的方法加到原有的Mecab中文分词词典中去,这个可以参考《日文分词器Mecab文档》中介绍的“词条追加”方法,既可以放到系统词典中,也可以放到用户词典中,很方便。不过这个还不是最佳方案,之前有用户在《用MeCab打造一套实用的中文分词系统》中留言:

你好, 我在win7上训练的时候mecab-cost-train的时候会崩溃,请问下我能每次只训练一小部分,然后最后一起发布嘛?

google了一下,发现MeCab的作者Taku Kudo在google plus上给了一个增量更新的方案:

https://plus.google.com/107334123935896432800/posts/3g83gkBoSYE

当然这篇文章是用日文写得,不过如果熟悉Mecab的相关脚本,很容易看懂。增量更新除了可以解决在小内存机器上分批训练模型外,也可以很容易在一个已有的基准分词模型上定制特定领域的分词器,既更新词典,也更新模型,这才是我理想中NLPJob中文分词器的定制之路。
继续阅读

Start your future on Coursera today.

用MeCab打造一套实用的中文分词系统(三):MeCab-Chinese

我在Github上发布了一个MeCab中文分词项目: MeCab-Chinese , 目的是提供一个用于中文分词和词性标注的MeCab词典和模型数据,类似MeCab日文IPA词典(mecab-ipadic),并且提供一些我自己用到的特征模板和脚本,方便大家从源头开始训练一个MeCab中文分词系统。

自从上次在愚人节的时候发布了一个mecab中文词典和数据模型之后(《用MeCab打造一套实用的中文分词系统(二)》), 收到了一些反馈,而这些反馈又促使我深入的review了一下mecab,重新设计特征及特征模板,加入了一些新的词典数据,重新训练模型,感兴趣的同学可以先试试这个0.2版本: mecab-chinesedic-binary (链接: http://pan.baidu.com/s/1gdxnvFX 密码: kq9g)
注:目前所有发布的版本均默认utf-8编码,并且在Mac OS和Linux Ubuntu下测试有效,windows没有测试,感兴趣的同学可自行测试)

了解和安装mecab仍请参考:
日文分词器 Mecab 文档
用MeCab打造一套实用的中文分词系统

这里再补充一点,由于google code废弃的缘故,MeCab这个项目已经搬迁至github,但是一些资源反而不如之前那么好找了,可参考两个MeCab作者维护的页面:
MeCab日文文档: http://taku910.github.io/mecab/
MeCab github 页面:https://github.com/taku910/mecab

MeCab目前最新的版本是2013-02-18更新的MeCab 0.996,我在Mac OS和Linux Ubuntu下用的是这个版本,在MeCab-Chinese下,做了一个备份,感兴趣的同学可以从这里下载: MeCab 0.996
继续阅读

Start your future on Coursera today.

用MeCab打造一套实用的中文分词系统(二)

虽然是愚人节,但是这个不是愚人节玩笑,最近花了一些时间在MeCab身上,越发喜欢这个来自岛国的开源分词系统,今天花了一些时间训练了一个更适用的模型和词典,打包提供给大家使用,因为数据和词典涉及到一些版权问题,所以打包文件里只是mecab用于发布的二进制词典和模型文件,目前在mac os和linux ubuntu系统下测试无误,其他系统请自行测试使用:

链接: http://pan.baidu.com/s/1sjBfdXr 密码: 8udf

了解和安装mecab请参考:
日文分词器 Mecab 文档
用MeCab打造一套实用的中文分词系统

使用前请按上述文档安装mecab,下载这个中文分词模型和词典之后解压,解压后得到一个mecab-chinese-data目录,执行:

mecab -d mecab-chinese-data
扬帆远东做与中国合作的先行
扬帆 v,*,*,*,*,*,扬帆,*,*
远东 ns,*,*,*,*,*,远东,*,*
做 v,*,*,*,*,*,做,*,*
与 p,*,*,*,*,*,与,*,*
中国 ns,*,*,*,*,*,中国,*,*
合作 v,*,*,*,*,*,合作,*,*
的 u,*,*,*,*,*,的,*,*
先行 vn,*,*,*,*,*,先行,*,*
EOS

上述第二列提供了词性标注结果。

如果想得到单行的分词结果,可以这样执行:

mecab -d ./mecab-chinese-data/ -O wakati
扬帆远东做与中国合作的先行
扬帆 远东 做 与 中国 合作 的 先行

如果想直接对文件分词,可以这样执行:

mecab -d ./mecab-chinese-data/ INPUT -o OUTPUT

具体可以参考上述两个文档,另外我在mac下测试了一下中文维基百科语料的切分速度,大概700多M的语料,不到90秒切分完毕,大概7M/s的切分速度完全达到了工业届的使用标准。另外Mecab还支持Nbest输出,多种输出格式,全切分模式,系统词典和用户词典定制等等,同时通过SWIG提供了perl, ruby, python, java的调用接口,非常方便。

以下是在backoff2005 人民日报语料库上的测试结果:

=== SUMMARY:
=== TOTAL INSERTIONS: 3803
=== TOTAL DELETIONS: 1981
=== TOTAL SUBSTITUTIONS: 5004
=== TOTAL NCHANGE: 10788
=== TOTAL TRUE WORD COUNT: 104372
=== TOTAL TEST WORD COUNT: 106194
=== TOTAL TRUE WORDS RECALL: 0.933
=== TOTAL TEST WORDS PRECISION: 0.917
=== F MEASURE: 0.925
=== OOV Rate: 0.058
=== OOV Recall Rate: 0.482
=== IV Recall Rate: 0.961
### pku_test.result 3803 1981 5004 10788 104372 106194 0.933 0.917 0.925 0.058 0.482 0.961

召回率93.3%,准确率91.7%, F值为92.5%, 虽然还没有一个单纯针对这个测试语料比赛的分词结果好,但是测试了一些其他语料后觉得这个版本完全可以作为一个基准版本使用,另外mecab也提供了用户定制词典接口,方便用户按自己的需求定制使用。

最后提供一个demo仅供测试使用: 中文分词Demo

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:http://www.52nlp.cn/用mecab打造一套实用的中文分词系统二

Start your future on Coursera today.

HMM相关文章索引

HMM系列文章是52nlp上访问量较高的一批文章,这里做个索引,方便大家参考。

HMM学习

  • HMM学习最佳范例一:介绍
  • HMM学习最佳范例二:生成模式
  • HMM学习最佳范例三:隐藏模式
  • HMM学习最佳范例四:隐马尔科夫模型
  • HMM学习最佳范例五:前向算法
  • HMM学习最佳范例六:维特比算法
  • HMM学习最佳范例七:前向-后向算法
  • HMM学习最佳范例八:总结
  • HMM学习最佳范例全文文档PDF百度网盘-密码f7az
  • HMM相关

  • wiki上一个比较好的HMM例子
  • 几种不同程序语言的HMM版本
  • HMM应用

  • HMM词性标注
  • HMM中文分词
  • Start your future on Coursera today.