陳麗萍,吳其林,李小榮
(巢湖學(xué)院 信息工程學(xué)院, 安徽 巢湖 238000)
我國大數(shù)據(jù)產(chǎn)業(yè)發(fā)展迅猛。為適應(yīng)相關(guān)領(lǐng)域?qū)夹g(shù)人員所具備大數(shù)據(jù)分析知識體系要求,各大高校相關(guān)專業(yè)也相繼開設(shè)了大數(shù)據(jù)分析技術(shù)相關(guān)課程。文章以網(wǎng)絡(luò)新聞分析為例,設(shè)計(jì)了一個基于互聯(lián)網(wǎng)大數(shù)據(jù)分析案例,詳細(xì)闡述了使用大數(shù)據(jù)處理技術(shù)進(jìn)行數(shù)據(jù)分析的完整過程。大數(shù)據(jù)分析過程通常包括數(shù)據(jù)獲取、數(shù)據(jù)預(yù)處理、數(shù)據(jù)挖掘模型、算法執(zhí)行與分析、數(shù)據(jù)分析結(jié)果輸出及可視化等步驟。
數(shù)據(jù)獲取主要利用網(wǎng)絡(luò)爬蟲。網(wǎng)絡(luò)爬蟲是一個在海量互聯(lián)網(wǎng)信息中獲取有效Web頁面的程序[1]。首先由Web服務(wù)器連接器發(fā)出連接請求,與指定的Web服務(wù)器建立連接后,向服務(wù)器發(fā)送URL頁面請求命令,服務(wù)器返回對應(yīng)的頁面內(nèi)容。接著由網(wǎng)頁解析器對頁面解析,提取所包含的URL;對URL過濾并存儲符合要求的URL。同時(shí)根據(jù)已設(shè)定的爬行策略,依次對每個URL對應(yīng)頁面爬行;重復(fù)這個過程直到滿足爬行的結(jié)束條件即可獲取所需的Web網(wǎng)頁數(shù)據(jù)。然后對獲取的Web網(wǎng)頁數(shù)據(jù)解析和提取。解析、提取時(shí)先對Web頁面的版式類型識別,每種版式提取的頁面目標(biāo)信息都不相同,也就是要提取的數(shù)據(jù)信息位置具有不同的特征。新聞頁面提取目標(biāo)是標(biāo)題和正文部分。目前主要有3大類Web頁面信息內(nèi)容解析提取方法,分別是:基于匹配的信息抽取方法;基于HTML結(jié)構(gòu)的信息抽取方法;基于統(tǒng)計(jì)的抽取方法[2]。3種方法各有優(yōu)缺點(diǎn)。最后將提取的目標(biāo)內(nèi)容數(shù)據(jù)保存入庫,可以保存在txt文本格式、數(shù)據(jù)庫(如:MYSQL、MOngDB)中。
數(shù)據(jù)結(jié)構(gòu)化處理是數(shù)據(jù)分析挖掘前提。文章主要針對中文文本類型信息結(jié)構(gòu)化處理,包括詞匯切分、去除停用詞等。詞匯切分對于分析中文文本類型數(shù)據(jù)來說尤其關(guān)鍵。目前有兩個成熟的分詞方法是基于詞典的分詞和基于統(tǒng)計(jì)的分詞。停用詞是沒有實(shí)際檢索意義的詞。如“這個、的”等。目前常見的停用詞表有哈爾濱工業(yè)大學(xué)停用詞表等。
LDA(Latent Dirichlet Allocation)是一種文檔主題生成模型,目的是從文本中發(fā)現(xiàn)隱含的語義,相比空間向量模型增加了概率信息[3]。LDA模型包含3層結(jié)構(gòu),文檔集(大小為D)、主題集(大小為K)、詞語集(大小為N)。α是主題分布θd的先驗(yàn)分布,η是主題k中詞語分布βk的先驗(yàn)分布,Zd,n是文檔d中詞語的所屬主題,Wd,n為對應(yīng)的詞語。LDA模型認(rèn)為一篇文檔的建立過程,就是首先確定多個主題,然后確定每個主題下的不同詞語,最終構(gòu)成一篇文檔。LDA的使用就是文檔建立過程的逆過程,根據(jù)一個文檔,抽取其主題以及主題所對應(yīng)的詞語。
作為文本訓(xùn)練數(shù)據(jù)經(jīng)過預(yù)處理得到計(jì)算機(jī)識別的數(shù)學(xué)表示模型,接下來使用分類方法進(jìn)行模型訓(xùn)練,得到一個可以準(zhǔn)確預(yù)測未知文本類型的模型?;跈C(jī)器學(xué)習(xí)的文本分類方法日益成熟。支持向量機(jī)(SVM)是其中一種經(jīng)典的解決文本分類較好的方法。SVM的目標(biāo)是尋找區(qū)分不同類樣本的超平面,使邊際最大。對于二分類問題,以線性劃分超平面為例說明。給定訓(xùn)練樣本集:
D={(x1,y1),(x2,y2),…,(xn,yn)}
yi∈{-1,+1}
(1)
定義分類超平面方程為:ωTx+b=0
(2)
保證每個樣本都被正確分類,對于正樣本有:
ωTx+b≥0
(3)
對于負(fù)樣本有:ωTx+b<0
(4)
由于正樣本的類別標(biāo)簽為+1,負(fù)樣本的類別標(biāo)簽為-1,可統(tǒng)一寫成:yi(ωTxi+b)≥0
(5)
(6)
當(dāng)找不到能將兩類數(shù)據(jù)分開的超平面時(shí),SVM將數(shù)據(jù)映射到高維空間中,映射時(shí)用到核函數(shù)。在SVM中常用的核函數(shù)有線性核、高斯核和sigmoid核等。對于多分類問題,支持向量機(jī)用二分類器的組合來處理[4]。文章對新聞文本分類就是使用SVM進(jìn)行的文本多分類。
輸出結(jié)果可視化盡可能讓輸出結(jié)果清晰。比如可以使用詞云圖,分類結(jié)果數(shù)據(jù)評價(jià)圖、表等。
文章以Python3.6為工具進(jìn)行新聞文本數(shù)據(jù)的獲取、預(yù)處理、數(shù)據(jù)分析及可視化。
實(shí)驗(yàn)環(huán)境為:操作系統(tǒng):Windows10;處理器:雙核,2.53GHz;內(nèi)存:4GB
Python版本:3.6.
Python環(huán)境:Python IDLE或jupyter notebook。
Python工具包:beautifulsoup,gensim,jieba,sklearn,Pandas,Matplotlib,Scrapy,re,os,numpy等。
第三方庫文件:requests、WordCloud等。
文章利用requests、re與BeautifulSoup,從新浪網(wǎng)爬取新聞,并將獲取的內(nèi)容以txt格式保存到本地指定的目錄中。
1.爬取頁面。首先通過requests的get方法從給定的新聞網(wǎng)頁鏈接開始爬取網(wǎng)頁。通過分析網(wǎng)址,發(fā)現(xiàn)每頁的網(wǎng)址變化是通過….index_1..n值來調(diào)整實(shí)現(xiàn)的。所以可通過設(shè)置循環(huán)來實(shí)現(xiàn)網(wǎng)頁自動翻頁進(jìn)行網(wǎng)頁爬取。本案例設(shè)置爬取了前20個頁面,實(shí)現(xiàn)代碼為:for n in range(1,20):str=requests.get("http://roll.news.sina.com.cn/news/gnxw/gdxw1/index_"+str(n)+".shtml")
str.encoding=′gb2312′
接著,提取每個頁面中包含的各條新聞鏈接。由于超鏈接通常模式固定,提取并過濾超鏈接時(shí),采用了正則表達(dá)式匹配的方法。經(jīng)過分析每條新聞的鏈接字符格式,如:http://news.sina.com.cn/o/2018-11-06/doc-ihmutuea7351575.shtml。設(shè)計(jì)正則表達(dá)式。使用Python的re模塊的findall()函數(shù),在爬取的頁面文本中找到正則表達(dá)式所匹配成功的所有字符串,這些字符串就是在本案例中需要的目標(biāo)新聞頁面網(wǎng)址。實(shí)現(xiàn)代碼為:
soup=BeautifulSoup(str.text, ′lxml′)
article=soup.select(′div#article > p′)
pro_str=′′
for i in range(len(article)-1):
pro_str += article[i].text
newstext += pro_str + ′ ′
最后使用Python的os將提取的新聞?wù)牟糠謨?nèi)容寫入allnewscontent.txt文件保存。實(shí)現(xiàn)代碼:
f=open("allnewscontent.txt","wb")
f.write(newstext.encode("utf-8"))
f.close( )
allnewscontent.txt文件內(nèi)容就是所獲取到的新聞內(nèi)容數(shù)據(jù)。
對獲取到的新聞內(nèi)容數(shù)據(jù)進(jìn)行預(yù)處理。首先讀取新聞內(nèi)容數(shù)據(jù),使用Python的函數(shù)readlines(),實(shí)現(xiàn)代碼:
contentfile=input(“輸入文本文件名(allnewscontent.txt):”)
f=open(contentfile, "r",encoding="utf-8")
lines=f.readlines()
f.close()
使用LDA模型進(jìn)行訓(xùn)練,最終根據(jù)事先指定生成主題的數(shù)量,生成新聞內(nèi)容的多個主題及對應(yīng)主題關(guān)鍵詞。本案例使用Python的gensim訓(xùn)練LDA模型來進(jìn)行新聞內(nèi)容的主題分析。主要實(shí)現(xiàn)代碼:
num_topics=int(input(“話題數(shù):”)) //設(shè)置主題數(shù)量
dictionary=Dictionary(segtexts)
dictionary.filter_extremes(2,1.0,keep_n=800) //詞典過濾,保留1000個
corpus=[dictionary.doc2bow(text) for text in segtexts]
LdaModel(corpus,id2word=dictionary, num_topics=num_topics)
使用詞云圖將反映主題的關(guān)鍵詞可視化。根據(jù)詞云圖中詞語顯示的大小,就很容易看出新聞內(nèi)容表達(dá)的主題。本案例使用WordCloud制作詞云圖,每個圖設(shè)置顯示20個詞語。主要實(shí)現(xiàn)代碼:
wc=WordCloud(collocations=False, font_path=font, width=2800, height=2800, max_words=20,margin=2)
得到如圖1所示的詞云圖。
圖1 詞云圖
從已獲取的新聞頁面中,隨機(jī)抽取了足夠數(shù)量的網(wǎng)頁,經(jīng)過人工實(shí)際分析,事實(shí)證明中國與美國發(fā)展經(jīng)濟(jì)問題、中國的疫苗問題、中國臺灣相關(guān)工作問題確實(shí)是當(dāng)時(shí)新聞主題下的主要事件。因此,通過這個主題關(guān)鍵詞的展示,人們在一兩分鐘內(nèi)就可捕獲到任意某個時(shí)間段內(nèi)的社會新聞熱點(diǎn)。
1.分類模型訓(xùn)練。本案例使用TF-IDF將新聞文本轉(zhuǎn)換成計(jì)算機(jī)能夠處理的向量;使用SVM算法進(jìn)行模型訓(xùn)練,得到分類模型svm。具體實(shí)現(xiàn)使用Python的sklearn包中的svm。
分類模型訓(xùn)練主要實(shí)現(xiàn)代碼:
from sklearn import svm
from sklearn.feature_extraction.text import TfidfVectorizer
/* 訓(xùn)練svm分類器*/
def train_svm(train_data, dictionary,train_tags):
……….
v=TfidfVectorizer()
tdata=v.fit_transform(traindata)
print(tdata)
svc=svm.SVC(kernel=′rbf′,gamma=′scale′)
svc.fit(tdata,train_tags)
return svc
…………………
svm=train_svm(corpus,dictionary,label)
2.利用訓(xùn)練好的分類模型對測試集中的新聞進(jìn)行分類預(yù)測。首先讀取測試集中的新聞文本數(shù)據(jù),然后對其進(jìn)行預(yù)處理;最后用已經(jīng)訓(xùn)練好的模型svm進(jìn)行預(yù)測分類。分類的主要實(shí)現(xiàn)代碼:
for i in range(len(test_tags)):
test_X=tdata[i]
r=svm.predict(test_X) //此處test_X為特征集
testresult.append(r[0])
if r[0]=test_tags[i]:
correct+=1
3.最后對算法分類的結(jié)果進(jìn)行性能評估,通過計(jì)算查全率(recall)、查準(zhǔn)率(precision)、f1-score值、宏平均(macro avg)來展示分類結(jié)果的好壞。本案例使用sklearn的confusion_matrix和classification_report實(shí)現(xiàn)此功能。
主要實(shí)現(xiàn)代碼:
cm=confusion_matrix(test_tags,testresult)
print(cm)
target_names=[′class 0′,′class 1′,′class 2′]
print(classification_report(test_tags,testresult, target_names=target_names))
本案例詮釋了大數(shù)據(jù)分析的整個過程。通過互聯(lián)網(wǎng)大數(shù)據(jù)環(huán)境下新聞主題分析和分類的研究實(shí)現(xiàn),使學(xué)生掌握如何使用處理技術(shù)從大量無序的網(wǎng)絡(luò)數(shù)據(jù)中獲取有用信息。該案例結(jié)合人們平時(shí)常用的新浪網(wǎng),具有一定的深度和綜合性,學(xué)生通過案例的學(xué)習(xí)和實(shí)踐,可以加深對所學(xué)理論知識的理解,并促使其能在實(shí)際中正確使用。