殷美桂
(河源職業(yè)技術(shù)學(xué)院電子與信息工程學(xué)院,河源 517000)
大數(shù)據(jù)時(shí)代下,隨著互聯(lián)網(wǎng)應(yīng)用技術(shù)的成熟,越來(lái)越多的用戶(hù)使用社交平臺(tái),其中微博作為一種非常流行的媒體平臺(tái),成為人們自由表達(dá)觀點(diǎn)及社會(huì)交流的媒介。據(jù)2022 年9 月微博發(fā)布的三季報(bào)顯示,9 月的月活躍用戶(hù)數(shù)為5.84億,日均活躍用戶(hù)數(shù)為2.53億[1]。微博憑借龐大的用戶(hù)群體及實(shí)時(shí)的社交互動(dòng)方式,成為社會(huì)熱點(diǎn)話題討論和輿情發(fā)酵平臺(tái)[2]。大學(xué)生群體具有思想獨(dú)立、上網(wǎng)時(shí)間長(zhǎng)和獵奇心理強(qiáng)等特點(diǎn),更愿意通過(guò)網(wǎng)絡(luò)媒體發(fā)聲;同時(shí),大學(xué)生群體因思想不成熟,在面對(duì)真假難辨的消息時(shí)更容易受到他人蠱惑。近年來(lái),高校頻頻成為網(wǎng)絡(luò)輿論場(chǎng),根據(jù)人民網(wǎng)輿情數(shù)據(jù)中心統(tǒng)計(jì),2020 年涉及高校全國(guó)重大輿情同比增加33%,與2018 年相比增幅達(dá)到133%[3]。高校管理者如何從互聯(lián)網(wǎng)海量的信息提取出針對(duì)本校的輿情數(shù)據(jù),以及在網(wǎng)絡(luò)輿情的發(fā)展形成之際對(duì)網(wǎng)絡(luò)輿情進(jìn)行正確的引導(dǎo),顯得尤其重要。高校網(wǎng)絡(luò)輿情系統(tǒng)可以代替人工監(jiān)測(cè),輿情系統(tǒng)能對(duì)校園網(wǎng)絡(luò)輿情進(jìn)行自動(dòng)監(jiān)控,從互聯(lián)網(wǎng)中挖掘出針對(duì)本校的輿情信息,并對(duì)輿情信息進(jìn)行主題詞的統(tǒng)計(jì)和情感分析,幫助管理者了解學(xué)生關(guān)注的主題以及敏感事件的情感傾向,從而捕捉學(xué)生的思想動(dòng)態(tài)情況,能維護(hù)學(xué)校的輿論安全穩(wěn)定。
網(wǎng)絡(luò)輿情系統(tǒng)采用B/S模式,使用Django與Vue 框架實(shí)現(xiàn)前后端分離技術(shù),數(shù)據(jù)存儲(chǔ)使用MySQL。系統(tǒng)后端采用Python 的Django 框架提供數(shù)據(jù)訪問(wèn)的接口,前端框架通過(guò)Axios 訪問(wèn)后端API 接口獲取數(shù)據(jù),從而構(gòu)建可以展示的網(wǎng)站平臺(tái)。
網(wǎng)絡(luò)爬蟲(chóng)又名“網(wǎng)絡(luò)蜘蛛”,是建立在搜索引擎基礎(chǔ)上的信息收集技術(shù),從網(wǎng)站的某一個(gè)頁(yè)面開(kāi)始,按照指定規(guī)則循環(huán)讀取網(wǎng)頁(yè)的鏈接,以獲取網(wǎng)頁(yè)內(nèi)容。網(wǎng)絡(luò)爬蟲(chóng)按照實(shí)現(xiàn)技術(shù),可分為通用網(wǎng)絡(luò)爬蟲(chóng)和主題網(wǎng)絡(luò)爬蟲(chóng)。Scrapy 是基于Python 語(yǔ)言開(kāi)發(fā)的Web 數(shù)據(jù)采集框架[4]。Scarpy 是最受歡迎的爬蟲(chóng)框架之一,面向用戶(hù)的多種需求,可進(jìn)行定制爬蟲(chóng)開(kāi)發(fā)。Scrapy 爬取的網(wǎng)頁(yè)信息具體流程如下[5]:
(1)初始化爬取鏈接。調(diào)度器(Scheduler)將需要爬取的微博網(wǎng)頁(yè)URL傳遞給Scrapy引擎。
(2)發(fā)送請(qǐng)求。調(diào)度器負(fù)責(zé)接收Scrapy 引擎發(fā)送的請(qǐng)求(Request),并將請(qǐng)求加入調(diào)度隊(duì)列。調(diào)度器將處理好的Request返回給引擎。
(3)獲取響應(yīng)。Request 由下載器(Downloader)獲取響應(yīng)(Responses)信息,交給Scrapy引擎,引擎轉(zhuǎn)交給Spider處理。
(4)處理Responses 信息。 Spider(爬蟲(chóng))負(fù)責(zé)處理所有的Responses,使用Xpath 進(jìn)行指定數(shù)據(jù)的提取或者將需要繼續(xù)處理的URL 提交引擎。Spider 將獲取的Item 字段由引擎交給Item pipelines 模塊。Item Pipelines 模塊會(huì)根據(jù)設(shè)置將數(shù)據(jù)儲(chǔ)存在CSV文件中。
Django 是一個(gè)開(kāi)放源代碼的應(yīng)用框架,基于MVC 的DjangoMVT 框架。Model 與MVC 中的M 功能相同,負(fù)責(zé)與數(shù)據(jù)庫(kù)中的進(jìn)行交互[6]。View 與MVC 中的C 功能相同,負(fù)責(zé)進(jìn)行業(yè)務(wù)處理。Template 與MVC 中的V 功能相同,負(fù)責(zé)封裝構(gòu)造返回的html。程序員利用Django 快速、便捷地創(chuàng)建數(shù)據(jù)庫(kù)驅(qū)動(dòng)的應(yīng)用程序。Django 中嵌入對(duì)象關(guān)系映射(ORM)框架,采用類(lèi)定義數(shù)據(jù)模型,并將模型與關(guān)系數(shù)據(jù)庫(kù)連接,獲得一個(gè)數(shù)據(jù)庫(kù)操作的API。ORM 的優(yōu)點(diǎn)是以對(duì)象的方式操作數(shù)據(jù)庫(kù),即使不懂SQL 語(yǔ)句的開(kāi)發(fā)者也可以通過(guò)ORM輕松操作數(shù)據(jù)。
Vue.js用于構(gòu)建用戶(hù)界面的漸進(jìn)式框架,是目前應(yīng)用較為廣泛的JavaScript框架之一[7]。Vue開(kāi)發(fā)優(yōu)勢(shì)主要表現(xiàn)在組件化開(kāi)發(fā),大大減少代碼編寫(xiě)量;另外其最突出的優(yōu)勢(shì)是可以對(duì)數(shù)據(jù)進(jìn)行雙向綁定,采用v-model 指令對(duì)View 和Model層進(jìn)行數(shù)據(jù)綁定,當(dāng)視圖中的數(shù)據(jù)發(fā)生變化,同步更新后臺(tái)數(shù)據(jù),后臺(tái)數(shù)據(jù)的變化也會(huì)反映在視圖中。
網(wǎng)絡(luò)輿情系統(tǒng)涉及的技術(shù)領(lǐng)域包括網(wǎng)絡(luò)輿情信息的采集技術(shù)、話題檢測(cè)與跟蹤技術(shù)、文本情感分析技術(shù)[8]。根據(jù)網(wǎng)絡(luò)輿情涉及的技術(shù),系統(tǒng)分為后端功能模塊和前端結(jié)果展示模塊。系統(tǒng)功能結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)功能結(jié)構(gòu)圖
高校一般在新浪微博都有官方賬號(hào)用于發(fā)布學(xué)校資訊,而大學(xué)生喜歡在微博平臺(tái)發(fā)布個(gè)人看法及熱點(diǎn)事件的評(píng)論,系統(tǒng)主要采集新浪微博數(shù)據(jù)作為數(shù)據(jù)源。數(shù)據(jù)獲取主要分為三個(gè)步驟:向URL發(fā)送請(qǐng)求、數(shù)據(jù)爬取、數(shù)據(jù)存儲(chǔ)。本系統(tǒng)采用Python 語(yǔ)言中的Scrapy 爬蟲(chóng)框架,調(diào)用新浪微博公開(kāi)的應(yīng)用程序接口(API)實(shí)現(xiàn)對(duì)特定網(wǎng)頁(yè)信息的爬取,其檢索策略是基于設(shè)定好的學(xué)校名稱(chēng)關(guān)鍵詞。在采集工作開(kāi)始之前,先在URL 隊(duì)列中初始化一個(gè)或幾個(gè)URL,爬蟲(chóng)程序可根據(jù)設(shè)定的URL 依次去請(qǐng)求訪問(wèn)對(duì)應(yīng)網(wǎng)頁(yè),因微博需登錄驗(yàn)證后才可以訪問(wèn)網(wǎng)頁(yè),Request 中必須包含登錄驗(yàn)證的Cookie 信息。爬蟲(chóng)接收網(wǎng)頁(yè)端的Responses,使用Xpath 來(lái)定位爬取指定內(nèi)容,儲(chǔ)存在CSV文件。
在進(jìn)行輿情分析、熱詞發(fā)現(xiàn)和情感分析之前,要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。數(shù)據(jù)預(yù)處理分為數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和文本分詞。
(1)數(shù)據(jù)清洗。由于未經(jīng)處理的數(shù)據(jù)含有噪聲,如數(shù)據(jù)中存在很多無(wú)意義的符號(hào)、連接、數(shù)字、圖片等噪音,并且還會(huì)有大量的缺失值,這對(duì)文本的數(shù)據(jù)分析沒(méi)有太大意義。去除“臟數(shù)據(jù)”的方法有很多,一般采用正則表達(dá)式進(jìn)行規(guī)則匹配,利用正則表達(dá)式過(guò)濾掉無(wú)意義的詞語(yǔ)。系統(tǒng)對(duì)臟數(shù)據(jù)進(jìn)行清洗主要包括:去除亂碼和填充空字段等。采集到的網(wǎng)頁(yè)源碼往往存在一定程度的亂碼和一些對(duì)文本分析無(wú)意義的信息,如廣告和注釋等,因此需要對(duì)其進(jìn)行過(guò)濾操作去除亂碼,通過(guò)過(guò)濾對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理。另外,由于采集到的微博字段有些為空,因此需要將空值進(jìn)行填充。
(2)數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)轉(zhuǎn)換就是將數(shù)據(jù)進(jìn)行轉(zhuǎn)換或歸并,從而構(gòu)成一個(gè)適合數(shù)據(jù)處理的描述形式。系統(tǒng)主要對(duì)一些屬性,如日期、評(píng)論、點(diǎn)贊等數(shù)據(jù)進(jìn)行轉(zhuǎn)換,將其轉(zhuǎn)換為規(guī)格化的數(shù)據(jù)。如在抓取微博發(fā)布時(shí)間時(shí)會(huì)出現(xiàn)“2 小時(shí)前”“昨天”“剛剛”等字眼,這會(huì)導(dǎo)致數(shù)據(jù)庫(kù)中發(fā)布時(shí)間字段格式不統(tǒng)一,因此需要將時(shí)間格式統(tǒng)一為“年-月-日”。
(3)中文分詞。中文不同于英文,英文單詞之間使用空格連接,中文文本都是句子,需要將處理后的數(shù)據(jù)分割為詞語(yǔ)。中文文本的分詞軟件主要有中國(guó)科學(xué)院的ICTCLAS、jieba 分詞和北京大學(xué)語(yǔ)言計(jì)算與機(jī)器學(xué)習(xí)研究組研制推出的一套全新的中文分詞工具包pkuseg。用戶(hù)可以根據(jù)pkuseg待分詞文本的領(lǐng)域特點(diǎn),自由地選擇不同的模型。系統(tǒng)采用網(wǎng)絡(luò)領(lǐng)域的分詞模型,更精確地對(duì)微博文本進(jìn)行分詞,分詞后對(duì)數(shù)據(jù)去重、去停用詞、去無(wú)關(guān)詞、去除開(kāi)頭末尾為數(shù)字或符號(hào)的分詞,如日期、錯(cuò)誤分詞等。
微博文本的情感分析基于百度PaddleHub預(yù)訓(xùn)練情感傾向分析模型(Senta)[9],針對(duì)中文文本,模型可自動(dòng)判斷文本情感極性類(lèi)別和置信度。Senta 開(kāi)源一系列模型,如BOW、CNN、Bi-LSTM 等。PaddleHub 可以支持文本、圖像、視頻、語(yǔ)音、工業(yè)應(yīng)用五大方向,提供高質(zhì)量的預(yù)訓(xùn)練模型,減少用戶(hù)訓(xùn)練模型的工作量。本文采用Paddle_Senta 的BiLSTM 進(jìn)行情感的二分類(lèi)(積極、消極)任務(wù)。BiLSTM 模型是長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)模型(LSTM)的一種變體[10]。情感分析實(shí)質(zhì)上是一個(gè)分類(lèi)任務(wù),系統(tǒng)對(duì)微博正文進(jìn)行情感的分類(lèi),對(duì)數(shù)據(jù)進(jìn)行標(biāo)注,并將結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)中,為系統(tǒng)實(shí)現(xiàn)微博文章的輿論分析、輿情發(fā)展趨勢(shì),以及正負(fù)面輿論占比等奠定數(shù)據(jù)基礎(chǔ)。
系統(tǒng)基于B/S采用前后端分離的技術(shù),首先采用Scrapy 采集數(shù)據(jù),使用Django+MySQL 搭建系統(tǒng)后端平臺(tái),前端采用Vue+Element Plus+Echarts構(gòu)建前端應(yīng)用UI界面和圖表。
系統(tǒng)后端采用PyCharm 集成開(kāi)發(fā)環(huán)境、程序開(kāi)發(fā)語(yǔ)言Python,搭配Django 框架。使用Django 框架開(kāi)發(fā)程序的流程包括:①首先創(chuàng)建Django 項(xiàng)目。②創(chuàng)建APP 子應(yīng)用,為了提高代碼的利用率,將相同功能模塊的代碼放在同一個(gè)子應(yīng)用,可實(shí)現(xiàn)代碼復(fù)用。③設(shè)計(jì)模型類(lèi)并進(jìn)行數(shù)據(jù)庫(kù)的遷移。系統(tǒng)定義數(shù)據(jù)微博文章類(lèi)和微博文章情感類(lèi),模型的數(shù)據(jù)來(lái)源為爬蟲(chóng)爬取的數(shù)據(jù)以及情感分析處理后的數(shù)據(jù)。④定義視圖view.py,在子應(yīng)用的view.py 定義視圖函數(shù),函數(shù)會(huì)返回包含被請(qǐng)求頁(yè)面內(nèi)容的HttpResponse對(duì)象,該對(duì)象用于向客戶(hù)端Vue 返回json 數(shù)據(jù),通過(guò)在Models 中定義類(lèi),采用objects.filter()函數(shù)過(guò)濾數(shù)據(jù)庫(kù)中數(shù)據(jù)。⑤創(chuàng)建模板,使用模板方法可以動(dòng)態(tài)生成HTML。由于項(xiàng)目使用Django+Vue 前后端分離的技術(shù),模板主要通過(guò)Vue 打包生成項(xiàng)目,打包完成后,生成dist 目錄,該目錄下包含index.htm。
系統(tǒng)前端采用Vue 3.0+Element Plus+Echarts開(kāi)發(fā)框架。Element Plus 是一款基于Vue3.X的頁(yè)面結(jié)構(gòu)框架,此框架提供一套完整的組件,包含導(dǎo)航、布局、表單、按鈕等功能豐富的組件。Vue 項(xiàng)目使用腳手架直接搭建,用Vue-router 實(shí)現(xiàn)前端路由的跳轉(zhuǎn),用Axios 向后端服務(wù)器發(fā)起get 或post 請(qǐng)求。前端頁(yè)面主要包括以下幾個(gè)模塊:①用戶(hù)注冊(cè)和登錄模塊。②微博最新文章一覽表。該模塊的來(lái)源為經(jīng)預(yù)處理后爬取的數(shù)據(jù)。③微博文章的情感分析表。該模塊能顯示文章的情感分類(lèi)情況,負(fù)面情感的文章在最前面展示,以便第一時(shí)間發(fā)現(xiàn)敏感輿論信息,如圖2所示。④微博文章的情感趨向圖。系統(tǒng)采用柱狀圖、餅圖對(duì)微博文章情感趨向進(jìn)行統(tǒng)計(jì),如圖3所示。
圖2 微博文章情感分類(lèi)表
圖3 文章情感趨向圖
本文采用Django+Vue 框架,快速搭建基于新浪微博的學(xué)校網(wǎng)絡(luò)輿情系統(tǒng),采用Scrapy 框架爬取學(xué)校的新浪微博文章,微博文章經(jīng)過(guò)預(yù)處理后采用BiLSTM 進(jìn)行情感分類(lèi),情感分類(lèi)的結(jié)果準(zhǔn)確率較高。學(xué)校網(wǎng)絡(luò)輿情系統(tǒng)能對(duì)學(xué)校輿情進(jìn)行監(jiān)測(cè),及時(shí)發(fā)現(xiàn)負(fù)面輿情,方便監(jiān)管部門(mén)進(jìn)行輿情的監(jiān)管。系統(tǒng)設(shè)計(jì)達(dá)到預(yù)期目標(biāo),但是系統(tǒng)功能還需要完善,主要包括:一方面,系統(tǒng)爬取的輿情信息不夠全面,只針對(duì)指定的URL 進(jìn)行搜索,尚未對(duì)信息進(jìn)行全面采集;另一方面,目前只根據(jù)情感的正負(fù)方向進(jìn)行分類(lèi),對(duì)情感強(qiáng)烈程度尚未區(qū)分。未來(lái)計(jì)劃擴(kuò)大輿情信息的采集范圍,充分挖掘數(shù)據(jù)價(jià)值。