学习缘由
一方面可以通过笔记让我对NPL有关操作有更深的理解,另一方面也希望可以将自己学习过程中遇到的一些问题点出来,避免大家多次入坑,浪费宝贵时间!
工欲善其事必先利其器
- 掌握一门中文分词第三方库,我就用jieba分词为例。
- 具备基本的python开发能力,有同学问,何为基本能力呢呢? 呃呃呃。。基本语法总要会把!
- 会使用一个ide软件,这里使用的是pycharm.
- 红楼梦txt文本下载链接:链接:https://pan.baidu.com/s/1z8kXnZ30grA3PSCfHOIhgQ 提取码:natk
开始实验
- 打开pycharm,然后下载jieba第三方依赖库。
- 将要分词的文本导入进来,采用open内置函数,第二个参数表示只读,第三个参数表示编码为utf-8。
txt=open("《红楼梦》完整版.txt",“r”,encoding=“utf-8”)
- 采用jieba的lcut函数进行文本分词,注意:txt必须调用read方法,因为jieba需要的参数是一个字符串而不是一个文件
words=jieba.lcut(txt.read())
- 创建一个字典数据类型存储需要的内容
counts={}
- 对words字符串进行遍历,将词和词的数目通过字典形式展示出来注意:for循环内部必须进行缩进,不能和for处于同一列,可以按下tab键进行缩行
for word in words:
counts[word]=counts.get(word,0)+1 - 因为字典是无序的,我们想要的结果是按照词的多少从大到小进行排列,将字典转为列表,然后用lambad表达式排序。
item=list(counts.items())
item.sort(key=lambda x:x[1],reverse=True) - 现在我们已经将需要的都拿到了放在了item列表中,下面只需要将item中数据放在counts里面然后打印出来即可啦为了使得结果看的比较舒服,采用正则表达式,不太理解的可以去菜鸟教程上看下python3的相关教程。
for i in range(20):
print("{0:<10}{1:>5}".format(item[i][0],item[i][1]))
实验所有代码
import jieba
txt=open("《红楼梦》完整版.txt","r",encoding="utf-8")
words=jieba.lcut(txt.read())
counts={} #新建一个字典
for word in words:
counts[word]=counts.get(word,0)+1
item=list(counts.items())
item.sort(key=lambda x:x[1],reverse=True)
for i in range(20):
print("{0:<10}{1:>5}".format(item[i][0],item[i][1]))