◆金宇杰 周彥君 高谷剛 印杰
基于自然語言處理的職務犯罪文書數(shù)據(jù)庫系統(tǒng)設計與實現(xiàn)
◆金宇杰 周彥君 高谷剛 印杰通訊作者
(江蘇警官學院 計算機信息與網(wǎng)絡安全系 江蘇 210012)
職務犯罪的隱蔽性強,犯罪嫌疑人往往具有強反偵查能力,因此案件通常難以暴露。本課題基于《監(jiān)察法》視角,利用爬蟲技術在線搜集職務犯罪判決文書,進一步利用自然語言處理技術對文本進行關鍵詞分析,按數(shù)據(jù)庫關鍵詞段提取文本,進而建立職務犯罪文書數(shù)據(jù)庫系統(tǒng)。該數(shù)據(jù)庫包含職務犯罪核心信息,從而體現(xiàn)犯罪類型、現(xiàn)狀和發(fā)展趨勢,對研究職務犯罪特征,針對性完善偵查和防范措施意義重大。
職務犯罪;爬蟲;自然語言處理技術;數(shù)據(jù)庫系統(tǒng)
國家機關、單位人員利用已有職權,徇私舞弊,貪污賄賂,對社會則具有腐蝕危害性。該類犯罪隱秘性高,犯罪嫌疑人往往具有強反偵查能力,案件難以暴露,是重要的一類智能型犯罪。
涉警職務犯罪隱蔽性更強。與普通的職務犯罪案件嫌疑人不同,該類案件嫌疑人作為公安民警,其身份的特殊性、職務便利和職業(yè)經(jīng)驗,具備較強的法律意識,熟悉相關案件辦理流程與查證手段,相關犯罪線索更難以發(fā)現(xiàn)。嫌疑人明顯具備了高素質(zhì)、涉獵廣、閱歷深、心理素質(zhì)好的特點,應對監(jiān)察委調(diào)查活動的反偵察能力較強,一般情況下都難以短時間突破獲取重要證據(jù)。
對上述現(xiàn)象,通過建設職務犯罪文書數(shù)據(jù)庫,可回溯職務犯罪偵查中的關鍵措施和證據(jù)的運用和收集,對進一步研究職務犯罪特征意義重大。本文引入網(wǎng)絡爬蟲與自然語言處理技術,通過網(wǎng)絡爬蟲來獲取批量判決文書,再利用自然語言處理技術從下載的判決文書中提取關鍵信息作為數(shù)據(jù)庫關鍵詞段內(nèi)容,最終形成職務犯罪文書數(shù)據(jù)庫,為進一步研究涉警職務犯罪特點提供基礎數(shù)據(jù)和關鍵信息。
網(wǎng)絡爬蟲是能夠自動從網(wǎng)頁上解析、下載數(shù)據(jù)的程序。網(wǎng)絡爬蟲本質(zhì)是互聯(lián)網(wǎng)資源的抓取、分析、過濾、存儲的過程。網(wǎng)絡爬蟲的實現(xiàn)原理及過程可以簡要概括如下(見圖1)。
圖1 網(wǎng)絡爬蟲的實現(xiàn)原理流程圖
先設定URL,之后根據(jù)該URL獲取該頁面下的子頁面URL,將其放入到URL隊列當中。讀取隊列中的URL,對獲取到的頁面進行數(shù)據(jù)解析以及持久化存儲,獲取重復上述的操作,直到滿足一定條件才停止。
網(wǎng)絡爬蟲按照系統(tǒng)結(jié)構和實現(xiàn)技術,大致可以分為以下幾種類型:通用網(wǎng)絡爬蟲、聚焦網(wǎng)絡爬蟲增量式網(wǎng)絡爬蟲、深層網(wǎng)絡爬蟲[1]。實際的網(wǎng)絡爬蟲系統(tǒng)通常是幾種爬蟲技術相結(jié)合實現(xiàn)的。本文基于通用網(wǎng)絡爬蟲技術對相關文本數(shù)據(jù)進行獲取。
網(wǎng)絡爬蟲在短時間內(nèi)大量訪問,占用了服務器帶寬。該過程可能會阻礙正常用戶訪問,甚至導致服務器崩潰。另外,數(shù)據(jù)已成為一個公司的核心資產(chǎn),企業(yè)需要保護自身的核心數(shù)據(jù),以維持或提升自身的核心競爭力,因此反爬蟲非常重要。常見的反爬蟲手段包括統(tǒng)計IP訪問限制、單個session訪問量以及單個User-agent的訪問,基于網(wǎng)站流量統(tǒng)計和日志分析反爬蟲,添加驗證碼限制等。
早期簡單網(wǎng)頁采取靜態(tài)網(wǎng)頁方式,內(nèi)容都包含在Html源碼里,爬蟲通過偽造請求,獲取網(wǎng)頁Html源碼并分析Html源碼,就能提取出自己想要的數(shù)據(jù)[2]。隨著網(wǎng)頁技術的發(fā)展,動態(tài)網(wǎng)頁[3]逐漸成為主流。有些網(wǎng)站采用Ajax技術,即異步JavaScript和XML。該技術與服務器交換數(shù)據(jù),在不重新加載整個頁面的情況下,能夠更新部分頁面,也是一種很好的反爬蟲手段。在爬蟲程序中如果未傳任何參數(shù),只是單純訪問、分析Html源碼,將無法獲取有效的數(shù)據(jù)。
處理動態(tài)網(wǎng)頁主要有下面這些方法:可以根據(jù)網(wǎng)頁Ajax請求進行分析,用爬蟲直接請求其對應接口獲取數(shù)據(jù),但是這種分析較復雜,更簡便的方法是使用Selenium[4]。Selenium是基于Python的第三方Web應用程序庫,最初是一個自動化測試工具。其本質(zhì)是通過驅(qū)動瀏覽器,達到模擬瀏覽器的操作??梢酝ㄟ^代碼控制與頁面上元素進行交互,也可以獲取指定元素的內(nèi)容。無需進行API分析,抓包,數(shù)據(jù)分析等操作,便于使用。
通過Selenium使得瀏覽器完成自動化的操作,可以有效解決網(wǎng)頁動態(tài)加載問題。其訪問形式跟正常用戶使用瀏覽器大體相似,不容易被反爬蟲檢測到。不足之處是Selenium需要生成一個瀏覽器環(huán)境,才可進行下一步的相應操作。所以速度相較于構造請求慢一些。
隨著人工智能的飛速發(fā)展,自然語言處理技術在生活中的應用處處可見。自然語言處理(Natural Language Processing,簡稱NLP)是人工智能和語言學交叉領域下的分支學科。該領域主要探討如何處理及運用自然語言、自然語言認識、自然語言生成系統(tǒng),以及自然語言理解系統(tǒng)[5]。
“自然語言”指的是生活中溝通所使用的文字、語音、視頻等。人們所使用的語言,如:漢語、英語、法語、日語等語言都是屬于這個范疇。至于對“處理”,則是將文字語音等信息數(shù)字化處理的一種技術。
如圖2所示,自然語言處理的工作原理可以大致主要分成如下幾個步驟:第一步獲取語料。第二步對語料進行形式化描述,即對語料建立數(shù)學化模型。第三步算法化,將數(shù)學模型表示為算法的過程。第四步模型訓練,包括傳統(tǒng)的有監(jiān)督、半監(jiān)督和無監(jiān)督學習模型等,可根據(jù)應用需求不同進行選擇[6]。第五步就是實用化,對訓練出來的模型進行測評改進,最終滿足現(xiàn)實需求。
圖2 自然語言處理流程圖
針對上述五個步驟進行簡單的介紹:文本獲取大多采用網(wǎng)絡爬蟲或本地文本數(shù)據(jù)集。語料預處理階段主要包括對收集來的語料、文本進行分詞、詞性標注和去停頓詞等操作。特征化處理過程是對完成預處理的文本進行向量化,將完成分詞的詞語以向量形式表示,以便計算機能夠?qū)ζ溥M行計算。在模型訓練環(huán)節(jié),訓練方法主要有監(jiān)督、非監(jiān)督和半監(jiān)督學習模型等,具體使用的模型需要根據(jù)不同的應用場景進行選擇。針對建模后的效果進行評價,常用的效果評估指標有準確率、召回率等[7]。
文本當中關鍵詞能夠表示文本的主題思想,是本文建立數(shù)據(jù)庫字段關鍵參考依據(jù)。當前對于文本關鍵詞提取,大多數(shù)采用人工標注的手段。隨著海量數(shù)據(jù)以及需求增長,該方法消耗大量人力與時間,效率不高。于是借助計算機自動進行關鍵詞提取的方法受到了越來目前針對文本關鍵詞的提取,為了取得良好的效果,大都采用專家標準的方法,但是面對日益增多的海量文本信息和迫切的應用需求,人工標注已經(jīng)顯得力不從心。于是借助計算機自動進行關鍵詞提取的方法受到了越來越多的重視,已經(jīng)成為自然語言處理領域的一個研究熱點[8]。下面介紹兩種關鍵詞提取模型。
(1)條件概率與樸素貝葉斯模型
貝葉斯定理主要是用來描述兩個條件概率之間關系的問題。用來計算事件B在事件A發(fā)生時的概率情況。記為:P(A|B),該條件概率可表示為:
可以根據(jù)公式(2.1)歸納出n個隨機變量的聯(lián)合概率分布公式:
最后,按照下面的公式計算出每一個特征詞的特征權值:
關鍵詞提取方法主要分為監(jiān)督學習和非監(jiān)督學習兩種。監(jiān)督學習指的是通過大量數(shù)據(jù)訓練模型,利用該模型進行關鍵詞判斷。監(jiān)督學習需要事先標注高質(zhì)量的訓練數(shù)據(jù),人工預處理的代價較高[9]。非監(jiān)督學習無需進行數(shù)據(jù)訓練,簡單快速。其中TF?IDF算法即為非監(jiān)督學習算法的一種。詞語在特定文本出現(xiàn)的頻率與其TF?IDF值成正比,與其在整個文本中出現(xiàn)的頻率成反比。因此其比較偏向選取文檔區(qū)分度較大的詞,過濾掉常見詞語。TF-IDF計算特征相對簡便,因此本文便使用該算法進行關鍵詞提取。
總體架構如圖3所示。由下至上主要由數(shù)據(jù)采集層,數(shù)據(jù)預處理層,數(shù)據(jù)存儲層構成。
數(shù)據(jù)采集層:主要是通過爬蟲程序中Selenium自動化測試工具,從裁判文書網(wǎng)獲取相關數(shù)據(jù)。
數(shù)據(jù)預處理層:利用自然語言處理技術中TF-IDF算法計算特征權值,找出對應關鍵詞。
數(shù)據(jù)存儲層:在提取出關鍵詞后,利用關鍵詞作為數(shù)據(jù)庫字段參考,使用SQL Server數(shù)據(jù)庫進行職務犯罪文書數(shù)據(jù)庫系統(tǒng)的建設,并且具備管理、檢索功能。
圖3 系統(tǒng)功能模塊圖
近些年來被查處的涉警職務犯罪案件數(shù)量逐步上升,這幾年正是中央打擊腐敗、懲治受賄類犯罪的關鍵年,職務犯罪的調(diào)查處理覆蓋較為全面,查處案件較多。相關的職務犯罪類案件判決文書也在網(wǎng)上公布,如中國裁判文書網(wǎng)、北大法寶等相關文書網(wǎng)站。本文先是利用“職務犯罪”、“民警”、“警察”等詞作為關鍵詞,利用爬蟲程序進行數(shù)據(jù)批量的獲取,之后利用自然語言技術提取部分關鍵詞,獲取到具體職務與罪名,如:先將“交通警察”,“公安局民警”,“貪污賄賂”,“濫用職權罪”等幾十個關鍵詞,然后將其進行排列組合后,再分別作為索引的關鍵詞來進行數(shù)據(jù)的爬取。
以爬取中國裁判文書網(wǎng)為例,獲取裁判文書網(wǎng)數(shù)據(jù)需要登錄獲取權限才能繼續(xù)訪問網(wǎng)頁。針對這種情況,爬蟲需要構造并攜帶cookies信息。同時網(wǎng)站會對賬號訪問記錄進行統(tǒng)計,在一段時間內(nèi)超過一定訪問次數(shù),用戶的IP地址便會被禁止訪問一段時間。針對這種情況解決方法,第一種是構建自己的cookies池[10],按照一定頻率切換,但是部分網(wǎng)站的cookies信息具有時效性,因此較為麻煩。本文直接使用Selenium模擬瀏覽器操作,跳轉(zhuǎn)到登錄按鈕,自動輸入用戶賬號密碼,進行登錄,并且Selenium必須等頁面渲染加載出來才能進行下一步操作,訪問速率較低,基本不會遇到IP被禁的問題。
再利用Selenium完成對法律文書頁面源代碼有效獲取之后,將直接利用Python語言中自帶的lxml庫,利用該庫中的etree.HTML類對網(wǎng)頁源代碼進行相應處理,由此自動生成一個可使用lxml庫中自帶的xpath方法完成解析處理的對象[11]。其中,xpath方法在對被選擇對象進行處理時,采用的方法類似目錄樹,在HTML文檔的路徑中直接對源代碼結(jié)構進行準確描述,并使用"/"將上層級路徑和下層級路徑相互分隔[12]。對某頁面標簽進行定位后便可對相似的信息進行路徑的有效使用。例如,文章的標題與具體內(nèi)容網(wǎng)頁鏈接是存放在’./div/h4/a’標簽下text與href屬性當中的。便可批量獲取a標簽,進行元素提取。
具體爬蟲代碼如下:
建立一個spider函數(shù),傳入相關參數(shù),包括所需要爬取的頁數(shù)pagenumber參數(shù),爬取的網(wǎng)站url_1參數(shù),以及索引用的關鍵詞keyword1參數(shù)、keyword2參數(shù)等。傳入?yún)?shù)后調(diào)用spider函數(shù)即開始爬取相關網(wǎng)頁,最后將獲取的內(nèi)容保存在字典中,存儲到本地。
第一次利用“職務犯罪”、“民警”、“警察”等關鍵詞作為索引依據(jù)進行數(shù)據(jù)爬取。獲取到粗略的相關文本后,利用TF-IDF算法對文本進行關鍵詞提取,計算出關鍵詞的詞頻TF以及逆文檔頻率IDF,兩者相乘得到特征權值,最后將特征權值按照大小排序組成一個新集合。將排序完成的所有關鍵詞的特征權值組成一個新的集合,記作={H,H,H,······,H},為候選關鍵詞的個數(shù)。在此過程中,要注意特征權值和關鍵詞的一一對應。
Python的中文分詞工具jieba,jieba中文分詞工具內(nèi)置多個算法,支持多種模式進行分詞。jieba.analyse.extract_tags中封裝了TF-IDF算法,利用jieba.analyse.extract_tags函數(shù)直接調(diào)用TF-IDF算法來對content中的內(nèi)容進行關鍵詞提取。
def analyse(file_name,topK):
content = open(file_name, 'rb').read()
tags = jieba.analyse.extract_tags(content,topK=topK)
print(",".join(tags))
(1)E-R模型
建立職務犯罪文書數(shù)據(jù)庫E-R圖可以更加有效地在概念模式下設計數(shù)據(jù)庫,E-R圖如圖4。
圖4 E-R圖
(2)數(shù)據(jù)庫邏輯結(jié)構設計
職務犯罪文書數(shù)據(jù)庫系統(tǒng)主要面向檢察院、法律部門,以及犯罪偵查工作者。因此在設計數(shù)據(jù)庫時候需要注意符合相關特色,設計了裁判文書表、關鍵詞表、職務表、以及罪名表。裁判文書表字段包括裁判時間、文書內(nèi)容、法院層級、文書標題、裁判程序、裁判理由、罪名、職務、案件類型,以及編號,如表1所示。關鍵詞表字段包括罪名、案件類型、職務,如表2所示。職務表字段包括職務、所屬單位、以及編號,如表3所示。罪名表字段包括罪名、犯罪緣由編號,如表4所示。
表1 Document(裁判文書表)
表2 Keyword(關鍵詞表)
表3 Profession(職務表)
表4 Charge(罪名表)
該數(shù)據(jù)庫系統(tǒng)具備管理、檢索功能。管理功能是指,相關用戶可以根據(jù)文書序號來進行基本的數(shù)據(jù)庫管理,具備增刪改查等基本操作。并且可以適當調(diào)整數(shù)據(jù)庫字段內(nèi)容、以及字段長度。檢索功能:即檢索文獻,也是本數(shù)據(jù)庫設計的特色。使用者可以根據(jù)文書標題、裁判理由、罪名、職務、案件類型、關鍵詞等確立單條件、多條件、模糊檢索等功能。大大提高檢索的準率,在一定程度上節(jié)省使用者的寶貴時間與精力。
隨著文本獲取技術與自然語言處理技術的不斷發(fā)展,相關的應用也逐漸融入人們的日常生活當中,給人們帶來許多便捷。本文利用爬蟲技術與自然語言處理技術進行職務犯罪法律文書數(shù)據(jù)庫建設。系統(tǒng)設計主要包括文本獲取、關鍵詞提取、數(shù)據(jù)庫建設三個部分。
(1)由于傳統(tǒng)的直接請求方法無法獲得對應的網(wǎng)頁源代碼,本文文本獲取模塊考慮到網(wǎng)站采用Ajax動態(tài)加載技術,文使用Selenium自動化測試工具,不需要做復雜的抓包、構造請求、解析數(shù)據(jù),解決動態(tài)網(wǎng)頁內(nèi)容抓取問題。
(2)傳統(tǒng)的監(jiān)督學習提取關鍵詞方法需要對訓練數(shù)據(jù)集進行高質(zhì)量標注,該過程人工預處理的代價較高。本文使用TF-IDF非監(jiān)督學習關鍵詞提取方法,該方法選取文檔區(qū)分度較大的詞,能夠過濾掉常見詞語,速度較快,節(jié)約人工成本。
[1]張松. 同一新聞事件識別研究[D].河北大學,2017.
[2]韓貝,馬明棟,王得玉.基于Scrapy框架的爬蟲和反爬蟲研究[J].計算機技術與發(fā)展,2019,29(02):139-142.
[3]ZHENG Qinghua,WU Zhaohui,CHENG Xiaocheng, et al.Learning to crawl deep Web[J].Information Systems,2013, 38(6):801-819.
[4]洪芳.基于Selenium2的Web UI自動化測試框架的設計與實現(xiàn)[D].成都:西南交通大學,2017.
[5]唐聃. 自然語言處理理論與實戰(zhàn)[M].電子工業(yè)出版社.2018.
[6]趙京勝,宋夢雪,高祥.自然語言處理發(fā)展及應用綜述[J].信息技術與信息化,2019(07):142-145.
[7]何鎧. 基于自然語言處理的文本分類研究與應用[D].南京郵電大學,2020.
[8]牛永潔,田成龍.融合多因素的TFIDF關鍵詞提取算法研究[J].計算機技術與發(fā)展,2019,29(07):80-83.
[9]夏天.詞語位置加權TextRank的關鍵詞抽取研究[J].現(xiàn)代圖書情報技術,2013(09):30-34.
[10]李代祎,謝麗艷,錢慎一,等.基于Scrapy的分布式爬蟲系統(tǒng)的設計與實現(xiàn)[J].湖北民族學院學報(自然科學版), 2017,35(3):317-322.
[11]劉清.網(wǎng)絡爬蟲針對“反爬”網(wǎng)站的爬取策略分析[J].信息與電腦(理論版),2019(03):23-24.
[12]杜曉旭,賈小云.基于Python的新浪微博爬蟲分析[J].軟件,2019,40(04):182-185.
《監(jiān)察法》視角下的涉警職務犯罪治理對策研究(2020LX004);江蘇警官學院大學生實踐創(chuàng)新創(chuàng)業(yè)訓練計劃項目(WA2020006);浙江大學CAD&CG國家重點實驗室開放課題《異質(zhì)多源網(wǎng)絡威脅情報數(shù)據(jù)分析與可視化》(A2102)