電商購物評論的情感分析

NO IMAGE

隨著網上購物越來越流行,人們對於網上購物的需求變得越來越高,這讓京東,淘寶等電商平臺得到了很大的發展機遇。但是,這種需求也推動了更多的電商平臺的發展,引發了激烈的競爭。在這種電商平臺激烈競爭的大背景下,除了提高商品質量,壓低商品價格外,瞭解更多的消費者心聲對於電商平臺來說也越來越重要。其中非常重要的一種方式就是針對消費者的文本評論數據進行內在信息的數據挖掘分析。而得到這些信息,也有利於對應商品的生產自身競爭力的提高。

1.數據準備

#-*- coding: utf-8 -*-
import pandas as pd
inputfile = 'huizong.csv' #評論彙總文件
outputfile = 'meidi_jd.txt' #評論提取後保存路徑
data = pd.read_csv(inputfile, encoding = 'utf-8')
data.head()

電商購物評論的情感分析

獲取京東平臺數據中所有品牌名。

data['品牌'].unique()

結果:array([‘AO’, ‘海爾’, ‘美的’, ‘格蘭仕’, ‘萬和’, ‘萬家樂’], dtype=object)
我們發現這一份數據中有AO、海爾、美的、格蘭仕、萬和、萬家樂共6個品牌,我們這裡只對‘美的’品牌的文本評論數據進行分析。

# 這裡我們只提取”美的“品牌的評論
import os
import importlib
import sys
importlib.reload (sys)
# 默認編碼
sys.getdefaultencoding()  # 查看當前編碼格式
data = data[[u'評論']][data[u'品牌'] == u'美的']
# 把數據保存為csv文件
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8') 
outdata_1 = pd.read_csv(outputfile, encoding = 'utf-8', header = None)
outdata_1.head()

電商購物評論的情感分析

2.數據預處理

取到文本後,首先要進行文本評論數據的預處理,文本評論數據中存在大量價值含量很低甚至沒有價值含量的條目,如果將這些評論也引入進行分詞,詞頻統計,甚至情感分析,必然對分析造成很大的影響,得到的結果質量也必然存在問題。那麼,在利用這些評論數據之前就必須對這些文本進行預處理,把大量的此類無價值含量的評論去除。

2.1 文本評論去重

文本去重就是去除文本評論數據中重複的部分,一些電商平臺為了避免一些客戶長時間不進行評論,往往設置一道程序,如果用戶超過規定的時間仍然沒有做出評論,系統就會自動代替客戶做出評論,往往這些評論大都是好評。但是,這些評論顯然沒有任何分析價值,而且,這些評論是大量重複出現的,必須去除。

outputfile = 'meidi_jd_process_1.txt' #評論處理後保存路徑
l1 = len(outdata_1)
data_unique = pd.DataFrame(outdata_1[0].unique())
l2 = len(data_unique)
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
print(u'共%s條評論,刪除了%s條評論。' %(l1,l1 - l2))

結果:共55400條評論,刪除了2352條評論。
我們使用 value_counts 函數統計重複的評論,可以得到重複評論文本的重複數量,數量最大的評論文本可能是系統默認評論。

series_data = pd.Series(outdata_1[0])
fre_data = pd.DataFrame(series_data.value_counts())
fre_data.head(20)

電商購物評論的情感分析

這裡我們僅僅打印出來前20行,可以看出 “非常滿意,五星”出現頻率最高,一共出現 107 次,它應該是系統默認評論。而“長度在5-200個字之間 填寫您對此商品的使用心得,例如該商品或某功能為您帶來的幫助,或使用過程中遇到的問題等。最多可輸入200字”一共出現75次,是默認評論數第二大的,這應該也是系統提示評論或者用戶直接使用系統提示進行評論。

2.2 文本評論分詞

在中文中只有字,句和段落能夠通過明顯的分界符進行簡單的劃界,而對於”詞“與”詞組“來說,它們的邊界模糊,沒有一個形式上的分界符。因此,在進行中文文本挖掘時,首先對文本進行分詞,即將連續的字序列按照一定的規範進行重新組合成詞序列的過程。這裡我們使用 jieba 分詞器。

import jieba #導入結巴分詞,需要自行下載安裝
inputfile1 = 'meidi_jd_neg.txt'
inputfile2 = 'meidi_jd_pos.txt'
outputfile1 = 'meidi_jd_neg_cut.txt'
outputfile2 = 'meidi_jd_pos_cut.txt'
data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #讀入數據
data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)
mycut = lambda s: ' '.join(jieba.cut(s)) #自定義簡單分詞函數
data1 = data1[0].apply(mycut) #通過“廣播”形式分詞,加快速度。
data2 = data2[0].apply(mycut)
data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存結果
data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')
data1.head()

電商購物評論的情感分析

從結果看出,好像、還是、電池、沒有、電、熱水器、開關、安裝等詞,分詞效果還是不錯的,但是還有“上將”、“不  知道”等少許的詞語分析的稍有欠缺。綜上可以看出 jieba 分詞器分詞效果還是很好的,大部分都符合中文的使用習慣。

2.3 去除停用詞

