碼字不易,喜歡請(qǐng)點(diǎn)贊!!!
這篇文章主要分享了使用Python來對(duì)文本數(shù)據(jù)進(jìn)行情感分析以及繪制詞云。
主要步驟包括:
1.文本預(yù)處理
2.文本分詞
3.去除停用詞(這里設(shè)置為單個(gè)詞和一些常見的停用詞)
4.詞頻統(tǒng)計(jì)
5.情感分析
6.繪制詞云
首先導(dǎo)入所需的程序辦和文本數(shù)據(jù):
#帶入程序包
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
#讀取數(shù)據(jù)
path = r"data.txt"
with open(path) as f:
data = f.read()
1.使用正則表達(dá)式對(duì)文本數(shù)據(jù)進(jìn)行預(yù)處理,這里主要去除數(shù)據(jù)的一些沒用的符號(hào)
# 文本預(yù)處理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')
data = re.sub(pattern, '', data)
2.使用精準(zhǔn)模式對(duì)文本進(jìn)行分詞
# 文本分詞--精確模式分詞
seg_list_exact = jieba.cut(data,cut_all = False)
3.去除停用詞,這里主要去除了一些常見的停用詞和單個(gè)詞
object_list = []
# 自定義常見去除詞庫
remove_words = [u'的', u',',u'和', u'是', u'隨著', u'對(duì)于', u'對(duì)',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)
#去除單個(gè)詞
for i in range(len(object_list)-1,-1,-1):
if(len(object_list[i])<2):
object_list.pop(i)
4.詞頻統(tǒng)計(jì),并輸出出現(xiàn)次數(shù)最高的100個(gè)詞
# 對(duì)分詞做詞頻統(tǒng)計(jì)
word_counts = collections.Counter(object_list)
# 獲取前100最高頻的詞
word_counts_top100 = word_counts.most_common(100)
print(word_counts_top100)
5.情感分析,這里展示一下簡單的文本情感分析,一般文本情感分析會(huì)統(tǒng)計(jì)文本中的積極詞和消極詞次數(shù),然后最簡單的方法就是文本中積極詞量化為1,消極詞量化為-1,然后給定權(quán)重來計(jì)算文本的情感,這里展示統(tǒng)計(jì)文本中積極詞和消極詞方法。
#讀取積極、消極詞庫
negPath = r"ntusd-negative.txt"
posPath = r"ntusd-positive.txt"
pos = open(posPath, encoding='utf-8').readlines()
neg = open(negPath, encoding='utf-8').readlines()
#統(tǒng)計(jì)積極、消極詞
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.繪制詞云,展示結(jié)果,這里直接使用的是默認(rèn)圖片,如果想改變圖片的樣式,可以通過給定Image參數(shù)。
#繪制詞云
my_wordcloud = WordCloud(
background_color='white', # 設(shè)置背景顏色
# mask=img, # 背景圖片
max_words=200, # 設(shè)置最大顯示的詞數(shù)
stopwords=STOPWORDS, # 設(shè)置停用詞
# 設(shè)置字體格式,字體格式 .ttf文件需自己網(wǎng)上下載,最好將名字改為英文,中文名路徑加載可能會(huì)出現(xiàn)問題。
font_path='simhei.ttf',
max_font_size=100, # 設(shè)置字體最大值
random_state=50, # 設(shè)置隨機(jī)生成狀態(tài),即多少種配色方案
##提高清晰度
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', # 設(shè)置背景顏色
mask=img, # 背景圖片
max_words=200, # 設(shè)置最大顯示的詞數(shù)
stopwords=STOPWORDS, # 設(shè)置停用詞
# 設(shè)置字體格式,字體格式 .ttf文件需自己網(wǎng)上下載,最好將名字改為英文,中文名路徑加載可能會(huì)出現(xiàn)問題。
font_path='simhei.ttf',
max_font_size=100, # 設(shè)置字體最大值
random_state=50, # 設(shè)置隨機(jī)生成狀態(tài),即多少種配色方案
##提高清晰度
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")
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
