电商产品评论数据情感分析代码详解
生活随笔
收集整理的這篇文章主要介紹了
电商产品评论数据情感分析代码详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本章代碼建議在linux下面運(yùn)行,windows下安裝gensim會(huì)比較麻煩。
我是在python3.5.2的pycharm下運(yùn)行的
下面代碼的意思是從評(píng)論數(shù)據(jù)中抽取品牌是美的的數(shù)據(jù)(15-1)
這里一句話概括接下來的去重概念,文本去重和機(jī)械壓縮去重
文本去重指的是數(shù)據(jù)條之間的去重。
機(jī)械壓縮去重指的是數(shù)據(jù)條內(nèi)部,詞語與詞語之間的去重。
下面代碼是用來文本去重的(15-2)。
#-*- coding: utf-8 -*- import pandas as pdinputfile = '../data/meidi_jd.txt' #評(píng)論文件 outputfile = '../data/meidi_jd_process_1.txt' #評(píng)論處理后保存路徑 data = pd.read_csv(inputfile, encoding = 'utf-8', header = None) l1 = len(data) data = pd.DataFrame(data[0].unique()) l2 = len(data) data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8') print(u'刪除了%s條評(píng)論。' %(l1 - l2))
下面代碼的作用是把評(píng)論前面的評(píng)分刪除(15-3):
#-*- coding: utf-8 -*- import pandas as pd#參數(shù)初始化 inputfile1 = '../data/meidi_jd_process_end_負(fù)面情感結(jié)果.txt' inputfile2 = '../data/meidi_jd_process_end_正面情感結(jié)果.txt' outputfile1 = '../data/meidi_jd_neg.txt' outputfile2 = '../data/meidi_jd_pos.txt'data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #讀入數(shù)據(jù) data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None) print("data1=",data1[0])data1 = pd.DataFrame(data1[0].str.replace('.*?\d+?\\t ', '')) #用正則表達(dá)式修改數(shù)據(jù) data2 = pd.DataFrame(data2[0].str.replace('.*?\d+?\\t ', ''))#這里的意思其實(shí)是用‘’(也就是代表什么都沒有)來代替前面的符合特征的字符串,等效于實(shí)現(xiàn)了刪除的功能 print("###############################") print("data1=",data1[0]) #以上正則表達(dá)式的效果,可以通過把正則篩選前后的data[0]分別輸出來進(jìn)行比較 data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存結(jié)果 data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')接下來是進(jìn)行分詞(詳細(xì)解釋請見代碼中注釋)(15-4)
#-*- coding: utf-8 -*- import pandas as pd import jieba #導(dǎo)入結(jié)巴分詞,需要自行下載安裝#參數(shù)初始化 inputfile1 = '../data/meidi_jd_neg.txt' inputfile2 = '../data/meidi_jd_pos.txt' outputfile1 = '../data/meidi_jd_neg_cut.txt' outputfile2 = '../data/meidi_jd_pos_cut.txt'data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #讀入數(shù)據(jù) data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)mycut = lambda s: ' '.join(jieba.cut(s)) #自定義簡單分詞函數(shù),先識(shí)別句子中的中文單詞,然后把中文單詞通過空格連接起來 #上面一句代碼中,s是入口參數(shù),.join前面的空格表示把jieba庫處理過后的s中的詞語jieba.cut(s),用空格來連接。 data1 = data1[0].apply(mycut) #通過“廣播”形式分詞,加快速度。 data2 = data2[0].apply(mycut)data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存結(jié)果 data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')
最后是LDA代碼(15-5)
#-*- coding: utf-8 -*- import pandas as pd#參數(shù)初始化 negfile = '../data/meidi_jd_neg_cut.txt' posfile = '../data/meidi_jd_pos_cut.txt' stoplist = '../data/stoplist.txt'neg = pd.read_csv(negfile, encoding = 'utf-8', header = None) #讀入數(shù)據(jù) pos = pd.read_csv(posfile, encoding = 'utf-8', header = None) stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, sep = 'tipdm',engine='python') #sep設(shè)置分割詞,由于csv默認(rèn)以半角逗號(hào)為分割詞,而該詞恰好在停用詞表中,因此會(huì)導(dǎo)致讀取出錯(cuò)(這里的出錯(cuò)的意思就是代碼運(yùn)行報(bào)錯(cuò),編譯器直接不讓編譯通過) #所以解決辦法是手動(dòng)設(shè)置一個(gè)不存在的分割詞,如tipdm。 #這里先解釋下什么是“停用詞”,停用詞指的是本文中出現(xiàn)頻率很高、但是實(shí)際意義不大的詞語,比如 #“今天好嗨森啊啊啊啊啊啊啊啊”,那么這句話中的“啊啊啊啊啊啊啊啊”就是停用詞 #講通俗點(diǎn)的話,停用詞就是“廢話”。 。stop = [' ', ''] + list(stop[0]) #Pandas自動(dòng)過濾了空格符,這里手動(dòng)添加(在每條數(shù)據(jù)的開頭加個(gè)空格)#下面這段代碼可以分為兩小段,這兩小段代碼幾乎一致,前面一個(gè)是針對負(fù)面評(píng)論,后一個(gè)是針對正面評(píng)論,所以只詳解其中一個(gè) neg[1] = neg[0].apply(lambda s: s.split(' ')) #定義一個(gè)分割函數(shù),然后用apply廣播 neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐詞判斷是否停用詞,思路同上 #上面這句代碼的語法是:列表推導(dǎo)式子。意思是說,如果i不在停用詞列表(stop)中,就保留該詞語(也就是最前面的一個(gè)i),否則就進(jìn)行刪除 #上面的這句代碼中,把for i in x看做整體,把if i not in stop看做判斷語句,把最前面的i看做滿足if語句之后的執(zhí)行語句即可。 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])#上面的lamda s和lamda x中的s和x都是表示入口參數(shù),apply的意思是,把a(bǔ)pply前面的字符串當(dāng)做入口參數(shù),輸入到appy后面所定義的函數(shù)中from gensim import corpora, models#負(fù)面主題分析 #這段代碼和下面的“正面主題分析”幾乎是完全一樣的,作用講得通俗點(diǎn)其實(shí)就是聚類。 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模型訓(xùn)練 for i in range(3):neg_lda.print_topic(i) #輸出每個(gè)主題(這個(gè)其實(shí)就是聚類結(jié)果的輸出)#正面主題分析 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) for i in range(3):neg_lda.print_topic(i) #輸出每個(gè)主題
通俗解釋下LDA算法干嘛的,我們知道:
K-means是聚類的,他主要是處理數(shù)據(jù)的,對數(shù)據(jù)進(jìn)行聚類。
LDA其實(shí)也是聚類的,主要是處理字符串的,對字符串進(jìn)行聚類。
總結(jié)
以上是生活随笔為你收集整理的电商产品评论数据情感分析代码详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于基站定位数据的商圈分析代码详细解释
- 下一篇: python绘制神经网络(转载)