停用詞(Stop Words) ,詞典譯為“電腦檢索中的虛字、非檢索用字”。在SEO中,為節省存儲空間和提高搜索效率,搜索引擎在索引頁面或處理搜索請求時會自動忽略某些字或詞,這些字或詞即被稱為Stop Words(停用詞)。在自然語言處理中,停用詞一般不攜帶有價值的信息,我們選擇去除掉這些詞。

import os
import sys
sys.getdefaultencoding()  # 查看當前編碼格式
import importlib
importlib.reload(sys)
stoplist = 'stoplist.txt'
neg = pd.read_csv(outputfile1, encoding = 'utf-8', header = None) #讀入數據
pos = pd.read_csv(outputfile2, encoding = 'utf-8', header = None)
stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, sep = 'tipdm')
#sep設置分割詞,由於csv默認以半角逗號為分割詞,而該詞恰好在停用詞表中,因此會導致讀取出錯
#所以解決辦法是手動設置一個不存在的分割詞,如tipdm。
stop = [' ', ''] + list(stop[0]) #Pandas自動過濾了空格符,這裡手動添加
neg[1] = neg[0].apply(lambda s: s.split(' ')) #定義一個分割函數,然後用apply廣播
neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐詞判斷是否停用詞
pos[1] = pos[0].apply(lambda s: s.split(' '))
pos[2] = pos[1].apply(lambda x: [i for i in x if i not in stop])
neg.head()

電商購物評論的情感分析

可以看出經過停用詞過濾後,之前的”是“、”的“等這些停用詞被去掉了。

 3. LDA 模型主題分析

主題模型在機器學習和自然語言處理等領域是用來在一系列文檔中發現抽象主題的一種的統計模型。對於一篇文檔,如果它有多個主題,則這些特定的可代表不同主題的詞語反覆出現,此時,運用主題模型,能夠發現文本中使用詞語的規律,並且規律相似的文本聯繫到一起,以尋求非結構化的文本集中的有用信息。LDA 模型作為其中的一種主題模型,屬於無監督的生成式主題概率模型。

# 沒有安裝 gensim ,可以試用 !pip install gensim 進行安裝
from gensim import corpora, models
#負面主題分析
neg_dict = corpora.Dictionary(neg[2]) #建立詞典
neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #建立語料庫
neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型訓練
#正面主題分析
pos_dict = corpora.Dictionary(pos[2])
pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word = pos_dict)
pos_theme = pos_lda.show_topics()#展示主題
pos_theme

電商購物評論的情感分析

上面顯示了對於正面評論的三個主題分析的高頻特徵詞。
下面我們把主題和高頻特徵詞變成 DataFrame 的格式以便查看,首先選用正則提取出高頻特徵詞。

import re
# 匹配中文字符
pattern = re.compile(r'[\u4e00-\u9fa5]+')
# 主題一的特徵詞
pattern.findall(pos_theme[0][1])

電商購物評論的情感分析

然後取得每個主題的特徵詞並轉換為 DataFrame 格式

# 取得每個主題的特徵詞
pos_key_words=[]
for i in range(3):
pos_key_words.append(pattern.findall(pos_theme[i][1]))
# 變成 DataFrame 格式
pos_key_words = pd.DataFrame(data=pos_key_words,index=['主題1',"主題2","主題3"])
pos_key_words

電商購物評論的情感分析

可以看出主題一主要關於熱水器的安裝、售後服務方面的,主題二主要關於熱水器的質量、價格、送貨方面的,主題三主要關於熱水器的安裝、加熱、保溫效果方面。綜上,將主題的特徵詞轉換為 DataFrame 格式非常清晰的瞭解每個主題的關鍵點以及評論的情感傾向。

4.總結

本文針對京東商城上“美的”品牌的熱水器的消費者的文本評論數據進行建模,在對文本進行基本的預處理、中文分詞、停用詞過濾後,通過建立 LDA 主題模型的數據挖掘模型,實現對文本評論數據的傾向性判斷以及將關於主題的高頻特徵詞以 DataFrame 格式呈現。
大家可以在項目源碼地址 fork 這個項目 momodel.cn/explore/5d3…
參考資料:
github.com/goto456/sto…
github.com/fxsjy/jieba


Mo(網址:momodel.cn)是一個支持 Python 的人工智能在線建模平臺,能幫助你快速開發、訓練並部署模型。


Mo 人工智能俱樂部 是由網站的研發與產品設計團隊發起、致力於降低人工智能開發與使用門檻的俱樂部。團隊具備大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具備從底層到前端的全線設計開發能力。主要研究方向為大數據管理分析與人工智能技術,並以此來促進數據驅動的科學研究。
目前俱樂部每週六在杭州舉辦以機器學習為主題的線下技術沙龍活動,不定期進行論文分享與學術交流。希望能匯聚來自各行各業對人工智能感興趣的朋友,不斷交流共同成長,推動人工智能民主化、應用普及化。

電商購物評論的情感分析

相關文章

深度神經網絡——中文語音識別

場景文本識別——基於圖像序列識別的端到端可訓練神經網絡模型

交通量預測——極端情況下的預測算法

使用Seq2Seq實現中英文翻譯