【Python教程】可以将句子拆成字词的jieba模块

2022年6月13日 345点热度 0人点赞 0条评论

点击蓝字
关注我们

图片

关注公众号,后台回复“python资料”,获取python资料大礼包。

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

以前我们分析数据可能都是从数字开始,比如分析人口,分析经济,对文字的分析好像缺乏一些思路,因为语言这种东西实在是太复杂了。对于人工智能来说,如何理解人类语言目前仍然是一个重要的课题。但现在出现了非常多的语言分析工具,例如词频统计、词云图,它们有着共同的第一步,就是将段落拆分成句子,将句子拆分成词语。对于某些语言如英语来说,进行这样的拆分其实非常方便,学过python,会使用字符串的split方法就能够实现,毕竟英语中每两个词中间都是由空格分隔的。而对于中文来说就有些复杂了,每个句子里的字都是紧密连接的,该从哪里下刀是个问题。况且中文博大精深,很多时候怎么分隔都说得通,例如:

“我骑车差点摔倒,还好我一把把把把住了。”

图片

别说对于程序,就算是对于歪果仁也太难了点。这时候就需要一个很会的程序来对句子进行分割,那么今天就来向大家介绍一下在中文分词领域大名鼎鼎的jieba模块:

我们先来安装一下jieba模块,安装名和导入名都是jieba:

图片

然后编辑字符串,并调用lcut方法对其进行切割:

图片

图片

什么叫专业?这就叫专业!不同的词分割得清清楚楚。

需要注意的是,我们调用的是lcut方法,而不是cut方法,为什么呢?因为cut方法返回的是生成器,而并没有将句子进行分割。这个生成器每被调用一次就会切下来一个词,直到所有内容被切割完。相反lcut方法会在调用时就将所有的内容分割完并存入列表中。如果我们要分割很大的内容比如小说的话,直接调用lcut方法需要等上一段时间,而调用cut方法配合for循环能够更快地看到部分结果。

与此同时,jieba还支持词性标注。具体的实现需要使用jieba.posseg模块。模块导入之后我们只需要像jieba模块一样调用lcut方法就可以了:

图片

图片

可以看到返回的每个词都是一个pair对象,里边包含了词本身和词性。词性对照如下:

图片

毕竟中文太复杂了,分词已经不易,标注词性更是容易出错。在这句话中“骑车”被标成了名词,“差点”也被标成了名词,还是有改进的空间。

我们可以通过词的flag属性获取词性,word属性获取词,从而实现对词性的筛选:

图片

图片

那我们今天来完成一个小任务,来统计一下《水浒传》中各英雄的出场频率。我们可以使用open方法打开txt格式的小说,并用read方法将小说内容存入字符串:

图片

图片

随后我们进行分词,因为人名的标记为nr,所以我们直接筛选出词性为nr的词:

图片

图片

大体上不错,但是有些地方分割的不好,比如这个林冲谢,可能林冲看了真的会谢……

但毕竟不能苛责jieba,它也不知道水浒传里有哪些人物。所以我们要给它提供一个词典,表明这些名字是固定搭配。我们从百度百科上粘贴下来所有108将的天罡地煞、绰号和名字,并标记好它的词性,将其存入txt文件中,其中每个名字与词性以空格分隔,每个词条占一行:

图片

然后在我们代码的开始处使用load_userdict方法,读取我们自定义的字典文件:

图片

图片

有的地方好了些,有的地方还是有问题,不过水浒传毕竟是半文半白,不是现代汉语,出现一些问题还是难免的,我们后期再手动整理即可。

接下来我们要进行词频的统计,不计效率的可以直接写个for循环,将各个名字的频率统计到DataFrame中并排序,最后存到csv文件中:

图片

图片

这么一看哥哥果然人气爆棚,李逵和武松紧随其后。而且有很多同人不同称呼的没有被列到一起,如宋公明就和宋江分开了。还有一些是分词的错误,比如宋江道,如果是按照现代汉语改成宋江说的话应该不至于分错。不过整体来说还是有非常高的研究价值的。获得这些数据之后,我们稍加修饰,就可以生成非常好看的词云图了。那么制作词云图就涉及到了另一个模块,我们将在下一期为大家讲解。如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!

另外,【室长原理课】系列在不正经地科普一些互联网小知识,没有太多高深的内容,把这个系列分享给你的朋友吧!

【室长原理课】网上那么火的爬虫,到底是个什么东西?
【室长原理课】大几百买的路由器,究竟是用来干嘛的?

喜欢此内容的人还喜欢

主线教程系列:

【Python教程】铺天盖地的Python广告,点进去却发现门都入不了?


【Python教程】引言——程序是什么,又为什么是程序?


【Python教程】一、懒是人类进步的阶梯,编程则是懒上加懒|Python解释器


【Python教程】二、写一个代码有二百多个秘书伺候着,还愁写不出来好东西?Python的IDE


