朱毅 郭樂(lè)詩(shī)
(大連外國(guó)語(yǔ)大學(xué)軟件學(xué)院 遼寧省大連市 116044)
Selenium 是一個(gè)用于Web 應(yīng)用程序測(cè)試的工具,選擇要爬取的頁(yè)面,通過(guò)webdriver 模塊來(lái)獲取網(wǎng)頁(yè)請(qǐng)求信息,成功訪問(wèn)網(wǎng)頁(yè)后,定位領(lǐng)導(dǎo)人講話的講話標(biāo)題時(shí),使用find_elements_by_xpath來(lái)獲得講話的標(biāo)題,定位講話的詳細(xì)信息時(shí),需要獲取新的link,獲取新的網(wǎng)頁(yè)請(qǐng)求,通過(guò)selenium 的模擬用戶點(diǎn)擊操作進(jìn)入講話詳情信息界面,獲取領(lǐng)導(dǎo)人講話的詳細(xì)信息。當(dāng)爬取成功當(dāng)下講話時(shí),要想爬取下一條政治講話詳細(xì)信息,需要返回標(biāo)題界面,使用selenium 中的back()函數(shù)就可以返回到上一個(gè)標(biāo)題界面,將語(yǔ)句套在循環(huán)中進(jìn)行遍歷,直到爬取完最后一個(gè)講話詳情信息。
該項(xiàng)目采用django 框架進(jìn)行數(shù)據(jù)展示。Django 是一個(gè)開(kāi)放的源代碼的Web 應(yīng)用框架,可以將數(shù)據(jù)庫(kù)和html 等前端的開(kāi)發(fā)和后端開(kāi)發(fā)設(shè)計(jì)融合在一起。使設(shè)計(jì)者能夠更加靈活的進(jìn)行設(shè)計(jì)網(wǎng)站。
2.1.1 判斷路徑
Django 框架收到瀏覽器請(qǐng)求時(shí),首先截取http://127.0.0.1:8000/speechdetail/ 得到speechdetail 字符。 在setting.py 文件中通過(guò)ROOT_URLCONF 判斷urls.py 文件。在urls.py 文件中匹配path('speechdetail/',views.speech_detail,name='speech_detail'),根據(jù)正則表達(dá)式,若匹配則調(diào)用相應(yīng)的view 中的函數(shù),跳轉(zhuǎn)相應(yīng)的HTML 頁(yè)面。
2.1.2 匹配語(yǔ)句
View.py 文件中的speech_detail()的函數(shù)是顯示政治語(yǔ)句的函數(shù)。用request.POST['title'],獲取到要進(jìn)入的政治語(yǔ)句的標(biāo)題,調(diào)用speechdao.py 中的getSentences()函數(shù)。
2.1.3 調(diào)用數(shù)據(jù)庫(kù)
speech.py 中使用filter 函數(shù)在數(shù)據(jù)庫(kù)中找到對(duì)應(yīng)政治標(biāo)題的政治語(yǔ)句的詳細(xì)信息找到對(duì)應(yīng)語(yǔ)句的算法為“sents=sentModels.objects.filter(sentences_title=title)”找到之后將找到的語(yǔ)句信息返回給speech_detail.html 文件,交給瀏覽器,在頁(yè)面中顯示出政治語(yǔ)句的詳細(xì)信息。
2.1.4 顯示語(yǔ)句
圖1:政治講話信息展示圖
而在speech_detail.html 中使用了{(lán){sent.sentences}}標(biāo)簽,顯示政治語(yǔ)句的詳細(xì)信息,使用了{(lán){sent.Metaphor}}標(biāo)簽,顯示政治語(yǔ)句所對(duì)應(yīng)的隱喻類型。使用了{(lán){sent.sent_editor}}標(biāo)簽,顯示了標(biāo)注該句子隱喻的用戶。
政治講話信息展示如圖1所示。
在政治講話中經(jīng)常使用和出現(xiàn)的隱喻類型大體分為以下幾種:建設(shè)隱喻,旅途隱喻,容器隱喻,管道隱喻,擬人隱喻,方位隱喻,家庭隱喻,概念隱喻,實(shí)體隱喻,戰(zhàn)爭(zhēng)隱喻。
用戶要對(duì)政治語(yǔ)句進(jìn)行人工隱喻標(biāo)注時(shí),點(diǎn)擊要標(biāo)注的政治語(yǔ)句的添加標(biāo)注按鈕,獲取到路徑’/insertM/’,在urls.py 文件中進(jìn)行逐條匹配’path(‘preinsertMetaphor/’,views.preinsertMetaphor)’進(jìn)行正則判斷。
用戶人工隱喻標(biāo)注如圖2所示。
從網(wǎng)頁(yè)上直接爬取的數(shù)據(jù)往往會(huì)帶有網(wǎng)頁(yè)標(biāo)簽或是其他不規(guī)則的字符,這時(shí)就需要對(duì)爬取的數(shù)據(jù)進(jìn)行清洗,得到想要的干凈的數(shù)據(jù)。先使用Beautiful 中的BeautifulSoup(text,'html.parser').get_text()語(yǔ)句,去掉文本中的網(wǎng)頁(yè)標(biāo)簽只留下純文本類型。再使用jieba.cut()對(duì)文本進(jìn)行分詞處理,最后對(duì)已經(jīng)分過(guò)詞的文本進(jìn)行去停用詞處理,最后得到經(jīng)過(guò)清洗的文本數(shù)據(jù)。
圖2:人工隱喻標(biāo)注示意圖
使用gensim 模塊訓(xùn)練詞嵌入模型。將已經(jīng)清洗過(guò)的文本數(shù)據(jù)放入一個(gè)詞向量為300 維,詞頻均大于40 的模型中,使用word2vec 進(jìn)行模型訓(xùn)練,將訓(xùn)練的結(jié)果存儲(chǔ)為model 類型。讀入之前訓(xùn)練好的Word2Vec 模型,根據(jù)word2vec 的結(jié)果對(duì)訓(xùn)練集的政治語(yǔ)句進(jìn)行編碼。對(duì)政治語(yǔ)句則使用K-Means 進(jìn)行聚類編碼。使用model.wv.syn0 函數(shù)載入模型,對(duì)文本數(shù)據(jù)進(jìn)行分割詞向量創(chuàng)建簇,劃分結(jié)束后的每一個(gè)單詞的聚類都存儲(chǔ)在idx 當(dāng)中,將所Word2Vec生成的詞匯表壓縮成一個(gè)單詞為下標(biāo),每一個(gè)單詞映射為簇編號(hào)的字典。在將政治語(yǔ)句轉(zhuǎn)換成cluster bag vectors 時(shí),使用的就不再是單一的單詞,而是語(yǔ)義相關(guān)的簇。遍歷政治語(yǔ)句時(shí),如果單詞在詞匯表中則單詞所在簇加一。遍歷結(jié)束后將遍歷結(jié)果存儲(chǔ)在數(shù)組中,這時(shí)再將政治語(yǔ)句轉(zhuǎn)換成數(shù)據(jù)向量作為訓(xùn)練集特征。政治語(yǔ)句的數(shù)據(jù)向量如圖3所示。
使用RandomForestClassifier()函數(shù)對(duì)訓(xùn)練集進(jìn)行建模分析,利用訓(xùn)練集中已經(jīng)標(biāo)注好的政治語(yǔ)句的所屬隱喻進(jìn)行建模分析。建好模后進(jìn)行一下測(cè)試,先對(duì)訓(xùn)練集進(jìn)行一下預(yù)測(cè),以此來(lái)判斷一下模型的構(gòu)建是否成功。使用forest.predict()對(duì)訓(xùn)練集中的政治語(yǔ)句進(jìn)行預(yù)測(cè),預(yù)測(cè)之后再使用混淆矩陣以及confusion_matrix()算法對(duì)隨機(jī)森林預(yù)測(cè)的結(jié)果是否準(zhǔn)確進(jìn)行判斷。
用戶單擊選擇系統(tǒng)中的自動(dòng)識(shí)別部分,則跳轉(zhuǎn)運(yùn)行已經(jīng)訓(xùn)練好的分類器,用戶輸入需要進(jìn)行識(shí)別的政治語(yǔ)句,系統(tǒng)將對(duì)政治語(yǔ)句進(jìn)行數(shù)據(jù)預(yù)處理、語(yǔ)句轉(zhuǎn)換編碼、隨機(jī)森林預(yù)測(cè)等操作,最后將識(shí)別的結(jié)果顯示在界面上。隱喻識(shí)別結(jié)果如圖4所示。
中文政治隱喻自動(dòng)識(shí)別系統(tǒng)主要完成了以下幾種工作:
通過(guò)selenium 爬取國(guó)家領(lǐng)導(dǎo)人講話信息作為基礎(chǔ)語(yǔ)料,使用jieba 等模塊對(duì)講話信息進(jìn)行預(yù)處理,將清洗成功的文本使用word2vec 生成詞向量模型。
圖3:政治語(yǔ)句的數(shù)據(jù)向量圖
圖4:隱喻識(shí)別結(jié)果圖
搭建Django 項(xiàng)目框架,創(chuàng)建數(shù)據(jù)庫(kù)表,把國(guó)家領(lǐng)導(dǎo)人政治講話信息存入數(shù)據(jù)庫(kù),利用django 框架搭建人工標(biāo)注系統(tǒng),方便用戶對(duì)政治語(yǔ)句進(jìn)行人工隱喻標(biāo)注。將標(biāo)記的結(jié)果作為訓(xùn)練集。使用隨機(jī)森林構(gòu)建分類器對(duì)政治語(yǔ)句進(jìn)行隱喻識(shí)別,并將識(shí)別的結(jié)果返回到界面。