周洪斌, 賈蘇, 許禮捷
(沙洲職業(yè)工學(xué)院, 數(shù)字化與微電子學(xué)院, 江蘇, 張家港 215600)
數(shù)字時代,網(wǎng)絡(luò)是輿情傳播的主要途徑之一,并且網(wǎng)絡(luò)輿情具有集中式、爆發(fā)式的特點,因此對網(wǎng)絡(luò)輿情進(jìn)行及時有效的分析是當(dāng)今社會治理必須面對的問題[1-2]。隨著網(wǎng)絡(luò)爬蟲、中文分詞以及文本情感分析等智能技術(shù)的日趨成熟,能夠在極短的時間內(nèi)準(zhǔn)確呈現(xiàn)網(wǎng)絡(luò)輿情文本信息中的核心內(nèi)容,有效應(yīng)對網(wǎng)絡(luò)輿情信息具有的數(shù)據(jù)量大、動態(tài)性、價值密度低等特性,為互聯(lián)網(wǎng)輿情數(shù)據(jù)的高效收集、分析提供了全新的方式、方法,可以實現(xiàn)網(wǎng)絡(luò)輿情分析的自動化、智能化,有助于做好網(wǎng)絡(luò)輿論引導(dǎo),傳播正能量。
爬蟲技術(shù)來源于網(wǎng)絡(luò)搜索引擎,目前應(yīng)用非常廣泛,通過對特定網(wǎng)站中的頁面信息進(jìn)行爬取、分析,可以給出輿情態(tài)勢的綜合研判。Python程序設(shè)計語言在人工智能時代被廣泛應(yīng)用,目前大量的網(wǎng)絡(luò)爬蟲程序采用Python語言開發(fā)?;赑ython的爬蟲技術(shù)通常會用到requests庫、BeautifulSoup庫[3],對應(yīng)的基本使用方法如下。
(1) 通過requests.get()方法模擬HTTP GET方法發(fā)出請求到服務(wù)器,然后通過text屬性獲得服務(wù)器響應(yīng)返回的網(wǎng)頁內(nèi)容(源代碼)。具體代碼如下:
res = requests.get(url)
html = res.text
(2) 使用BeautifulSoup進(jìn)行網(wǎng)頁解析,調(diào)用BeautifulSoup對象的select()等方法抓取指定數(shù)據(jù)。具體代碼如下:
soup = BeautifulSoup(html.encode('utf-8'),"lxml")
data=soup.select(“html head title”)
當(dāng)要爬取動態(tài)頁面時,普通的requests無法實現(xiàn),需要用到selenium。selenium是一個自動化測試工具,能夠驅(qū)動瀏覽器模擬人的操作,如鼠標(biāo)單擊、鍵盤輸入等。selenium的使用方法如下:
(1) 根據(jù)瀏覽器的型號和版本下載對應(yīng)的驅(qū)動程序,如谷歌瀏覽器的驅(qū)動程序為ChromeDriver,再根據(jù)具體的版本號下載匹配的驅(qū)動程序。
(2) 啟動瀏覽器,訪問對應(yīng)的頁面,獲得頁面代碼:
driver = webdriver.Chrome()
driver.get(url)
data= driver.page_source
在使用爬蟲技術(shù)獲取頁面數(shù)據(jù)的同時,也要遵循行業(yè)規(guī)范,即Robots協(xié)議[4]。網(wǎng)站通過Robots協(xié)議告訴爬蟲哪些頁面可以爬取,哪些頁面不能爬取。在網(wǎng)站首頁的地址后面添加“/robots.txt”,可以查看該robots.txt文件的內(nèi)容,robots.txt文件主要包括User-Agent、Allow 和Disallow等3部分內(nèi)容。其中:User-Agent用于指明允許的爬蟲標(biāo)識,如果是“*”則表明允許所有的爬蟲訪問該網(wǎng)站;Allow表示允許爬蟲訪問的目錄或頁面;Disallow表示不允許爬蟲訪問的目錄或頁面。但根據(jù)Robots協(xié)議的默認(rèn)規(guī)則,如果一個目錄沒有顯示為Disallow,則是允許訪問的。
中文分詞是中文信息處理的基礎(chǔ),通過分詞將漢字序列分成一個個單獨的詞,為觀點抽取等進(jìn)一步的自然語言處理作準(zhǔn)備[5]。近年來,jieba中文分詞工具得到了較為廣泛的應(yīng)用,jieba的3種分詞模式如表1所示。
表1 Jieba分詞模式
以語句“張家港是全國文明城市”為例,通過jieba的3種分詞模式得到的運行結(jié)果為:精確模式輸出['張家港', '是', '全國','文明城市'];全模式輸出['張家', '張家港', '是', '全國', '國文', '文明', '文明城市', '城市'];搜索引擎模式輸出['張家', '張家港', '是', '全國', '文明', '城市', '文明城市']。
在jieba分詞的基礎(chǔ)上可以制作詞云圖[6],實現(xiàn)文本分析的可視化,可以更加直觀和藝術(shù)地展示文本。詞云是將文本中出現(xiàn)頻率較高的詞予以視覺上的突出,使得瀏覽者一眼就能領(lǐng)略文本的主旨。詞云圖一般使用字體的大小來反應(yīng)詞語出現(xiàn)的頻率,頻率越高的詞在詞云圖中的字體就越大。
Python語言可以通過WordCloud庫來制作詞云圖。WordCloud是一個實現(xiàn)詞云展示的第三方庫,其可以設(shè)定詞云的形狀、大小和顏色。生成指定字體和背景色的詞云圖的代碼如下:
wordcloud=WordCloud(font_path="simhei.ttf",background_color="white").generate(text)
然后,可以通過matplotlib.pyplot庫將詞云圖展現(xiàn)出來,代碼如下:
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
默認(rèn)的詞云形狀為長方形,如果要對詞云圖本身進(jìn)行視覺上的改進(jìn),可以在產(chǎn)生詞云時設(shè)置mask參數(shù),代碼如下:
cloudMask=imread("mask.png")
wordcloud=WordCloud(font_path="simhei.ttf",background_color="white",mask=cloudMask).generate(text)
文本情感分析[7]是指用自然語言處理技術(shù)來識別和提取文本中的主觀信息,找出說話者或者作者當(dāng)時的態(tài)度,如積極、消極或者中性,因此文本情感分析在輿情分析方面被廣泛應(yīng)用。
目前大量的自然語言處理庫都是針對英文的,而SnowNLP庫是一個用Python語言編寫的自然語言處理類庫,支持多種中文文本處理操作,包括詞性標(biāo)注、情感分析、提取文本摘要等[8]。因此,可以通過SnowNLP對中文文本情感進(jìn)行分析,代碼如下:
s = SnowNLP(coment)
print(s.sentiments)
其中,sentiments為SnowNLP情感分析的結(jié)果,取值在0到1之間,表示情感分析結(jié)果為正面的可能性:當(dāng)數(shù)值大于0.5時,情感偏向正面;當(dāng)數(shù)值小于0.5時,情感偏向負(fù)面。
隨著人工智能技術(shù)與云計算技術(shù)的融合,國內(nèi)部分公司推出了人工智能開放平臺,開發(fā)者可以在程序中通過調(diào)用平臺提供的接口完成情感分析,如百度AI開放平臺、訊飛開放平臺。以百度AI開放平臺為例,其提供了情感傾向分析、文章分類等自然語言處理服務(wù),開放者完成賬號的注冊與認(rèn)證后,可以查看不同程序設(shè)計語言所對應(yīng)的SDK文檔,調(diào)用百度AI開放平臺完成文本情感分析[9]。Python語言的調(diào)用方法如下:
result=client.sentimentClassify(text)
傳入?yún)?shù)text表示待分析文本,最大2048 Byte。數(shù)據(jù)參數(shù)如表2所示。
表2 百度AI開放平臺情感傾向分析返回數(shù)據(jù)參數(shù)詳情
因此,可以通過pos=result['items'][0]['positive_prob'] 獲得情感積極的概率。
綜合應(yīng)用上述技術(shù)對新聞評論進(jìn)行分析,具體流程如圖1所示。
圖1 新聞評論數(shù)據(jù)分析過程
關(guān)鍵步驟如下。
1) 爬取新聞評論
(1) 爬取評論節(jié)點
評論的節(jié)點為〈div class="comment_que"〉
comment_nodes = data.find_all('div', class_="comment_que")
for node in comment_nodes:
(2) 獲取昵稱
nickname = node.find('div', class_="aqwright").find('h3').find('a').get_text().strip()
nicknames.append(nickname)
(3) 獲取評論主體內(nèi)容
comment = node.find('div', class_="aqwright").find('div', class_="ansright_cont").get_text().strip()
comments.append(comment)
2) 對評論分詞并制作詞云圖
(1) 使用jieba中文分詞
words=[word for word in jieba.lcut(comments) if len(word)>=2]
text=" ".join(words)
(2) 對詞云圖本身進(jìn)行視覺上的改進(jìn),制作并顯示指定形狀的詞云圖
cloudMask=imread("mask.png")
wordcloud=WordCloud(font_path="simhei.ttf",background_color="white",mask=cloudMask).generate(text)plt.imshow(wordcloud)
plt.axis("off")
plt.show()
詞云顯示效果如圖2所示。
圖2 新聞評論詞云圖
3) 對評論進(jìn)行情感分析
(1) 本例中使用SnowNLP進(jìn)行情感分析
for comment in comments
(2) 獲得每條評論的情感分析結(jié)果
s=SnowNLP(comment)
result=s.sentiments
emotion+=result
n += 1
(3) 輸出所有評論情感分析的平均值
print('情感分析平均值:',emotion/n)
對于本次分析的結(jié)果,所有評論的情感分析平均值為0.7063,說明廣大網(wǎng)民對本條新聞的評論以正面的、積極的評論為主。
隨著時代發(fā)展,網(wǎng)絡(luò)輿情分析越來越受到社會各界重視。智能技術(shù)為網(wǎng)絡(luò)輿情收集、分析提供了有力高效的手段,通過網(wǎng)絡(luò)爬蟲、中文分詞以及文本情感分析技術(shù),實現(xiàn)了新聞評論的自動化采集、可視化分析,能夠在極短的時間內(nèi)準(zhǔn)確呈現(xiàn)網(wǎng)絡(luò)輿情文本信息中的核心內(nèi)容,為網(wǎng)絡(luò)輿情分析與引導(dǎo)提供幫助。本文所用的情感分析結(jié)果對輿情導(dǎo)向的判斷略顯單一化,如何將情感分析結(jié)果與多種因素結(jié)合輔助判斷是下一步的重要工作。