中文情感分析 - SnowNLP
情感分析(Sentiment analysis,SA),又稱傾向性分析、意見抽取(Opinion extraction)、意見挖掘(Opinion mining)、情感挖掘(Sentiment mining)、主觀分析(Subjectivity analysis)
情感分析是對帶有情感色彩的主觀性文本進行分析、處理、歸納和推理的過程
情感分析的目的是為了找出說話者/作者在某些話題上或者針對一個文本兩極觀點的態度。這個態度或許是他或她的個人判斷或是評估,也許是他當時的情感狀態(就是說,作者在做出這個言論時的情緒狀態),或是作者有意向的情感交流(就是作者想要讀者所體驗的情緒)
文本情感分析的應用非常廣泛,如網絡輿情風險分析,信息預測等。如通過Twitter用戶情感預測股票走勢,電影票房、選舉結果等,均是將公眾情緒與社會事件對比,發現一致性,並用於預測
首先安裝SnowNLP中文情感分析庫:
pip install snownlp
SnowNLP(Simplified Chinese Text Processing),是一個python語言編寫的類庫,可以方便的處理中文文本內容,其開發受到了TextBlob的啟發
import pandas as pd import matplotlib.pyplot as plt from snownlp import SnowNLP
案例分析
- 數據載入
- 數據預處理
- 將所有數據打分
- 將分數合並會原表格
- 計算指標
df = pd.read_excel('data/飯店留言數據.xlsx')
# 截取一部分 columns(comments&date)
0 這輩子最愛吃的火鍋,一星期必吃一次啊!最近才知道他家還有免費雞蛋羹………………炒雞好吃炒雞嫩... 2017-05-14 16:00:00
1 第N次來了,還是喜歡?……<br><br>從還沒上A餐廳的樓梯開始,服務員已經在那迎賓了,然... 2017-05-10 16:00:00
2 大姨過生日,姐姐定的這家A餐廳的包間,服務真的是沒得說,A餐廳的服務也是讓我由衷的欣賞,很久... 2017-04-20 16:00:00
3 A餐廳的服務哪家店都一樣,體貼入微。這家店是我吃過的排隊最短的一家,當然也介於工作日且比較晚... 2017-04-25 16:00:00
4 因為下午要去天津站接人,然后我倩前幾天就說想吃A餐廳,然后正好這有,就來這吃了。<br>來的... 2017-05-21 16:00:00
5 A餐廳是我們的定點單位,單位大聚小聚都來這,所以享受VIP待遇,來了不用等位。這的菜品新鮮,... 2017-05-05 16:00:00
# 2
df.info()
# 3
def aaa(x):
return SnowNLP(x).sentiments
grade = df['comments'].apply(aaa)
grade # 科學計數法
# 4
df['grade'] = grade
df.head()
# 5
# 平均分
df.grade.mean()
# 中位數
df.grade.median()
# 快速分布
df.grade.describe()
基礎結論:中位數比平均值高很多,說明有少量異常低的評分拉低了均值
可視化
df2 = df[['date', 'grade']].set_index('date').sort_index()
# 看分數分布情況,直方圖最合適
df2.plot.hist()
df2.plot.kde()
plt.scatter(df2.index, df2['grade'])
plt.boxplot(
df['grade'], # 數據
showmeans = True, # 是否顯示平均值,默認不顯示
widths = 0.5, # 柱子寬度
vert = True, # 默認True縱向,False橫向
patch_artist = True, # 是否填充顏色
boxprops = {'facecolor':'#ffff00','color':'green'}, # 箱體樣式
)
plt.grid(linewidth=0.2)
#以分數排序,查看打分准確率、
結論
准確率比瞎猜高,但達不到人工打分准確率
SnowNLP庫的訓練基准數據是基於電商銷售產品訓練的,對飯店留言數據的打分准確率一般
做情感分析最好用戶自行實現(網站增加打分功能,用戶自行打分)
