Python+jieba+wordcloud實現文本分詞、詞頻統計、條形圖繪制及不同主題的詞云圖繪制

目錄

  • 序言:第三方庫及所需材料
  • 函數模塊介紹
    • 分詞
    • 詞頻統計
    • 條形圖繪制
    • 詞云繪制
    • 主函數
  • 效果預覽
  • 全部代碼

序言:第三方庫及所需材料

編程語言:Python3.9。
編程環境:Anaconda3,Spyder5。
使用到的主要第三方庫:jieba-0.42.1,wordcloud-1.8.2.2,matplotlib-3.5.1。

  • 文本數據:txt格式,本文以2023年內蒙古自治區政府工作報告為例,命名為“2023.txt”。
  • 停用詞:“cn_stopwords.txt”,網絡下載
  • 字體文件:tff格式,本文使用方正粗黑宋簡體,命名為“fzch.tff”
  • 主題背景圖片:本文使用白底內蒙古自治區地圖,命名為“R-C.png”

以上文件置于py文件的同級目錄下,使用相對路徑讀取。

函數模塊介紹

具體的代碼可見全部代碼部分,這部分只介紹思路和相應的函數模塊

分詞

在主函數中讀取文本數據,調用分詞函數cutWord,使用jieba分詞庫和停用詞表對文本進行分詞操作,并返回詞語組成的列表。

def cutWord(text):     words=jieba.cut(text)stopwords = {}.fromkeys([ line.rstrip() for line in open('cn_stopwords.txt',encoding='utf-8') ])finalwords = []for word in words:if word not in stopwords:if (word != "。" and word != ",") :finalwords.append(word) return finalwords

詞頻統計

將詞語列表傳入詞頻統計函數countWord,去除單字詞和換行符后,統計各詞語出現的頻率,并返回各詞語的頻數列表。

def countWord(text):counts={}for word in text: if len(word) == 1 or word=='\n':#單個詞和換行符不計算在內continueelse:if word not in counts.keys():counts[word]=1else:counts[word]+=1return counts

條形圖繪制

將詞頻字典傳入高頻詞條形圖繪制函數drawBar,根據注釋傳入參數,選擇前RANGE項詞語和圖像橫豎

def drawBar(countdict,RANGE, heng):#函數來源于:https://blog.csdn.net/leokingszx/article/details/101456624,有改動#dicdata:字典的數據。#RANGE:截取顯示的字典的長度。#heng=0,代表條狀圖的柱子是豎直向上的。heng=1,代表柱子是橫向的。考慮到文字是從左到右的,讓柱子橫向排列更容易觀察坐標軸。by_value = sorted(countdict.items(),key = lambda item:item[1],reverse=True)print(by_value[:20])x = []y = []plt.figure(figsize=(9, 6))for d in by_value:x.append(d[0])y.append(d[1])if heng == 0:plt.bar(x[0:RANGE], y[0:RANGE])plt.show()return elif heng == 1:plt.barh(x[0:RANGE], y[0:RANGE])plt.show()return else:return "heng的值僅為0或1!"

詞云繪制

將詞語列表傳入詞云繪制函數drawWordCloud,繪制詞云圖。進一步地,將詞語列表傳入詞云繪制函數drawWordCloudwithMap,以內蒙古自治區地圖為背景繪制詞云圖。