【Python教程】三、我把骆驼起名叫大象,也能把它装冰箱吗?程序的变量 


【Python教程】四、函数真的是含着树吗?程序的函数(一)


【Python教程】五、如果函数是一个工厂|程序的函数(二)


【Python教程】六、如果你给不了我想要的,我就报错给你看|数据类型


【Python教程】七、那么多如果,只剩下结果|if语句和bool值


【Python教程】八、码农一张嘴,程序跑断腿|for循环


【Python教程】九、只要学不死,就往死里学|while 循环和逻辑运算


【Python教程】十、站在巨人的光头上|初识Python模块


【Python教程】十一、泪流满面,下载再也不用度娘了|模块的下载与安装 


【Python教程】十二、小试牛刀,写一个给文件批量重命名的小程序名


【Python教程】十三、我连对象都找不到还让我用对象?类与对象(一)


【Python教程】十四、找不到对象?用Python自己写一个|类与对象(二)


【Python教程】十五、动物园举办联欢大会哪个动物没有来?类变量


【Python教程】十六、变量真的是变量名+变量值吗?变量的本质 


【Python教程】十七、在Python里搞克隆|浅拷贝与深拷贝 


【Python教程】十八、这根本就不是我的错嘛!Python的异常处理


【Python教程】十九、用Python写bug的你,遇到过哪些坑?Python的异常类型


【Python教程】二十、我竟然从全员大筛中领悟到了生成器的用法!迭代器和生成器


【Python教程】二十一、懒出天际!Python中的简洁语法


【Python教程】二十二——奇怪的符号增加了!Python的装饰器


【Python教程】二十三、原来是你!Python的魔法方法(一)


【Python教程】二十四、原来是你!Python的魔法方法(二)


番外系列

【Python番外】玩大了,一个解释器已经不够用了|Anaconda介绍


【Python番外】写代码宜工工整整,忌放飞自我|代码规范


【Python番外】坑太多了都不知道蹲哪个了|关键字参数和默认值 


【Python教程】列表原来是贪吃蛇?列表小技能


【Python教程】列表不是贪吃蛇,是贪吃蚯蚓?列表切片


【Python教程】羊肉串香还是字符串香?都香!字符串小技巧


【Python教程】小练习,写一个“谁在哪儿干什么”的小游戏


【Python教程】加强版列表?字典小技巧


【Python教程】Python中的时间处理——time模块


【Python教程】Python中的时间处理——datetime模块


【Python教程】把文字里的数据“抠”出来|正则表达式和re模块(一)


【Python教程】把文字里的数据“抠”出来|正则表达式和re模块(二)


【Python教程】把文字里的数据“抠”出来|正则表达式和re模块(三)


【Python教程】小练习,用Python解数独(一)


【Python教程】小练习,用Python解数独(二)


【Python教程】小练习,用Python解数独(三)


【Python教程】小练习,用Python解数独(完,内附代码)


【Python教程】随机一下!Python中的random模块

Pandas、Numpy系列:

【Python教程】有了它,excel彻底沦为工具人!初识pandas模块(一)


【Python教程】有了它,excel彻底沦为工具人!初识pandas模块(二)


【Python教程】正儿八经地认识一下pandas(一)


【Python教程】正儿八经地认识一下pandas(二)


【Python教程】正儿八经地认识一下pandas(三)


【Python教程】关于pandas,你还应该知道这些(一)


【Python教程】关于pandas,你还应该知道这些(二)


【Python教程】来认识认识Pandas的爹!初识NumPy模块(一)


【Python教程】来认识认识Pandas的爹!初识NumPy模块(二)


【Python教程】来认识认识Pandas的爹!初识NumPy模块(三)


【Python教程】小练习,使用Pandas记记账


【Python教程】关于pandas和numpy,你还应该知道这些(三)


【Python教程】关于pandas和numpy,你还应该知道这些(四)

Matplotlib系列:

【Python教程】pandas+matplotlib,数据作图从未如此简单! 


【Python教程】matplotlib中的绘图逻辑 


【Python教程】matplotlib中的画图区域


【Python教程】matplotlib的基础图表类型


【Python教程】matplotlib的图表元素


【Python教程】matplotlib中的通用参数:线型、标记类型和颜色


【Python教程】matplotlib的柱状图


【Python教程】matplotlib的饼图 


【Python教程】matplotlib的直方图

办公自动化系列有更新

90%的人不曾用过的Word技巧——邮件合并


【Python教程】用Python自动化生成Word文档


【Python教程】用Python自动化生成ppt(一)


【Python教程】用Python自动化生成ppt(二)


【Python教程】用Python自动化生成ppt(三)


【Python教程】用Python发电子邮件


批量处理照片,别再用PS了!用它速度快上十倍!


【Python教程】用Python发电子邮件(二)



左右滑动查看下一篇

图片

72300【Python教程】可以将句子拆成字词的jieba模块

这个人很懒,什么都没留下

文章评论