DOI:10.19850/j.cnki.2096-4706.2021.08.005
摘? 要:在網(wǎng)絡(luò)技術(shù)高速發(fā)展的背景下,信息紛亂繁雜,如何能夠獲得需要的文本信息,成了許多企業(yè)或組織關(guān)注的問題。該項目以采集的豆瓣電影評論數(shù)據(jù)為例,使用Python 語言和樸素貝葉斯等多種算法,對文本挖掘進行全流程的分析,包括對其特征及其子集進行提取,并對文本進行聚類和分類處理,同時采用交叉驗證方法對模型進行調(diào)整,從而預測有關(guān)評論的類型,并將其作為電影推薦的一個標準。
關(guān)鍵詞:文本分詞;文本向量化;詞頻矩陣;樸素貝葉斯
中圖分類號:TP391.1? ? ? ?文獻標識碼:A 文章編號:2096-4706(2021)08-0017-04
Classification and Analysis of Network Comments Based on Text Mining Algorithm
——Take Douban Film Review as an Example
WANG Rui
(Jincheng College of Sichuan University,Chengdu? 611731,China)
Abstract:Under the background of the rapid development of network technology,information is messy and complicated,and how to obtain the required text information has become a concern for many enterprises or organizations. Taking the collected Douban film review data as an example,this project uses Python language,Naive Bayes and other algorithms to analyze the whole process of text mining,including extracting its features and subsets,clustering and classifying the text,and adjusting the model by cross validation method,so as to predict the types of relevant reviews,and take it as a standard for film recommendation.
Keywords:text segmentation;text vectorization;word frequency matrix;Naive Bayes
0? 引? 言
隨著信息網(wǎng)絡(luò)的高速發(fā)展,發(fā)表言論的平臺越來越多,其門檻也越來越低,各種海量數(shù)據(jù)實時更新,以至于言論窗口充斥著一些結(jié)構(gòu)不規(guī)范的文本。個人或者組織想要從中提取具有針對性且有使用價值的信息,必須對初步獲得的文本數(shù)據(jù)進行充分的處理。由于文本是人類使用的自然語言,具有非結(jié)構(gòu)化的特征,計算機識別起來會具有一定的機械性和局限性,這使得在進行處理和分析文本的操作過程中會遇到更多的困難,所以在處理文本時不能簡單地使用傳統(tǒng)的數(shù)據(jù)處理方式[1]。文本挖掘是針對文本的一種分析處理算法,雖然近幾年個人或者企業(yè)對其的需求有所上升,但是文本挖掘仍存在著一些問題,因其發(fā)展歷史相比較于傳統(tǒng)的數(shù)據(jù)挖掘方式的歷史較短,且方法不夠成熟,所以并沒有被廣泛使用,而且人們對于文本挖掘使用領(lǐng)域的認知也比較單一[2]。評論是諸多平臺,例如美食、購物、住宿等平臺獲得產(chǎn)品反饋、提高服務(wù)質(zhì)量的一大依據(jù),也是消費者獲得相關(guān)信息的重要途徑。但是對平臺來說,不是所有的評論都具有分析價值,比如一些產(chǎn)品有成百上千條評論,其中會有很多和所提供服務(wù)或者產(chǎn)品毫不相干的評論;當然對消費者來說,也不是所看到的評論就代表著產(chǎn)品的品質(zhì),因為很多人可能只會看前面幾十條評論就對產(chǎn)品或者服務(wù)的好壞下結(jié)論。文本挖掘很重要的一個意義就是可以深入人力所不能及的范圍,細微地處理無用的信息、系統(tǒng)地分析評論的趨勢,從而為平臺和消費者提供更精確的信息。此項目以預測豆瓣網(wǎng)站電影的評論類別為例,對評論這種分布不均勻、多樣化的文本進行處理和分析,目的是對文本挖掘在網(wǎng)絡(luò)評論分析方面的作用、文本挖掘的相關(guān)方法和意義進行更加具體的闡釋和展示,此項目的基本流程是數(shù)據(jù)采集、情感分析、數(shù)據(jù)預處理、文本特征提取、模型建立和模型輸出。
1? 相關(guān)技術(shù)
1.1? 爬蟲技術(shù)
調(diào)用了requests庫進行初步的文本收集,這種方式在處理Cookies、登錄驗證、代理設(shè)置等操作方面都更加簡單高效,使用比較廣泛,更重要的是也能夠滿足項目所需。
爬蟲技術(shù)核心代碼為:
def get_html(url):
session = requests.session()
ua = UserAgent().random
headers={'Cookie':,
'User-Agent':ua,
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Referer':'https://movie.douban.com/subject/30378158/'
}
rqg=requests.get(url,headers=headers)
rqg.encoding=chardet.detect(rqg.content)['encoding']
html=rqg.content.decode('utf-8')
return html,ua
def get_movie_comments(comments_url,count_g,count_b):
lis = []
ret,ua = get_html(comments_url)
time.sleep(random.random())
try:
ret = json.loads(ret)['html']
except:
with open('F://未爬取網(wǎng)址.txt','a',encoding='utf-8')as k:
k.write(comments_url+','+ua+'\n')
pass
rat = re.findall('class="allstar.*? rating" title="(.*?)">', ret, re.S)
comment = re.findall('(.*?)',ret,re.S)
comment = [x.strip() for x in comment]
ret = list(zip(rat,comment))
for ele in ret:
rate = ele[0]
if rate=='力薦' or rate=='推薦':
f1 = open('F:\\好評\\好評-{}.txt'.format(count_g), 'w', encoding='utf-8')
f1.write(ele[1])
f1.close()
count_g=count_g+1
elif rate=='較差' or rate=='很差':
f3 = open('F:\\差評\\差評-{}.txt'.format(count_b), 'w', encoding='utf-8')
f3.write(ele[1])
f3.close()
count_b=count_b+1
return count_g,count_b
1.2? 中文分詞技術(shù)
不同于英文每一個單詞具有明確的劃分標準,中國的漢字博大精深、歷史悠久。一個詞語或者一句話在不同的語境里有多種切分方式,并且隨著網(wǎng)絡(luò)用詞的不斷更新,許多具有現(xiàn)時意義的詞語并不能為計算機所識別。jieba庫是Python自帶的第三方庫,不僅支持簡繁體中文,而且可以自定義詞典以便提高分詞的準確性。由于爬取下來的文本中會存在一些對文本研究意義不大的停用詞,所以項目選擇調(diào)用jieba庫對停用詞進行過濾。分詞技術(shù)代碼為:
import jieba
def get_word(data):
ret=[]
for i in data:
a=jieba.lcut(i)
ret.append("".join(a))
return ret
def get_custom_stopword(stop_word_file):
with open(stop_word_file,encoding="utf-8") as f:
stop_word = f.read()
stop_word_list = stop_word.split("\n")
custom_stopword = [i for i in stop_word_list]
return custom_stopword
1.3? 文本向量化技術(shù)
由于計算機比較擅于處理電子表格、數(shù)據(jù)庫這樣的結(jié)構(gòu)化數(shù)據(jù),但是文本是人類的語言,所以將非結(jié)構(gòu)化的文本轉(zhuǎn)變成結(jié)構(gòu)化的數(shù)據(jù)是非常必要的。通常有兩種方式:一是計算出詞頻,二是計算出TF-IDF。將文本轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù)以方便計算機進行識別,這里用到了向量化方法,即CountVectorizer()函數(shù)的調(diào)用。
2? 數(shù)據(jù)采集及探索
2.1? 數(shù)據(jù)規(guī)模及比例
項目選取了十部電影的評論進行數(shù)據(jù)爬取,為了保證好評和差評比例大致相同從而獲得更有代表性的數(shù)據(jù),電影名稱是依靠主觀想法選擇的。項目采集了共4 777條豆瓣網(wǎng)站電影評論,將爬取的數(shù)據(jù)以txt文本的形式存儲在好評和差評兩個本地文件夾中,其中好評數(shù)據(jù)有2 831條,差評數(shù)據(jù)有1 946條,兩者數(shù)據(jù)分布比例約為3:2。在建立模型過程中,選取好評和差評各500條作為訓練集,另外從訓練集中選取好評和差評各50條作為測試集。
2.2? 數(shù)據(jù)情感分析
運用SnowNLP情感分析類庫,對評論數(shù)據(jù)進行初步探索,即預測輸入句子屬于正面和負面的概率。并盡量去除一些異常評論、無效無關(guān)評論和重復評論,例如不符合一般規(guī)律的評分高的負面評論,以此降低劣質(zhì)文本的作用效果,提升文本數(shù)據(jù)的質(zhì)量,以提高文本挖掘的信噪比[3]。該方法內(nèi)部運用貝葉斯模型,實現(xiàn)輸入數(shù)據(jù),返回0~1的小數(shù),越接近1證明該評論越積極,相反,越接近0證明該評論越消極,因為數(shù)據(jù)量足夠,所以可以取接近極端值的數(shù)據(jù):正面取大于0.99的數(shù)據(jù),負面取小于0.2的數(shù)據(jù)。
3? 數(shù)據(jù)預處理
3.1? 分詞處理
此項目就是基于jieba庫并使用精確模式返回一個列表,即使用jieba.lcut()將文本進行分詞處理。由于jieba庫自帶的分詞庫不是特別完善,此項目根據(jù)實際所需自定義了分詞庫,以便能夠得到更加準確的分詞結(jié)果。
3.2? 去停用詞
為了降低特征維度,提高文本分類算法的效率,此項目同樣調(diào)用jieba庫,并利用for循環(huán)語句在停用詞列表中查找,以此過濾沒有意義的停用詞。停用詞庫也是基于項目所需,結(jié)合了目前廣泛使用的停用詞表。除此之外,去停用詞還能夠節(jié)約計算資源,并且更加準確地反映文本的主要內(nèi)容。
4? 文本特征提取
4.1? 詞云特征分析可視化
詞云展示所使用的函數(shù)方法是wordcloud(),詞云不僅能夠形象的將文本的主要內(nèi)容進行呈現(xiàn),清晰明了地展示出在一個測試集里面最為重要的關(guān)鍵詞,同時也可以檢驗停用詞的處理環(huán)節(jié)是否完善,因為如果不完善,詞云中會不可避免地出現(xiàn)一些無意義的單個詞。從選取的詞云圖中也可以看出導演、劇情、主演和故事真實程度對觀看者的評價產(chǎn)生很重要的影響,這也正對應(yīng)著詞頻中出現(xiàn)次數(shù)最多的幾個詞語。測試集的詞云展示如圖1所示。
4.2? 向量化處理方法
在樸素貝葉斯模型下,分別使用TfIdfVectorizer()方法和CountVectorizer()方法進行向量化處理,最終選擇準確率較高的CountVectorizer()向量化處理方法,也就是構(gòu)建一個計算出詞頻的方法,并生成詞頻矩陣,同時也將所有的詞裝入詞袋,詞袋模型不考慮文本的詞序、語言、句法等信息,而將文本簡單地看成詞匯的集合,且每個詞匯相互獨立,這一模型在文本挖掘領(lǐng)域廣泛使用[4]。
5? 分類模型建立
5.1? 樸素貝葉斯模型
模型建立的算法通常使用K近鄰算法、樸素貝葉斯和決策樹模型。由于樸素貝葉斯算法的邏輯比較簡單且算法比較穩(wěn)定,當數(shù)據(jù)呈現(xiàn)不同的特點時,其分類性能的差異性比較小,在本項目中采用了這一算法進行模型建立。
5.2? K-折交叉驗證
利用for循環(huán),將參數(shù)依次賦值并對每一個結(jié)果求平均值,最終確定K值取5時為最佳參數(shù),使用交叉驗證得到的訓練集的準確率(四舍五入保留三位小數(shù))分別為0.950、0.955、0.941、0.909、0.905。從以上數(shù)據(jù)可以看出準確率相差不大,其平均值約為0.932。
分類模型及測試實現(xiàn)方式:
from sklearn.naive_bayes import GaussianNB
from sklearn.feature_extraction.text import CountVectorizer
k_rangemin = range(1,16)
k_scores = []
max_df=0.8
for min_df in k_rangemin:
cv = CountVectorizer(max_df = max_df,
min_df = min_df,
stop_words=frozenset(stopwords))
X_zong=(x_train+x_test)
cv_zong=cv.fit_transform(X_zong)
cv_train=cv.fit_transform(x_train)
cv_test=cv.transform(x_test)
#? ? ?print(cv.get_feature_names())
#? ? ?print(cv_train.toarray())
X=cv_train.toarray()
X_zong1=cv_zong.toarray()
y=[0]*500+[1]*500
X_test=cv_test.toarray()
y_test=[0]*50+[1]*50
clf = GaussianNB()
clf.fit(X,y)
Y_pred=clf.predict(X_test)
print(Y_pred)
score=clf.score(X_test,y_test)
print(score)
Y_tag=[0]*500+[1]*500+[0]*50+[1]*50
clf.fit(X_zong1,Y_tag)
scores = cross_val_score(clf, X_zong1, Y_tag, cv = 5, scoring = 'accuracy')
k_scores.append(scores.mean())
print(scores)
6? 模型輸出和評價
如圖2所示,模型輸出是對準確率和參數(shù)之間的關(guān)系進行可視化展示,可以更加清楚地檢驗所選取參數(shù)的可信度[5]。
本項目通過import matplotlib.pyplot as plt方法生成min_df的值在1~16范圍內(nèi)分別對應(yīng)的準確率,而且根據(jù)高斯樸素貝葉斯符合正態(tài)分布可以判斷,準確率會在某一點達到最大值,從圖2可以看出當min_df參數(shù)是8的時候準確率達到最大值,此參數(shù)代表此時模型最佳,而準確率則代表在最佳模型下得到的是已給數(shù)據(jù)的最佳分數(shù),這是評估模型的一種度量標準。
7? 結(jié)? 論
本次項目是基于豆瓣電影評論對文本挖掘的整個流程進行闡釋,對文本進行了爬取、分詞、文本向量化等一系列操作。項目還需要進一步地完善。首先因文本挖掘的技術(shù)手段不如數(shù)據(jù)挖掘成熟,其次就是在不同的項目中適用的方法和模型也是不同的,比如當改變算法或者參數(shù)的時候,會導致準確率發(fā)生變化,所以在處理這個項目的時候,需要注意的是,對于運用哪種方法和建立哪種模型必須進行充分的思考和實驗,從而得出比較科學的支撐依據(jù)。當然就本項目來說,也存在和其他文本挖掘項目相同的問題——分詞庫和停用詞庫不完善,所以文本挖掘這一領(lǐng)域仍需要大量的探索和實踐,未來的研究中應(yīng)該更加關(guān)注數(shù)據(jù)本身的質(zhì)量和真實性并完善詞典的構(gòu)建。通過這個項目可以看出文本挖掘在網(wǎng)絡(luò)評價分析方面發(fā)揮了很重要的作用,目前有很多組織或企業(yè)通過文本挖掘來提取相關(guān)產(chǎn)品的客戶反饋,并提高自身的產(chǎn)品質(zhì)量和服務(wù)水平。盡管這種方式還沒有很完善,但是當其得到更加廣泛的推廣后,其中包含的技術(shù)也一定會越來越完善。相信當這種方式走向成熟時,其會廣泛地應(yīng)用于更多的領(lǐng)域,例如商品貿(mào)易、新聞出版、醫(yī)療和教育等等,那么我們的生活也會獲得更多的便利。
參考文獻:
[1] 張公讓,鮑超,王曉玉,等.基于評論數(shù)據(jù)的文本語義挖掘與情感分析 [J].情報科學,2021,39(5):53-61.
[2] 王繼成,潘金貴,張福炎.Web文本挖掘技術(shù)研究 [J].計算機研究與發(fā)展,2000(5):513-520.
[3] 張驍,周霞,王亞丹.中國科技服務(wù)業(yè)政策的量化與演變——基于扎根理論和文本挖掘分析 [J].中國科技論壇,2018(6):6-13.
[4] 袁桂霞,周先春.基于多媒體信息檢索的有監(jiān)督詞袋模型 [J].計算機工程與設(shè)計,2018,39(9):2873-2878.
[5] 程斌,高圣國.基于細粒度情感的文本挖掘及可視化分析 [J].應(yīng)用數(shù)學進展,2021,10(1):128-136.
作者簡介:王睿(2000.09—),女,漢族,安徽亳州人,本科在讀,研究方向:大數(shù)據(jù)算法。
收稿日期:2021-03-13