中文分词算法python_简单的中文分词算法
想了解点中文文本处理的底层一些的知识,在网上查了下跟python有关的文本分析书记,意外发现一本新书。
书籍简介
本书是一本研究汉语自然语言处理方面的基础性、综合性书籍,涉及NLP的语言理论、算法和工程实践的方方面面,内容繁杂。
本书包括NLP的语言理论部分、算法部分、案例部分,涉及汉语的发展历史、传统的句法理论、认知语言学理论。需要指出的是,本书是系统介绍认知语言学和算法设计相结合的中文NLP书籍,并从认知语言学的视角重新认识和分析了NLP的句法和语义相结合的数据结构。这也是本书的创新之处。
本书适用于所有想学习NLP的技术人员,包括各大人工智能实验室、软件学院等专业机构。
分词
中文NLP比外文要难,难在第一步就是要将文本进行切词。我们知道中文常用字也就3500左右,但单个的字往往意义不多,对理解句子意思帮助不大。
而且中文词之间没有空格等标识符,这更增加了中文NLP的难度。
NLP第一步,就是从分词开始,目前市面上有ICTCLASS,jieba,HanNLP等,了解其分词算法,对更好的学习编程,使用编程语言处理文本数据大有裨益。汉语(其实也包括其他语言)有两大分词算法,最大匹配算法(MM)和隐马尔可夫算法(HMM)。
最大匹配分词算法
最大匹配分词算法比较简单,学起来一点也不烧脑筋。使用前提是有自己的领域词典。最早是由苏联汉俄翻译学者提出(文科生诶),简称MM(The Maximum Method),基本思想:
有一待处理字符串str1,假设已有词典中的最长词条字符长度为a,取被处理字符串(str1),从中截取出a长度的字符串记做str2,将str2与词典中词条一一匹配,如果词典中有str2,那么str2从str1中切分出来,作为一个词。
如果词典中没有str2,那么从str1中截取a-1长度的字符串记做str3,还是进行上面的匹配步骤,如果str3在词典中,str3作为一个词,反之,继续缩短字符串长度。
直到切分成功为止。即完成一轮匹配,并切出一词。
小案例
上面说的有点绕口,还是举个简单的例子看看。
例如,现有短语“计算机科学和工程”,假设词典中最长词为7,于是先取“计算机科学和工”为匹配字段,来匹配词典,由于词典中没有改词,故匹配失败;
去掉最后一个汉字成为“计算机科学和”作为新的匹配字段,重新匹配词典,同样匹配失败;
取“计算机科学”作为新字段,由于词典中有“计算机科学”一词,从而匹配成功,切出的第一个词为“计算机科学”。
以此类推,直至切分出第二、第三。。。个词
分析总结
使用MM方法切分精度不高,实际应用意义不大。随着语料的增多,误差也逐渐变大。
基于MM的搜索方法还存在局限性,比如正向最大匹配,因为只能正向的找出最长词,而不能找出所有的候选词条。因此,后来发展出了双向扫描法,从两方向对字符串进行匹配,以尽可能多的生成候选词条,增强分词效果。
但因为没有考虑词汇上下文相关性,分词精度还是不高。
基于正向最大匹配算法的分词器准确率为78%;
基于双向匹配算法最高精度也只在80%左右徘徊。显然这不能满足高精度文本处理需求
隐马尔可夫算法
基于MM算法分词器没有得到广泛的应用,但是却揭示了一个语言规律:一个词汇的出现往往与其上下文环境中出现的词汇序列存在者紧密联系。
所谓上下文相关性是指,文中第n个词的出现与其前后n-m到n+m个词有高度的相关性,而这个敢为之外的其他词相关性较低,我们把[-m,m]范围叫做窗口范围。
为了将分析简单化,我们只考虑单侧情况。文本中第n个词出现与其前面的i-n个词相关(0
将语言模型应用到中文分词中,效率和准确性大大提高。ICTCLASS就采用类似的算法,准确率已达到98%,从此,中文文本处理才变为可能。
更多内容
文本分析中文分词-jieba库知识大全
自然语言处理库之snowNLP
用gensim库做文本相似性分析
基于共现发现人物关系的python实现
用python计算两文档相似度
数据分析酷炫的matplotlib如何对csv文件中的文本数据进行分析处理
用词云图解读“于欢案”
神奇的python初识Python的GUI编程
Python实现文字转语音功能
怜香惜玉,我用python帮助办公室文秘
开扒皮自己微信的秘密
8行代码实现微信聊天机器人
使用Python登录QQ邮箱发送QQ邮件
爬虫爬虫实战视频专辑
抓取单博主的所有微博及其评论
【视频】手把手教你抓美女~
当爬虫遭遇验证码,怎么办
【视频】于欢案之网民的意见(1)?
【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”
【视频】快来get新技能--抓包+cookie,爬微博不再是梦
【视频教程】用python批量抓取简书用户信息
爬豆瓣电影名的小案例(附视频操作)
爬豆瓣电影名的小案例2(附视频操作)
用Python抓取百度地图里的店名,地址和联系方式
中文分词算法python_简单的中文分词算法相关推荐
- 十大经典排序算法python_十大经典排序算法的算法描述和代码实现
这里详细讲解了十大经典算法的分类,例如交换排序.插入排序.选择排序等比较类排序,以及计数排序.桶排序和基数排序的非比较类排序,分析了各种排序算法的复杂度和稳定性,还有JAVA代码的详细实现.对冒泡排序 ...
- 人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题
原标题:教程 | 用人工蜂群算法求解k-分区聚类问题 选自towarddatascience 作者:Pedro Buarque 参与:Pedro.刘晓坤 群体智能算法是一类受生物群体智能行为的启发而发 ...
- java实现约瑟夫环完整算法_Java简单实现约瑟夫环算法示例
Java简单实现约瑟夫环算法示例 发布时间:2020-10-01 14:19:56 来源:脚本之家 阅读:104 作者:perfect亮 本文实例讲述了Java简单实现约瑟夫环算法.分享给大家供大家参 ...
- 大数据算法python_闲谈大数据和算法
0x00 前言 本篇总结一下自己对大数据算法认知的过程.正文包含两部分:自己对算法的认知过程和对大数据算法的理解. 写这篇博客的原因有很多,总的来讲有下面几点: 自己在算法的路上一直懵懵懂懂,现在刚刚 ...
- php大数组查找算法,PHP简单的数组查找算法分享
PHP中对于数组的查找可以用顺序查找或二分法查找.其中顺序查找比较简单,就是逐个比较查找.但缺点也较明显,如果查找的元素恰巧在最后一个,循环的次数过多. 1.顺序查找算法描述 在数组中逐个查找,确认是 ...
- 人工蜂群算法python_改进的人工蜂群算法解决聚类问题(在Python中的分步实现)...
在 之前的文章 中,我介绍了如何通过实施名为Artificial Bee Colony(ABC)的群集智能(SI)算法来解决现实世界中的优化问题. 现在是时候让我们掌握一些真实的数据并解释我们如何使用 ...
- 社区发现算法 python_社区发现(Community Detection)算法(转)
作者: peghoty 社区发现(Community Detection)算法用来发现网络中的社区结构,也可以看做是一种聚类算法. 以下是我的一个 PPT 报告,分享给大家. 从上述定义可以看出:社区 ...
- 数学速算法_简单易学的速算法,贴墙上背,孩子次次数学100分!
速算也是心算,是指利用数与数之间的特殊关系进行较快的加减乘除运算,是数学方法中的一种!对孩子而言,算数是数学最基础的东西,我们常说基础要扎实,如果能在小时候得到一定的速算能力锻炼,对将来数学能力的提升 ...
- 第7-4课:最大匹配算法-最简单的中文分词算法
在自然语言识别领域中,中文的分词技术绝对是一个很有意思的话题,英文本身是以单词为基础,单词之间以空格隔开,不存在分词的问题,但是汉语有这个问题.关于分词有很多可玩的地方,比如之前很火的一个对对联的小程 ...
- 维特比算法 python_维特比算法 实现中文分词 python实现
最近我在学习自然语言处理,相信大家都知道NLP的第一步就是学分词,但分词≠自然语言处理.现如今分词工具及如何使用网上一大堆.我想和大家分享的是结巴分词核心内容,一起探究分词的本质. (1).基于前缀词 ...
最新文章
- tomcat生成catalina.out文件
- python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单
- 编译linux内核步骤
- pow函数gcc编译提示 undefined reference to `power' 的解决办法
- 字节一面,被连问 MySQL 索引,脸都问绿了。。。
- php 语句,php的控制语句
- 我的领域驱动设计运用实例 - 领域啊领域
- 实现深拷贝的几种方法
- How to manage the certificates in the PC
- linux centos7 安装zookeeper
- 模型视图控制器mvc
- 正则表达式的贪婪匹配与懒惰匹配
- dubbo 负载均衡中策略决策
- Oracle管理存储架构(二)--Oracle管理数据块空间
- Linux 2.6内核Makefile浅析
- 拓端tecdat|R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
- masquerade词根词缀_常用词根和词缀.doc
- 数字图像处理——广义图像增强
- VMware安装Linux教程
- 理解偏差(Bias)和方差(Variance)