李甜華,央 啦,楊文藝,春 燕
(西藏大學(xué)信息科學(xué)與技術(shù)學(xué)院,拉薩 850000)
在自然語(yǔ)言處理中,數(shù)據(jù)集的質(zhì)量對(duì)模型的性能和準(zhǔn)確性有著至關(guān)重要的影響。數(shù)據(jù)集構(gòu)建是自然語(yǔ)言處理中的一個(gè)重要環(huán)節(jié),需要收集大量的文本數(shù)據(jù),并對(duì)這些數(shù)據(jù)進(jìn)行標(biāo)注和清洗,以便用于訓(xùn)練和評(píng)估自然語(yǔ)言處理模型[1]。
在中文自然語(yǔ)言處理領(lǐng)域,有很多公開(kāi)成熟的數(shù)據(jù)集可以獲取,但藏文數(shù)據(jù)集公開(kāi)程度低,大部分為實(shí)驗(yàn)室內(nèi)部使用,無(wú)法通過(guò)公開(kāi)渠道獲取。因此需要自建數(shù)據(jù)集以便更好地滿足研究要求。
《中國(guó)藏族網(wǎng)》藏文版包含了大量關(guān)于西藏公開(kāi)的新聞報(bào)道,是一個(gè)方便快捷的藏文語(yǔ)料來(lái)源。本文采用半自動(dòng)標(biāo)注的構(gòu)建方法,基于爬蟲(chóng)技術(shù)從該網(wǎng)站獲取充足的原始語(yǔ)料[2]。利用WPF 新一代Windows 界面開(kāi)發(fā)技術(shù)設(shè)計(jì)快速高效、開(kāi)發(fā)友好的界面[3],導(dǎo)入通過(guò)人工標(biāo)注的大量的人名、地名和機(jī)構(gòu)名三類命名實(shí)體庫(kù),對(duì)采集的原始數(shù)據(jù)集進(jìn)行粗篩選,大幅降低了數(shù)據(jù)構(gòu)建的工作量。
數(shù)據(jù)爬蟲(chóng)技術(shù)是一種自動(dòng)化獲取互聯(lián)網(wǎng)上數(shù)據(jù)的技術(shù),也稱為網(wǎng)絡(luò)爬蟲(chóng)、網(wǎng)絡(luò)蜘蛛或網(wǎng)絡(luò)機(jī)器人。它可以模擬人類在互聯(lián)網(wǎng)上的行為,自動(dòng)訪問(wèn)網(wǎng)站、抓取數(shù)據(jù)、解析數(shù)據(jù)并存儲(chǔ)到本地或數(shù)據(jù)庫(kù)中[4]。通常包括以下幾個(gè)步驟:
(1)確定目標(biāo)網(wǎng)站:確定需要的目標(biāo)網(wǎng)站,了解網(wǎng)站的結(jié)構(gòu)和數(shù)據(jù)類型;
(2)編寫(xiě)爬蟲(chóng)程序:根據(jù)目標(biāo)網(wǎng)站的結(jié)構(gòu)和數(shù)據(jù)類型,編寫(xiě)相應(yīng)程序;
(3)發(fā)送請(qǐng)求:爬蟲(chóng)程序向目標(biāo)網(wǎng)站發(fā)送請(qǐng)求,獲取網(wǎng)頁(yè)源代碼;
(4)解析數(shù)據(jù):爬蟲(chóng)程序解析源代碼,可使用正則表達(dá)式、XPath、CSS 選擇器等提取數(shù)據(jù);
(5)存儲(chǔ)數(shù)據(jù):將解析后的數(shù)據(jù)存儲(chǔ)到本地文件或數(shù)據(jù)庫(kù)中。
WPF(Windows presentation foundation)是微軟推出的一種基于.NET Framework 的用戶界面框架,它提供了一種基于XAML(extensible application markup language)的聲明式編程模型,提供了一種高度可定制的用戶界面設(shè)計(jì)方案,可以大大提高應(yīng)用程序的用戶體驗(yàn)和開(kāi)發(fā)效率[5]。包含如下核心技術(shù):
(1)XAML:是一種基于XML 的標(biāo)記語(yǔ)言,用于描述WPF 應(yīng)用程序的用戶界面。開(kāi)發(fā)人員可以將用戶界面的布局、樣式、動(dòng)畫(huà)等元素定義為標(biāo)記,實(shí)現(xiàn)可重用性和可維護(hù)性;
(2)數(shù)據(jù)綁定:可將數(shù)據(jù)模型與用戶界面元素進(jìn)行綁定,實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)更新和同步。數(shù)據(jù)綁定可以大大簡(jiǎn)化開(kāi)發(fā)人員的工作,提高應(yīng)用程序的可維護(hù)性和可擴(kuò)展性;
(3)樣式模板:可對(duì)用戶界面元素進(jìn)行樣式化和模板化。樣式和模板可以大大提高用戶界面的可定制性和可重用性,同時(shí)也可以提高開(kāi)發(fā)人員的工作效率;
(4)動(dòng)畫(huà)轉(zhuǎn)換:可實(shí)現(xiàn)用戶界面元素的動(dòng)態(tài)效果和交互效果。可提高應(yīng)用程序的用戶體驗(yàn);
(5)自定義控件:增強(qiáng)用戶界面的定制性和擴(kuò)展性,提高開(kāi)發(fā)人員的工作效率。
C#(C Sharp)是一種由微軟開(kāi)發(fā)的面向?qū)ο缶幊陶Z(yǔ)言,它是.NET Framework 的一部分,可以在Windows、Linux 和macOS 等操作系統(tǒng)上運(yùn)行,具有以下特點(diǎn)[6]:
(1)簡(jiǎn)單易學(xué):C#語(yǔ)法結(jié)構(gòu)簡(jiǎn)單、清晰,易于學(xué)習(xí)和理解。它采用了類似于C++和Java的語(yǔ)法,同時(shí)也借鑒了其他編程語(yǔ)言的優(yōu)點(diǎn),如Python的簡(jiǎn)潔性和Ruby的靈活性;
(2)面向?qū)ο螅阂环N面向?qū)ο缶幊陶Z(yǔ)言,支持封裝、繼承和多態(tài)等面向?qū)ο蟮奶匦裕?/p>
(3)安全性高:提供了多種安全機(jī)制,如類型安全、內(nèi)存安全、異常處理等,可以有效地防止代碼中的漏洞和錯(cuò)誤;
(4)跨平臺(tái)性:可在多個(gè)操作系統(tǒng)上運(yùn)行,包括Windows、Linux和macOS等;
(5)豐富類庫(kù):包括.NET Framework 和.NET Core 等,這些類庫(kù)可以幫助開(kāi)發(fā)人員快速地實(shí)現(xiàn)各種功能,如文件操作、網(wǎng)絡(luò)通信、圖形界面等。
八爪魚(yú)是一款功能強(qiáng)大的網(wǎng)絡(luò)爬蟲(chóng)工具,可以幫助用戶快速、高效地抓取互聯(lián)網(wǎng)上的數(shù)據(jù)。以下是八爪魚(yú)爬蟲(chóng)工具的介紹:
(1)界面友好:提供了直觀、易用的界面,通過(guò)簡(jiǎn)單的拖拽和配置,創(chuàng)建自己的爬蟲(chóng)任務(wù);
(2)多種數(shù)據(jù)抓取方式:包括網(wǎng)頁(yè)、API、RSS、FTP抓取等;
(3)數(shù)據(jù)處理功能:包括數(shù)據(jù)的清洗、轉(zhuǎn)換和數(shù)據(jù)合并等,可快速處理和分析抓取的數(shù)據(jù);
(4)多種輸出方式:包括Excel、CSV、JSON、XML等;
(5)自動(dòng)化任務(wù)調(diào)度:可定時(shí)執(zhí)行爬蟲(chóng)任務(wù),自動(dòng)抓取和處理數(shù)據(jù)。
藏文數(shù)據(jù)集半自動(dòng)構(gòu)建器由數(shù)據(jù)爬蟲(chóng)和數(shù)據(jù)篩選兩部分組成。其中,數(shù)據(jù)爬蟲(chóng)部分通過(guò)八爪魚(yú)采集器設(shè)計(jì)采集任務(wù)快速實(shí)現(xiàn),設(shè)置目標(biāo)網(wǎng)站為《中國(guó)藏族網(wǎng)》藏文版,快速抓取網(wǎng)站中的新聞報(bào)道正文并導(dǎo)出CSV文件。
數(shù)據(jù)篩選則通過(guò)WPF 進(jìn)行界面設(shè)計(jì),可導(dǎo)入抓取的CSV 文件和命名實(shí)體庫(kù),基于C#編程語(yǔ)言進(jìn)行編寫(xiě)篩選邏輯,拆分語(yǔ)料的語(yǔ)句,批量處理,提取其中命中了實(shí)體的語(yǔ)句。處理結(jié)束后導(dǎo)出數(shù)據(jù)。整體結(jié)構(gòu)設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
圖2 目標(biāo)網(wǎng)頁(yè)采集配置
在八爪魚(yú)采集器中創(chuàng)建任務(wù)“藏文命名實(shí)體爬蟲(chóng)”,設(shè)置其采集頁(yè)面起始網(wǎng)址為:https://ti.tibet3.com/news/tibet/xz/,使用八爪魚(yú)瀏覽器可自由點(diǎn)擊并選取需要爬取的頁(yè)面元素。
本文需要采集的字段有文章標(biāo)題、發(fā)表時(shí)間、記者、瀏覽次數(shù)和正文內(nèi)容五個(gè)部分。進(jìn)入其中一個(gè)正文報(bào)道后,通過(guò)點(diǎn)擊頁(yè)面中的元素設(shè)計(jì)采集字段,預(yù)覽圖如圖3所示。
圖3 數(shù)據(jù)集字段設(shè)計(jì)
通過(guò)加入循環(huán)的處理邏輯,可以采集多頁(yè)的數(shù)據(jù),最終爬蟲(chóng)任務(wù)設(shè)計(jì)流程如圖4所示。
圖4 八爪魚(yú)采集器爬蟲(chóng)流程設(shè)計(jì)圖
3.2.1 整體設(shè)計(jì)
拆分部分基于集成開(kāi)發(fā)環(huán)境Visual Studio 2019設(shè)計(jì)開(kāi)發(fā),由前臺(tái)和后臺(tái)兩部分組成,前臺(tái)通過(guò)編寫(xiě)樣式和模板,以及基于XAML 代碼設(shè)計(jì)程序界面實(shí)現(xiàn);后臺(tái)通過(guò)C#代碼實(shí)現(xiàn)拆分邏輯。前后臺(tái)通過(guò)MVVM(框架如圖5所示)設(shè)計(jì)模式實(shí)現(xiàn)拆分邏輯和頁(yè)面分離[7]。
藏文數(shù)據(jù)集半自動(dòng)構(gòu)建器模塊包含頁(yè)面公共工具模塊、數(shù)據(jù)導(dǎo)入模塊、拆分模塊、結(jié)果展示模塊四部分。如圖6所示。
圖6 藏文數(shù)據(jù)集半自動(dòng)構(gòu)建器模塊設(shè)計(jì)
3.2.2 拆分算法實(shí)現(xiàn)
拆分算法采用基于滑動(dòng)窗口的命名實(shí)體匹配算法,通過(guò)字符串處理實(shí)現(xiàn)。處理流程如圖7所示。具體流程為:通過(guò)藏文懸垂符和空格將文本拆分成單個(gè)句子,再將單個(gè)句子通過(guò)隔音符拆分成單個(gè)藏文字符,通過(guò)滑動(dòng)窗口動(dòng)態(tài)拼接藏文字符組成藏文短語(yǔ),再放入實(shí)體庫(kù)中比較,將命中實(shí)體的窗口進(jìn)行拆分,進(jìn)而將實(shí)體詞從語(yǔ)句中進(jìn)行拆分,并輸出該語(yǔ)句。
圖7 拆分算法流程圖
3.3.1 爬蟲(chóng)效果展示
八爪魚(yú)爬蟲(chóng)采集器運(yùn)行效果如圖8 所示,在2 小時(shí)31 分內(nèi),打開(kāi)了1287 條報(bào)道,并爬取了相應(yīng)內(nèi)容,平均每分鐘可采集8條報(bào)道。最終將結(jié)果導(dǎo)出為Excel表格文件,如圖9所示。
圖9 爬蟲(chóng)結(jié)果
3.3.2 拆分界面展示
拆分頁(yè)面設(shè)計(jì)如圖10 所示,在拆分頁(yè)面分別點(diǎn)擊打開(kāi)人名數(shù)據(jù)集、地名數(shù)據(jù)集和機(jī)構(gòu)數(shù)據(jù)集,導(dǎo)入實(shí)體庫(kù),并在左下方三個(gè)Tab頁(yè)進(jìn)行顯示。再點(diǎn)擊提取關(guān)鍵句,導(dǎo)入爬取的Excel 原始數(shù)據(jù),程序?qū)?zhí)行拆分算法,并將結(jié)果導(dǎo)出為CSV文件。
圖10 拆分頁(yè)面展示圖
3.3.3 拆分結(jié)果展示
拆分算法執(zhí)行完后,共命中實(shí)體語(yǔ)句7036條,導(dǎo)出結(jié)果如圖11所示。
圖11 拆分結(jié)果展示
基于爬蟲(chóng)和WPF 技術(shù)的藏文命名實(shí)體數(shù)據(jù)集半自動(dòng)構(gòu)建器設(shè)計(jì)為快速高效地從公開(kāi)的藏文數(shù)據(jù)集網(wǎng)絡(luò)上獲取命名實(shí)體數(shù)據(jù),可在一定程度降低藏文數(shù)據(jù)集自建難度,提高構(gòu)建效率。該設(shè)計(jì)采用了應(yīng)用成熟、上手難度低的八爪魚(yú)采集器作為數(shù)據(jù)爬取部分;拆分部分采用WPF技術(shù)設(shè)計(jì)了較為美觀,操作簡(jiǎn)單的用戶界面。基于C#編程語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)基于窗口的命名實(shí)體匹配及拆分算法。