【Python】文本情感分析及绘制词云

系统 167 0

码字不易,喜欢请点赞!!!

这篇文章主要分享了使用Python来对文本数据进行情感分析以及绘制词云。
主要步骤包括:
1.文本预处理
2.文本分词
3.去除停用词(这里设置为单个词和一些常见的停用词)
4.词频统计
5.情感分析
6.绘制词云

首先导入所需的程序办和文本数据:

            
              #带入程序包
import pandas as pd
import re
import jieba
import collections
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
import matplotlib.pyplot as plt
from PIL import Image

#读取数据
path = r"data.txt"
with open(path) as f:
    data = f.read()

            
          

1.使用正则表达式对文本数据进行预处理,这里主要去除数据的一些没用的符号

            
              # 文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')
data = re.sub(pattern, '', data)

            
          

2.使用精准模式对文本进行分词

            
              # 文本分词--精确模式分词
seg_list_exact  = jieba.cut(data,cut_all = False)

            
          

3.去除停用词,这里主要去除了一些常见的停用词和单个词

            
              object_list = []
# 自定义常见去除词库
remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u'通常',u'如果',u'我们',u'需要'] 
for word in seg_list_exact:
    if word not in remove_words:
        object_list.append(word)

#去除单个词
for i in range(len(object_list)-1,-1,-1):
    if(len(object_list[i])<2):
        object_list.pop(i)

            
          

4.词频统计,并输出出现次数最高的100个词

            
               # 对分词做词频统计
word_counts = collections.Counter(object_list)
# 获取前100最高频的词
word_counts_top100 = word_counts.most_common(100) 
print(word_counts_top100) 

            
          

5.情感分析,这里展示一下简单的文本情感分析,一般文本情感分析会统计文本中的积极词和消极词次数,然后最简单的方法就是文本中积极词量化为1,消极词量化为-1,然后给定权重来计算文本的情感,这里展示统计文本中积极词和消极词方法。

            
              #读取积极、消极词库
negPath = r"ntusd-negative.txt"
posPath = r"ntusd-positive.txt"
pos = open(posPath, encoding='utf-8').readlines()
neg = open(negPath, encoding='utf-8').readlines()
#统计积极、消极词
for i in range(len(pos)):
    pos[i] = pos[i].replace('\n','').replace('\ufeff','')
for i in range(len(neg)):
    neg[i] = neg[i].replace('\n','').replace('\ufeff','')
posNum = negNum = 0
for i in range(len(object_list)):
    if(object_list[i] in pos):
        posNum = posNum + 1
    elif(object_list[i] in neg):
        negNum = negNum + 1
print('posNum:',posNum)
print('negNum:',negNum)

            
          

6.绘制词云,展示结果,这里直接使用的是默认图片,如果想改变图片的样式,可以通过给定Image参数。

            
              #绘制词云
my_wordcloud = WordCloud(
    background_color='white',  # 设置背景颜色
    # mask=img,  # 背景图片
    max_words=200,  # 设置最大显示的词数
    stopwords=STOPWORDS,  # 设置停用词
    # 设置字体格式,字体格式 .ttf文件需自己网上下载,最好将名字改为英文,中文名路径加载可能会出现问题。
    font_path='simhei.ttf',
    max_font_size=100,  # 设置字体最大值
    random_state=50,  # 设置随机生成状态,即多少种配色方案
    ##提高清晰度
    width=1000,height=600,
    min_font_size=20,
).generate_from_frequencies(word_counts)

# 显示生成的词云图片
plt.imshow(my_wordcloud)
plt.axis('off')
plt.show()

            
          

【Python】文本情感分析及绘制词云_第1张图片
自定义背景图:
【Python】文本情感分析及绘制词云_第2张图片

            
              img = plt.imread(r"C:\Users\vivalavida\Desktop\pp.jpg")
#绘制词云
my_wordcloud = WordCloud(
    background_color='white',  # 设置背景颜色
    mask=img,  # 背景图片
    max_words=200,  # 设置最大显示的词数
    stopwords=STOPWORDS,  # 设置停用词
    # 设置字体格式,字体格式 .ttf文件需自己网上下载,最好将名字改为英文,中文名路径加载可能会出现问题。
    font_path='simhei.ttf',
    max_font_size=100,  # 设置字体最大值
    random_state=50,  # 设置随机生成状态,即多少种配色方案
    ##提高清晰度
    width=1000,height=600,
    min_font_size=20,
).generate_from_frequencies(word_counts)

# 显示生成的词云图片

plt.imshow(my_wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()

            
          

结果:
【Python】文本情感分析及绘制词云_第3张图片
图片保存到本地:

            
              my_wordcloud.to_file(r"wordcloud1.png")

            
          

保存到本地之后图片质量热别高:
【Python】文本情感分析及绘制词云_第4张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论