當前位置:
首頁 > 知識 > 中文文本挖掘預處理流程總結

中文文本挖掘預處理流程總結

作者:劉建平

來源:http://www.cnblogs.com/pinard/p/6744056.html

在對文本做數據分析時,我們一大半的時間都會花在文本預處理上,而中文和英文的預處理流程稍有不同,本文就對中文文本挖掘的預處理流程做一個總結。

1. 中文文本挖掘預處理特點

首先我們看看中文文本挖掘預處理和英文文本挖掘預處理相比的一些特殊點。

首先,中文文本是沒有像英文的單詞空格那樣隔開的,因此不能直接像英文一樣可以直接用最簡單的空格和標點符號完成分詞。所以一般我們需要用分詞演算法來完成分詞,在文本挖掘的分詞原理中,我們已經講到了中文的分詞原理,這裡就不多說。

第二,中文的編碼不是utf8,而是unicode。這樣會導致在分詞的時候,和英文相比,我們要處理編碼的問題。

這兩點構成了中文分詞相比英文分詞的一些不同點,後面我們也會重點講述這部分的處理。當然,英文分詞也有自己的煩惱,這個我們在以後再講。了解了中文預處理的一些特點後,我們就言歸正傳,通過實踐總結下中文文本挖掘預處理流程。

2. 中文文本挖掘預處理一:數據收集

在文本挖掘之前,我們需要得到文本數據,文本數據的獲取方法一般有兩種:使用別人做好的語料庫和自己用爬蟲去在網上去爬自己的語料數據。

對於第一種方法,常用的文本語料庫在網上有很多,如果大家只是學習,則可以直接下載下來使用,但如果是某些特殊主題的語料庫,比如"機器學習"相關的語料庫,則這種方法行不通,需要我們自己用第二種方法去獲取。

對於第二種使用爬蟲的方法,開源工具有很多,通用的爬蟲我一般使用beautifulsoup。但是我們我們需要某些特殊的語料數據,比如上面提到的"機器學習"相關的語料庫,則需要用主題爬蟲(也叫聚焦爬蟲)來完成。這個我一般使用ache。 ache允許我們用關鍵字或者一個分類演算法來過濾出我們需要的主題語料,比較強大。

3. 中文文本挖掘預處理二:除去數據中非文本部分

這一步主要是針對我們用爬蟲收集的語料數據,由於爬下來的內容中有很多html的一些標籤,需要去掉。少量的非文本內容的可以直接用Python的正則表達式(re)刪除, 複雜的則可以用beautifulsoup來去除。去除掉這些非文本的內容後,我們就可以進行真正的文本預處理了。

4. 中文文本挖掘預處理三:處理中文編碼問題

由於Python2不支持unicode的處理,因此我們使用Python2做中文文本預處理時需要遵循的原則是,存儲數據都用utf8,讀出來進行中文相關處理時,使用GBK之類的中文編碼,在下面一節的分詞時,我們再用例子說明這個問題。

5. 中文文本挖掘預處理四:中文分詞

常用的中文分詞軟體有很多,個人比較推薦結巴分詞。安裝也很簡單,比如基於Python的,用"pip install jieba"就可以完成。下面我們就用例子來看看如何中文分詞。

首先我們準備了兩段文本,這兩段文本在兩個文件中。兩段文本的內容分別是nlptest0.txt和nlptest2.txt:

沙瑞金向毛婭打聽他們家在京州的別墅,毛婭笑著說,王大路事業有成之後,要給歐陽菁和她公司的股權,她們沒有要,王大路就在京州帝豪園買了三套別墅,可是李達康和易學習都不要,這些房子都在王大路的名下,歐陽菁好像去住過,毛婭不想去,她覺得房子太大很浪費,自己家住得就很踏實。

我們先講文本從第一個文件中讀取,並使用中文GBK編碼,再調用結巴分詞,最後把分詞結果用uft8格式存在另一個文本nlp_test1.txt

中。代碼如下:

輸出的文本內容如下:

可以發現對於一些人名和地名,jieba處理的不好,不過我們可以幫jieba加入辭彙如下:

現在我們再來進行讀文件,編碼,分詞,編碼和寫文件,代碼如下:

輸出的文本內容如下:

基本已經可以滿足要求。同樣的方法我們對第二段文本nlptest2.txt進行分詞和寫入文件nlptest3.txt。

輸出的文本內容如下:

可見分詞效果還不錯。

6. 中文文本挖掘預處理五:引入停用詞

在上面我們解析的文本中有很多無效的詞,比如"著","和",還有一些標點符號,這些我們不想在文本分析的時候引入,因此需要去掉,這些詞就是停用詞。常用的中文停用詞表是1208個,下載地址在這。當然也有其他版本的停用詞表,不過這個1208詞版是我常用的。

在我們用scikit-learn做特徵處理的時候,可以通過參數stop_words來引入一個數組作為停用詞表。

現在我們將停用詞表從文件讀出,並切分成一個數組備用:

7. 中文文本挖掘預處理六:特徵處理

現在我們就可以用scikit-learn來對我們的文本特徵進行處理了,在文本挖掘預處理之向量化與Hash Trick中,我們講到了兩種特徵處理的方法,向量化與Hash Trick。而向量化是最常用的方法,因為它可以接著進行TF-IDF的特徵處理。在文本挖掘預處理之TF-IDF中,我們也講到了TF-IDF特徵處理的方法。這裡我們就用scikit-learn的TfidfVectorizer類來進行TF-IDF特徵處理。

TfidfVectorizer類可以幫助我們完成向量化,TF-IDF和標準化三步。當然,還可以幫我們處理停用詞。

現在我們把上面分詞好的文本載入內存:

這裡的輸出還是我們上面分完詞的文本。現在我們可以進行向量化,TF-IDF和標準化三步處理了。注意,這裡我們引入了我們上面的停用詞表。

部分輸出如下:

我們再來看看每次詞和TF-IDF的對應關係:

部分輸出如下:

8. 中文文本挖掘預處理七:建立分析模型

有了每段文本的TF-IDF的特徵向量,我們就可以利用這些數據建立分類模型,或者聚類模型了,或者進行主題模型的分析。比如我們上面的兩段文本,就可以是兩個訓練樣本了。此時的分類聚類模型和之前講的非自然語言處理的數據分析沒有什麼兩樣。因此對應的演算法都可以直接使用。而主題模型是自然語言處理比較特殊的一塊,這個我們後面再單獨講。

9.中文文本挖掘預處理總結

上面我們對中文文本挖掘預處理的過程做了一個總結,希望可以幫助到大家。需要注意的是這個流程主要針對一些常用的文本挖掘,並使用了詞袋模型,對於某一些自然語言處理的需求則流程需要修改。比如我們涉及到詞上下文關係的一些需求,此時不能使用詞袋模型。而有時候我們對於特徵的處理有自己的特殊需求,因此這個流程僅供自然語言處理入門者參考。

下一篇我們來總結英文文本挖掘預處理流程,盡情期待。

題圖:pexels,CC0 授權。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 編程派 的精彩文章:

通過 SQL 查詢學習 Pandas 數據處理
Python 官方推薦的一款打包工具
程序員為什麼要堅持不信任原則?
數據科學家如何使用Python和R組合完成任務
Python 面向文檔編程的正確姿勢

TAG:編程派 |