12周课后T2 实现电影《八百》影评文本数据词云图,需剔除无效词汇(包含在停用词表 stopwords.txt中)

import pandas as pd
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud

plt.rcParams['font.family'] = 'Simhei' #中文正常显示
plt.rcParams['axes.unicode_minus'] = False #负号正常显示
plt.rcParams['font.size'] = 12 #调整全局字体大小
#读取数据
data = pd.read_csv('babai.csv',encoding = 'GBK')
#该文件编码为GBK 此处一定要指定该编码,否则pandas默认按utf-8编码识别,会有错误
data

#data内容显示

#读取停用词表 stopwords.txt
with open('stopwords.txt',encoding='gbk') as f:
    #这里也要指定编码为gbk,否则默认按utf-8会报错
    stopwords = f.readlines() #读取文件每行一个次
    
#显示stopwords内容
stopwords    

#stopwords的一部分内容显示

#删除每行末尾的换行符\na
stopwords = [x.strip()for x in stopwords]
stopwords

#删除换行符之后

#对于短评正文进行分词操作
s = ''.join(data['短评正文']) #将所有行的短评以空格为分隔,连接成一个字符串
dataCut = jieba.lcut(s) #分词
print('原始分词个数:',len(dataCut))
原始分词个数: 8217
#剔除长度为1的词(可能是标点符号)
dataCut2 = [w for w in dataCut if len(w) > 1]
#剔除停用词
dataAfter = [w for w in dataCut2 if w not in stopwords]

#组合写法
#dataAfter = [w for w in dataCut if(w not in stopwords) and (len(w) > 1)]
#统计词频,观察高频词汇
wordFre = pd.Series(dataAfter).value_counts()
print(wordFre)
电影     49
战争片    26
历史     23
管虎     22
导演     21
       ..
张艺谋     1
抱太大     1
注定      1
世界      1
冠军      1
Length: 1872, dtype: int64
#用心形图片作为词云的外形框架
mask = plt.imread('heart.jpg')
wc = WordCloud(background_color='white',width=1000,height=800,
              font_path='simfang.ttf',mask=mask)#中文词云一定要指定中文字体font_path

#将词汇列表连接为用空格分隔的字符串,以满足wordcloud的格式要求
s = ' '.join(dataAfter)
wc.generate(s) #生成词云图

#wc.to_file('12周课后T2词云图.png') #保存为图片

plt.figure(figsize=(10,8))#控制词云图显示的大小
plt.imshow(wc)#显示词云
plt.axis('off')#不显示坐标轴

#词云图效果显示

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值