由於以後要作一個英文專利文本類似度分析的項目,因此先把文本預處理的流程放上來,以供參考,轉自http://www.cnblogs.com/pinard/p/6756534.htmlhtml
英文文本的預處理方法和中文的有部分區別。首先,英文文本挖掘預處理通常能夠不作分詞(特殊需求除外),而中文預處理分詞是必不可少的一步。第二點,大部分英文文本都是uft-8的編碼,這樣在大多數時候處理的時候不用考慮編碼轉換的問題,而中文文本處理必需要處理unicode的編碼問題。這兩部分咱們在中文文本挖掘預處理裏已經講了。python
而英文文本的預處理也有本身特殊的地方,第三點就是拼寫問題,不少時候,咱們的預處理要包括拼寫檢查,好比「Helo World」這樣的錯誤,咱們不能在分析的時候講錯糾錯。因此須要在預處理前加以糾正。第四點就是詞幹提取(stemming)和詞形還原(lemmatization)。這個東西主要是英文有單數,複數和各類時態,致使一個詞會有不一樣的形式。好比「countries」和"country","wolf"和"wolves",咱們指望是有一個詞。git
後面的預處理中,咱們會重點講述第三點和第四點的處理。github
這部分英文和中文相似。獲取方法通常有兩種:使用別人作好的語料庫和本身用爬蟲去在網上去爬本身的語料數據。正則表達式
對於第一種方法,經常使用的文本語料庫在網上有不少,若是你們只是學習,則能夠直接下載下來使用,但若是是某些特殊主題的語料庫,好比「deep learning」相關的語料庫,則這種方法行不通,須要咱們本身用第二種方法去獲取。算法
對於第二種使用爬蟲的方法,開源工具備不少,通用的爬蟲我通常使用beautifulsoup。可是咱們咱們須要某些特殊的語料數據,好比上面提到的「deep learning」相關的語料庫,則須要用主題爬蟲(也叫聚焦爬蟲)來完成。這個我通常使用ache。 ache容許咱們用關鍵字或者一個分類算法模型來過濾出咱們須要的主題語料,比較強大。數組
這一步主要是針對咱們用爬蟲收集的語料數據,因爲爬下來的內容中有不少html的一些標籤,須要去掉。少許的非文本內容的能夠直接用Python的正則表達式(re)刪除, 複雜的則能夠用beautifulsoup來去除。另外還有一些特殊的非英文字符(non-alpha),也能夠用Python的正則表達式(re)刪除。工具
因爲英文文本中可能有拼寫錯誤,所以通常須要進行拼寫檢查。若是確信咱們分析的文本沒有拼寫問題,能夠略去此步。post
拼寫檢查,咱們通常用pyenchant類庫完成。pyenchant的安裝很簡單:"pip install pyenchant"便可。學習
對於一段文本,咱們能夠用下面的方式去找出拼寫錯誤:
from enchant.checker import SpellChecker chkr = SpellChecker("en_US") chkr.set_text("Many peope likee to watch In the Name of People.") for err in chkr: print "ERROR:", err.word
輸出是:
ERROR: peope ERROR: likee
找出錯誤後,咱們能夠本身來決定是否要改正。固然,咱們也能夠用pyenchant中的wxSpellCheckerDialog類來用對話框的形式來交互決定是忽略,改正仍是所有改正文本中的錯誤拼寫。你們感興趣的話能夠去研究pyenchant的官方文檔。
詞幹提取(stemming)和詞型還原(lemmatization)是英文文本預處理的特點。二者其實有共同點,即都是要找到詞的原始形式。只不過詞幹提取(stemming)會更加激進一點,它在尋找詞幹的時候能夠會獲得不是詞的詞幹。好比"imaging"的詞幹可能獲得的是"imag", 並非一個詞。而詞形還原則保守一些,它通常只對可以還原成一個正確的詞的詞進行處理。我的比較喜歡使用詞型還原而不是詞幹提取。
在實際應用中,通常使用nltk來進行詞幹提取和詞型還原。安裝nltk也很簡單,"pip install nltk"便可。只不過咱們通常須要下載nltk的語料庫,能夠用下面的代碼完成,nltk會彈出對話框選擇要下載的內容。選擇下載語料庫就能夠了。
import nltk nltk.download()
在nltk中,作詞幹提取的方法有PorterStemmer,LancasterStemmer和SnowballStemmer。我的推薦使用SnowballStemmer。這個類能夠處理不少種語言,固然,除了中文。
from nltk.stem import SnowballStemmer stemmer = SnowballStemmer("english") # Choose a language stemmer.stem("countries") # Stem a word
輸出是"countri",這個詞幹並非一個詞。
而若是是作詞型還原,則通常可使用WordNetLemmatizer類,即wordnet詞形還原方法。
from nltk.stem import WordNetLemmatizer wnl = WordNetLemmatizer() print(wnl.lemmatize('countries'))
輸出是"country",比較符合需求。
在實際的英文文本挖掘預處理的時候,建議使用基於wordnet的詞形還原就能夠了。
在這裏有個詞幹提取和詞型還原的demo,若是是這塊的新手能夠去看看,上手很合適。
因爲英文單詞有大小寫之分,咱們指望統計時像「Home」和「home」是一個詞。所以通常須要將全部的詞都轉化爲小寫。這個直接用python的API就能夠搞定。
在英文文本中有不少無效的詞,好比「a」,「to」,一些短詞,還有一些標點符號,這些咱們不想在文本分析的時候引入,所以須要去掉,這些詞就是停用詞。我的經常使用的英文停用詞表下載地址在這。固然也有其餘版本的停用詞表,不過這個版本是我經常使用的。
在咱們用scikit-learn作特徵處理的時候,能夠經過參數stop_words來引入一個數組做爲停用詞表。這個方法和前文講中文停用詞的方法相同,這裏就不寫出代碼,你們參考前文便可。
如今咱們就能夠用scikit-learn來對咱們的文本特徵進行處理了,在文本挖掘預處理之向量化與Hash Trick中,咱們講到了兩種特徵處理的方法,向量化與Hash Trick。而向量化是最經常使用的方法,由於它能夠接着進行TF-IDF的特徵處理。在文本挖掘預處理之TF-IDF中,咱們也講到了TF-IDF特徵處理的方法。
TfidfVectorizer類能夠幫助咱們完成向量化,TF-IDF和標準化三步。固然,還能夠幫咱們處理停用詞。這部分工做和中文的特徵處理也是徹底相同的,你們參考前文便可。
有了每段文本的TF-IDF的特徵向量,咱們就能夠利用這些數據創建分類模型,或者聚類模型了,或者進行主題模型的分析。此時的分類聚類模型和以前講的非天然語言處理的數據分析沒有什麼兩樣。所以對應的算法均可以直接使用。而主題模型是天然語言處理比較特殊的一塊,這個咱們後面再單獨講。
上面咱們對英文文本挖掘預處理的過程作了一個總結,但願能夠幫助到你們。須要注意的是這個流程主要針對一些經常使用的文本挖掘,並使用了詞袋模型,對於某一些天然語言處理的需求則流程須要修改。好比有時候須要作詞性標註,而有時候咱們也須要英文分詞,好比獲得"New York"而不是「New」和「York」,所以這個流程僅供天然語言處理入門者參考,咱們能夠根據咱們的數據分析目的選擇合適的預處理方法。