学习缘由

一方面可以通过笔记让我对NPL有关操作有更深的理解,另一方面也希望可以将自己学习过程中遇到的一些问题点出来,避免大家多次入坑,浪费宝贵时间!

工欲善其事必先利其器

  1. 掌握一门中文分词第三方库,我就用jieba分词为例。
  2. 具备基本的python开发能力,有同学问,何为基本能力呢呢? 呃呃呃。。基本语法总要会把!
  3. 会使用一个ide软件,这里使用的是pycharm.
  4. 红楼梦txt文本下载链接:链接:https://pan.baidu.com/s/1z8kXnZ30grA3PSCfHOIhgQ 提取码:natk

开始实验

  1. 打开pycharm,然后下载jieba第三方依赖库。
  2. 将要分词的文本导入进来,采用open内置函数,第二个参数表示只读,第三个参数表示编码为utf-8。
    txt=open("《红楼梦》完整版.txt",“r”,encoding=“utf-8”)
  3. 采用jieba的lcut函数进行文本分词,注意:txt必须调用read方法,因为jieba需要的参数是一个字符串而不是一个文件
    words=jieba.lcut(txt.read())
  4. 创建一个字典数据类型存储需要的内容
    counts={}
  5. 对words字符串进行遍历,将词和词的数目通过字典形式展示出来注意:for循环内部必须进行缩进,不能和for处于同一列,可以按下tab键进行缩行
    for word in words:
    counts[word]=counts.get(word,0)+1
  6. 因为字典是无序的,我们想要的结果是按照词的多少从大到小进行排列,将字典转为列表,然后用lambad表达式排序。
    item=list(counts.items())
    item.sort(key=lambda x:x[1],reverse=True)
  7. 现在我们已经将需要的都拿到了放在了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]))