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