jieba对红楼梦进行分词(一)

学习缘由

  这个学期开了一门课程叫自然语言处理(NLP),这是第一缘由,通过学习,慢慢的发现python的第三方库的强大之处,所以对这门课程学习比较认真,对很多次实验都进行了实践,期间也遇到了不少问题,因为以前都是搞JAVA的,所以遇到问题到解决问题还是花了点时间的,所以想将这个思考过程写出来,一方面可以通过笔记让我对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]))

你可能感兴趣的:(python,NLP)