Advertisement

Pyhton生成《百年孤独》高频词词云

阅读量:

对于热爱的书籍, 想深入探究其中蕴含的思想与文化内涵。借助于Python的jieba库与wordcloud库, 即可完成对书籍中高频词语识别及生成词云的过程。尝试了两本书: 一本是经典之作《百年孤独》,另一本是我最近读完的一本书——《山茶文具店》。

  • 库准备

获取相应Python版本及其操作系统对应的安装包;正确安装这两个库;可参考博文

可查阅wordcloud项目的官方网站,并参考这篇中文博客文章

jieba的GitHub简介及其应用实例,详细介绍了基本功能及其应用实例,并列举了典型用例进行深入分析。

  • Input输入文件准备

在生成词云时,请确保准备好下文中的红色标注文本文件(运行本文代码后会自动生成绿色标记文档)。

  1. 小说文本——范晔版百度网盘
  2. 停用词——网络下载指路
  3. 词云字体——使用本机微软字体(C:\Windows\Fonts)
  4. 词云轮廓mask——在线制作工具(选择白背景jpeg格式保存)
  5. 自定义词典(使人名等专有名词不拆分),下附:
复制代码
 梅尔基亚德斯

    
 何塞·阿尔卡蒂奥·布恩迪亚
    
 乌尔苏拉
    
 何塞·阿尔卡蒂奥
    
 奥雷里亚诺·布恩迪亚
    
 阿玛兰妲
    
 丽贝卡
    
 阿尔卡蒂奥
    
 奥雷里亚诺·何塞
    
 奥雷里亚诺·特里斯特
    
 蕾梅黛丝
    
 何塞·阿尔卡蒂奥第二
    
 奥雷里亚诺第二
    
 何塞·阿尔卡蒂奥
    
 雷纳塔·蕾梅黛丝
    
 阿玛兰妲·乌尔苏拉
    
 奥雷里亚诺·巴比洛尼亚
    
 奥雷里亚诺
    
 皮埃特罗·克雷斯皮
    
 费尔南达
    
 赫里内勒多·马尔克斯
    
 马格尼菲科·比斯巴勒
    
 堂阿波利纳尔·摩斯科特
    
 奥雷里托
    
 皮埃特罗·克雷斯皮
    
 佩特拉·科特斯
    
 庇拉尔·特尔内拉
    
 桑塔索菲亚·德拉·彼达
  • 代码实现
复制代码
 #-*- coding: utf-8 -*-

    
 #.py文件名不能和引用的库名重复
    
 """
    
 Created on Sun Mar  8 11:01:44 2020
    
   6. @author: toto
    
 """
    
  
    
 import os,jieba
    
  
    
 from wordcloud import WordCloud
    
 from PIL import Image
    
 import numpy as np
    
  
    
 cwd = os.getcwd()#当前工作路径
    
  
    
 #os.path.join(cwd,文件名)== 文件名
    
 jieba.load_userdict("UserDict.txt")#加载自定义词典文本
    
  
    
 book = "Solitude.txt"#处理的书籍文本,注意检查不要乱码
    
 stop_word = "stop_word.txt"#停用词文本
    
 top_word = "TopWord.txt"#高频词文本
    
  
    
 type_pic = "Marquez.jpeg"#白背景词云掩膜图片
    
 cloud = "Solitudecloud.png"#词云图
    
  
    
 ##——分词——
    
 #读取txt书籍文件
    
 fb = open(book,'r',encoding='UTF-8')
    
 book_txt = fb.read()
    
  
    
 #读取txt停用词文件
    
 ff = open(stop_word,'r',encoding='UTF-8')
    
 stop_word_txt = ff.read()
    
  
    
 #拆分词语存入列表
    
 #jieba.add_word("何塞·阿尔卡蒂奥·布恩迪亚")
    
 word_ls = jieba.lcut(book_txt,cut_all=False,HMM=True) # 精确模式
    
 #print(word_ls)
    
  
    
 ##——统计词频——
    
 word_dict = {}
    
  
    
 for i in word_ls:
    
     
    
     if i not in stop_word_txt:
    
     
    
     word_dict[i] = word_dict.get(i, 0) + 1
    
  
    
 #print(word_dict)
    
  
    
 word_ls = sorted(word_dict.items(), key=lambda x: x[1], reverse=True)#变成以(词语,次数)为元组的列表
    
 print(word_ls[0:101])
    
  
    
  
    
 #写入高频词文本
    
 #fw = open(top_word,"wt",encoding="utf-8")
    
 top_word = []
    
 for j in range(200):
    
     
    
     top_word.append(word_ls[j][0])
    
  
    
 top_word_txt = " ".join(top_word)     
    
     
    
 ##——生成词云——
    
 Marquez_mask = np.array(Image.open(type_pic))
    
 wordcloud_Solitude = WordCloud(
    
     background_color="white", 
    
     max_words=200,
    
     	# 添加遮罩层
    
     mask=Marquez_mask,
    
     # 生成中文字体
    
     font_path = os.path.join(cwd,"SIMKAI.TTF"),
    
     contour_width=3,
    
     min_font_size=2,
    
     #max_font_size=40,
    
     )
    
  
    
 wordcloud_Solitude.generate(top_word_txt)#注意函数参数是列表,不是txt文本
    
 wordcloud_Solitude.to_file(cloud)
    
  
    
  
    
 fb.close()
    
 ff.close()
    
 #拓展——jieba自定义词典正则表达式匹配(如何塞·阿尔卡蒂奥·布恩迪亚)
  • 生成图
  • 拓展

鉴于《百年孤独》中人物名字的独特性,在存在重名且带有特殊字符" · "的情况下(例如:如何分割·阿尔卡蒂奥·布恩迪亚),优化jieba字典源码以确保其正确识别不拆分此类名字,并构建自定义词典的标准正则表达式模式。

革命尚未成功,同志仍需努力!

全部评论 (0)

还没有任何评论哟~