def drawWordCloud(textList):wc = WordCloud(font_path ="fzch.ttf",background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()def drawWordCloudwithMap(textList):d = path.dirname(__file__)map_coloring = np.array(Image.open(path.join(d, "R-C.png")))  wc = WordCloud(font_path ="fzch.ttf",mask=map_coloring,background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()

主函數

if __name__ == "__main__":with open('2023.txt','r',encoding='utf-8') as f:text=f.read()#讀取文本cutText=cutWord(text)#jieba分詞countdict=countWord(cutText)#生成詞頻字典drawBar(countdict,10,0)#繪制詞語出現次數前10的豎向條形圖 drawBar(countdict,20,1)#繪制詞語出現次數前20的橫向條形圖        drawWordCloud(cutText)#繪制詞云圖drawWordCloudwithMap(cutText)#以地圖為背景繪制詞云圖

效果預覽

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

全部代碼

# -*- coding: utf-8 -*-
# @Time    : 2023/11/22
# @Author  : Ryo_Yuki
# @Software: Spyderimport jieba
import jieba.analyse
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from os import path
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標簽def cutWord(text):     words=jieba.cut(text)stopwords = {}.fromkeys([ line.rstrip() for line in open('cn_stopwords.txt',encoding='utf-8') ])finalwords = []for word in words:if word not in stopwords:if (word != "。" and word != ",") :finalwords.append(word) return finalwordsdef countWord(text):counts={}for word in text: if len(word) == 1 or word=='\n':#單個詞和換行符不計算在內continueelse:if word not in counts.keys():counts[word]=1else:counts[word]+=1return countsdef drawBar(countdict,RANGE, heng):#函數來源于:https://blog.csdn.net/leokingszx/article/details/101456624,有改動#dicdata:字典的數據。#RANGE:截取顯示的字典的長度。#heng=0,代表條狀圖的柱子是豎直向上的。heng=1,代表柱子是橫向的。考慮到文字是從左到右的,讓柱子橫向排列更容易觀察坐標軸。by_value = sorted(countdict.items(),key = lambda item:item[1],reverse=True)print(by_value[:20])x = []y = []plt.figure(figsize=(9, 6))for d in by_value:x.append(d[0])y.append(d[1])if heng == 0:plt.bar(x[0:RANGE], y[0:RANGE])plt.show()return elif heng == 1:plt.barh(x[0:RANGE], y[0:RANGE])plt.show()return else:return "heng的值僅為0或1!"def drawWordCloud(textList):wc = WordCloud(font_path ="fzch.ttf",background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()def drawWordCloudwithMap(textList):d = path.dirname(__file__)map_coloring = np.array(Image.open(path.join(d, "R-C.png")))  wc = WordCloud(font_path ="fzch.ttf",mask=map_coloring,background_color="white",width=1800,height=1200).fit_words(countdict)plt.figure(figsize=(18, 12))plt.imshow(wc)plt.axis("off")plt.show()#主函數
if __name__ == "__main__":with open('2023.txt','r',encoding='utf-8') as f:text=f.read()#讀取文本cutText=cutWord(text)#jieba分詞countdict=countWord(cutText)#生成詞頻字典drawBar(countdict,10,0)#繪制詞語出現次數前10的豎向條形圖 drawBar(countdict,20,1)#繪制詞語出現次數前20的橫向條形圖        drawWordCloud(cutText)#繪制詞云圖drawWordCloudwithMap(cutText)#以地圖為背景繪制詞云圖

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165057.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165057.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python之pyqt專欄1-環境搭建

#python pyqt# python:3.11.6 pycharm:PyCharm Community Edition 2023.2.5 pyqt6 python安裝 官網下載:Python Releases for Windows | Python.org pycharm社區版安裝 官網地址:Download PyCharm: Python IDE for Professional…

golang學習筆記——創建項目

創建項目 從Go 1.8開始,將GOPATH設置為環境變量不是必需的。如果我們沒有設置一個,Go使用默認的GOPATH為$HOME/go。可以使用go env查看環境變量信息。 創建項目 # 創建項目目錄 mkdir helloLog cd helloLog # 使用go mod初始化項目,生成go.mod文件 go…

TikTok shop印尼重啟電商征程:與當地平臺合作開啟新篇章!——站斧瀏覽器

經歷了一個半月的間隔,TikTok Shop成功重返印度尼西亞市場。據國際媒體報道,TikTok計劃通過與印尼本地電子商務平臺的合作,重啟其在該國的電商業務。 Temmy Satya Permana,印尼合作社和中小企業部的官員,證實了這一重…

【廣州華銳互動】VR線上課件制作軟件滿足數字化教學需求

隨著科技的不斷發展,虛擬現實(VR)技術在教學領域的應用逐漸成為趨勢。其中,廣州華銳互動開發的VR線上課件制作軟件更是備受關注。這種工具為教師提供了便捷的制作VR課件的手段,使得VR教學成為可能,極大地豐…

thinkphp6 不支持:redis錯誤

起因: 使用 redis 時候,thinkphp 報錯。 解決方法: 打開 php.ini 文件,增加 extensionphp_redis.dll 即可

Java架構師發展方向和歷程

目錄 1 導論2 架構師的三觀培養3 架構師的遇到的困難4 架構師職責5 架構師之路6 架構師的發展方向7 應用領域架構師8 業務架構師9 系統架構師和企業架構師10 技術路線和演進規劃11 一線大廠的技術生態拓張案例12 如何推進項目落地想學習架構師構建流程請跳轉:Java架構師系統架…

CUDA與GPU編程

文章目錄 CUDA與GPU編程1. 并行處理與GPU體系架構1.1 并行處理簡介1.1.1 串行處理與并行處理的區別1.1.2 并行處理的概念1.1.3 常見的并行處理 1.2 GPU并行處理1.2.1 GPU與CPU并行處理的異同1.2.2 CPU的優化方式1.2.3 GPU的特點 1.3 環境搭建 CUDA與GPU編程 1. 并行處理與GPU體…

城市管理實景三維:打造智慧城市的新引擎

城市管理實景三維:打造智慧城市的新引擎 在城市管理領域,實景三維技術正逐漸成為推動城市發展的新引擎。通過以精準的數字模型呈現城市真實場景,實景三維技術為城市決策提供了全新的思路和工具。從規劃設計到交通管理,從環境保護到…

嵌入式系統在工業自動化中的應用

嵌入式系統在工業自動化中的應用非常廣泛,它們通過集成控制和實時響應能力,實現了生產線的自動化、智能化和高效化。以下將詳細介紹嵌入式系統在工業自動化中的幾個重要應用領域,并提供一些示例代碼。 1. PLC(可編程邏輯控制器&a…

【開源】基于Vue和SpringBoot的學校熱點新聞推送系統

項目編號: S 047 ,文末獲取源碼。 \color{red}{項目編號:S047,文末獲取源碼。} 項目編號:S047,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 新聞類型模塊2.2 新聞檔案模塊2.3 新…

Python模塊之yaml:簡化配置與數據解析

更多Python學習內容:ipengtao.com YAML(YAML Aint Markup Language)是一種人類可讀的數據序列化格式,常用于配置文件和數據傳輸。在Python中,可以使用PyYAML模塊來處理YAML格式的數據。本文將深入介紹PyYAML的基礎用法…

力扣H指數——簡約做法

Problem: 274. H 指數 文章目錄 思路解題方法復雜度Code 思路 最后的結果一定不會超過下標個數。應為文章也要大于這個h,h超過了文章總數,就永遠不會存在這么多的文章滿足條件,所以只需要循環下標,那么最后的結果呢? 解…

AI質差小區優化效果評估

1. 下行流量/PRB利用率和貶損用戶的關系 通過分析長期貶損質差小區:下行PRB利用率/流量和小區平均每小時質差用戶數成正比例關系,即小區的貶損用戶會隨PRB利用率/流量的增長而增長。 2. 貶損用戶和流量走勢 年前平均每天流量平穩的情況下,通…

關于JS stack trace解決辦法

問題描述 npm run serve啟動前端項目時&#xff0c;控制臺輸出下圖一堆的文字&#xff0c;JS stack trace , 問題現象&#xff1a; JS stack trace Security context: 0000017B93ACFB61 <JS Object>1: init_scope_vars [0000017B93A04381 <undefined>:~3382] [p…

LightPicture - 企業/團隊圖床系統安裝搭建教程說明文檔

LightPicture - 企業/團隊圖床系統安裝搭建教程說明文檔 使用thinkphpvue開發&#xff0c;前后端分離&#xff1b;根據安裝教程安裝即可使用&#xff1b; 程序功能 ?支持第三方云儲存&#xff0c;本地、阿里云OSS、騰訊云COS、七牛云KODO、又拍云USS、華為云OBS等等 ?支持多…

60V/80V/90V降12V降5V 3A4A電流DCDC同步降壓芯片

60V/80V/90V降12V降5V 3A4A電流DCDC同步降壓芯片WD5105 一、概述 WD5105是一種高性能的DCDC同步降壓芯片&#xff0c;適用于將60V/80V/90V的電壓降至12V和5V&#xff0c;并可提供高達3A4A的電流。這款芯片具有高效率、低噪聲、高穩定性等優點&#xff0c;適用于各種需要高電壓…

如何在3dMax中實現創建對象時自動指定材質?

如何在3dMax中實現創建對象時自動指定材質&#xff1f; 我們在某些情況下是否希望為創建的對象指定默認材質呢&#xff1f;如果有這樣的需求請不用擔心&#xff0c;解決方案就在這里啦。它并不有多么復雜&#xff0c;但展示了如何使用NodeEventCallback在使用此回調系統的節點上…

北京數字孿生賦能工業制造,加速推進制造業數字化轉型

隨著新一代信息技術與實體經濟深度融合進程的加快&#xff0c;企業數字化轉型需求的提升&#xff0c;政策的持續支持&#xff0c;數字孿生將為工業制造、未來生活帶來無限的可能。在制造業數字化大變革時代&#xff0c;以5G、大數據、物聯網、人工智能等為代表的工業4.0&#x…

vue2-axios

下載axios 開發版本&#xff1a;axios.js 生產版本&#xff1a;axios.min.js 搭建服務器&#xff1a;json-server npm i -g json-serverjson-server --watch db.json&#xff08;啟動服務并讀取文件&#xff0c;db.json文件目錄下啟動&#xff09; json-server --watch db.j…

Redis-Redis高可用集群之水平擴展

Redis3.0以后的版本雖然有了集群功能&#xff0c;提供了比之前版本的哨兵模式更高的性能與可用性&#xff0c;但是集群的水平擴展卻比較麻煩&#xff0c;今天就來帶大家看看redis高可用集群如何做水平擴展&#xff0c;原始集群(見下圖)由6個節點組成&#xff0c;6個節點分布在三…