目錄
1. 英文文字挖掘預處理特點
2. 英文文字挖掘預處理
2.1 預處理一:資料收集
2.2 預處理二:除去資料中非文字部分
2.3 預處理三:拼寫檢查更正
2.4 預處理四:詞幹提取(stemming)和詞形還原(lemmatization)
2.5 預處理五:轉化為小寫
2.6 預處理六:引入停用詞
2.7 預處理七:特徵處理
2.8 預處理八:建立分析模型
3. 英文文字挖掘預處理總結
在文字挖掘預處理流程總結(1)—中文中,總結了中文文字挖掘的預處理流程,這裡再對英文文字挖掘的預處理流程做乙個總結。
英文文字的預處理方法和中文的有部分區別。
(1)首先,英文文字挖掘預處理一般可以不做分詞(特殊需求除外),而中文預處理分詞是必不可少的一步。
(2)第二,大部分英文文字都是uft-8編碼,這樣在大多數處理的時候不用考慮編碼轉換的問題,而中文文字處理必須要處理unicode的編碼問題。
(3)第三,英文文字的預處理也有自己特殊的地方,就是拼寫問題,很多時候,我們的預處理要包括拼寫檢查,比如「helo world」這樣的錯誤,不能在分析的時候糾錯。所以需要在預處理前加以糾正。
(4)第四,就是詞幹提取(stemming)和詞形還原(lemmatization)。這個東西主要是英文有單數、複數和各種時態,導致乙個詞會有不同的形式。比如「countries」和"country","wolf"和"wolves",我們期望是有乙個詞。
後面的預處理中,、會重點講述第三點和第四點的處理。
這部分英文和中文類似。獲取方法一般有兩種:使用別人做好的語料庫和自己用爬蟲去在網上去爬自己的語料資料。
(2)用爬蟲去在網上去爬自己的語料資料:對於使用爬蟲的方法,開源工具有很多,通用的爬蟲一般使用beautifulsoup。但是我們需要某些特殊的語料資料,比如上面提到的「機器學習」相關的語料庫,則需要用主題爬蟲(也叫聚焦爬蟲)來完成。這個我一般使用ache。 ache允許用關鍵字或者乙個分類演算法來過濾出我們需要的主題語料,比較強大。
這一步主要是針對我們用爬蟲收集的語料資料,由於爬下來的內容中有很多html的一些標籤,需要去掉。少量的非文字內容的可以直接用python的正規表示式(re)刪除, 複雜的則可以用beautifulsoup來去除。另外還有一些特殊的非英文本元(non-alpha),也可以用python的正規表示式(re)刪除。
由於英文文字中可能有拼寫錯誤,因此一般需要進行拼寫檢查。如果確信我們分析的文字沒有拼寫問題,可以略去此步。
拼寫檢查,我們一般用pyenchant類庫完成。pyenchant的安裝很簡單:"pip install pyenchant"即可。
對於一段文字,我們可以用下面的方式去找出拼寫錯誤:
from enchant.checker import spellchecker
chkr = spellchecker("en_us").set_text("many peope likee to watch in the name of people.")
for err in chkr:
print("error:", err.word)
輸出是:
找出錯誤後,可以自己來決定是否要改正。當然,也可以用pyenchant中的wxspellcheckerdialog類,來用對話方塊的形式來互動決定是忽略、改正還是全部改正文字中的錯誤拼寫。感興趣的話可以去研究pyenchant的官方文件。error: peope
error: likee
完整**參見:github:
詞幹提取(stemming)和詞型還原(lemmatization)是英文文字預處理的特色。兩者其實有共同點,即都是要找到詞的原始形式。不同點:
(1)詞幹提取(stemming):會更加激進一點,它在尋找詞幹的時候可能得到的不是詞。比如"imaging"的詞幹可能得到的是"imag", 並不是乙個詞。
(2)詞形還原:相對保守一些,它一般只對能夠還原成乙個正確詞的詞進行處理。個人比較喜歡使用詞形還原而不是詞幹提取。
在實際應用中,一般使用nltk
import nltk
nltk.download()
在nltk中,做詞幹提取的方法有porterstemmer、lancasterstemmer和snowballstemmer。個人推薦使用snowballstemmer。這個類可以處理很多種語言,當然,除了中文。
from nltk.stem import snowballstemmer
stemmer = snowballstemmer("english") # choose a language
print(stemmer.stem("countries")) # countri
輸出是"countri",這個詞幹並不是乙個詞。而如果是做詞型還原,則一般可以使用wordnetlemmatizer類,即wordnet詞形還原方法。
from nltk.stem import wordnetlemmatizer
wnl = wordnetlemmatizer()
print(wnl.lemmatize('countries')) # country
輸出是"country",比較符合需求。
在實際的英文文字挖掘預處理的時候,建議使用基於wordnet的詞形還原就可以了。
在這裡有個詞幹提取和詞型還原的demo,如果是這塊的新手可以去看看,上手很合適。
由於英文單詞有大小寫之分,我們期望統計時像「home」和「home」是乙個詞。因此一般需要將所有的詞都轉化為小寫。這個直接用python的api就可以搞定。
在用scikit-learn做特徵處理的時候,可以通過引數stop_words來引入乙個陣列作為停用詞表。這個方法和前文講中文停用詞的方法相同,這裡就不寫出**,參考前文即可。
nltk的語料庫中有乙個停用詞,使用者必須從切詞列表中把停用詞去掉,請參考。
現在就可以用scikit-learn來對文字特徵進行處理了,在文字挖掘預處理之向量化與hash trick中,我們講到了兩種特徵處理的方法,向量化與hash trick。而向量化是最常用的方法,因為它可以接著進行tf-idf的特徵處理。在文字挖掘預處理之tf-idf中,我們也講到了tf-idf特徵處理的方法。
tfidfvectorizer類可以幫助完成向量化、tf-idf和標準化三步。當然,還可以幫我們處理停用詞。這部分工作和中文的特徵處理也是完全相同的,參考前文即可。
有了每段文字的tf-idf的特徵向量,我們就可以利用這些資料建立分類模型,或者聚類模型了,或者進行主題模型的分析。此時的分類聚類模型和之前講的非自然語言處理的資料分析沒有什麼兩樣。因此對應的演算法都可以直接使用。而主題模型是自然語言處理比較特殊的一塊,這個我們後面再單獨講。
上面對英文文字挖掘預處理的過程做了乙個總結,需要注意的是這個流程主要針對一些常用的文字挖掘,並使用了詞袋模型,對於某一些自然語言處理的需求則流程需要修改。比如有時候需要做詞性標註,而有時候也需要英文分詞,比如得到"new york"而不是「new」和「york」,因此這個流程僅供自然語言處理入門參考,可以根據資料分析目的選擇合適的預處理方法。
文字挖掘預處理的流程總結
本文 作為備份 總所周知,資料探勘模型中非常重要的部分是訓練模型,訓練集與測試集便是整個資料探勘過程中花費時間最多的過程。資料集通過有如下的一些途徑獲得 經典資料集 python nltk 便提供了非常多經典的資料集。很多資料集都是手工標註而成,所以使用的時候不得不感嘆工程的浩大。例如nlp中使用的...
資料探勘 資料預處理(2)
統計缺失值 train pd.read csv train.csv null columns train.columns train.isnull any train null columns isnull sum 得到dataframe中,資料型別為object的列 展示一列資料各數值分布情況 使...
文字預處理 (4)文字糾錯
一般有兩種文字糾錯的型別 首先看一下non word的拼寫錯誤,這種錯誤表示此詞彙本身在字典中不存在,比如把 要求 誤寫為 藥求 把 correction 誤拼寫為 corrction 尋找這種錯誤很簡單,例如分完詞以後找到哪個詞在詞典中不存在,那麼這個詞就可能是錯誤拼出來的的詞。操作步驟 找到候選...