码字不易,喜欢请点赞!!!
这篇文章主要分享了使用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()
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()
my_wordcloud.to_file(r"wordcloud1.png")