文本挖掘预处理流程总结(2)— 英文
目錄
1.??英文文本挖掘預(yù)處理特點
2.??英文文本挖掘預(yù)處理
2.1 預(yù)處理一:數(shù)據(jù)收集
2.2? 預(yù)處理二:除去數(shù)據(jù)中非文本部分
2.3? 預(yù)處理三:拼寫檢查更正
2.4? 預(yù)處理四:詞干提取(stemming)和詞形還原(lemmatization)
2.5 預(yù)處理五:轉(zhuǎn)化為小寫
2.6 預(yù)處理六:引入停用詞
2.7 預(yù)處理七:特征處理
2.8 預(yù)處理八:建立分析模型
3. 英文文本挖掘預(yù)處理總結(jié)
? ? ? 在文本挖掘預(yù)處理流程總結(jié)(1)—中文中,總結(jié)了中文文本挖掘的預(yù)處理流程,這里再對英文文本挖掘的預(yù)處理流程做一個總結(jié)。
1.??英文文本挖掘預(yù)處理特點
英文文本的預(yù)處理方法和中文的有部分區(qū)別。
? ? ?(1)首先,英文文本挖掘預(yù)處理一般可以不做分詞(特殊需求除外),而中文預(yù)處理分詞是必不可少的一步。
? ? ?(2)第二,大部分英文文本都是uft-8編碼,這樣在大多數(shù)處理的時候不用考慮編碼轉(zhuǎn)換的問題,而中文文本處理必須要處理unicode的編碼問題。
(3)第三,英文文本的預(yù)處理也有自己特殊的地方,就是拼寫問題,很多時候,我們的預(yù)處理要包括拼寫檢查,比如“Helo World”這樣的錯誤,不能在分析的時候糾錯。所以需要在預(yù)處理前加以糾正。
? ? (4)第四,就是詞干提取(stemming)和詞形還原(lemmatization)。這個東西主要是英文有單數(shù)、復(fù)數(shù)和各種時態(tài),導(dǎo)致一個詞會有不同的形式。比如“countries”和"country","wolf"和"wolves",我們期望是有一個詞。
后面的預(yù)處理中,、會重點講述第三點和第四點的處理。
2.??英文文本挖掘預(yù)處理
2.1 預(yù)處理一:數(shù)據(jù)收集
這部分英文和中文類似。獲取方法一般有兩種:使用別人做好的語料庫和自己用爬蟲去在網(wǎng)上去爬自己的語料數(shù)據(jù)。
(1)使用別人做好的語料庫。常用的文本語料庫在網(wǎng)上有很多,如果只是學(xué)習(xí),則可以直接下載下來使用,但如果是某些特殊主題的語料庫,比如“機器學(xué)習(xí)”相關(guān)的語料庫,則這種方法行不通,需要我們自己用第二種方法去獲取。
(2)用爬蟲去在網(wǎng)上去爬自己的語料數(shù)據(jù):對于使用爬蟲的方法,開源工具有很多,通用的爬蟲一般使用beautifulsoup。但是我們需要某些特殊的語料數(shù)據(jù),比如上面提到的“機器學(xué)習(xí)”相關(guān)的語料庫,則需要用主題爬蟲(也叫聚焦爬蟲)來完成。這個我一般使用ache。 ache允許用關(guān)鍵字或者一個分類算法來過濾出我們需要的主題語料,比較強大。
2.2? 預(yù)處理二:除去數(shù)據(jù)中非文本部分
這一步主要是針對我們用爬蟲收集的語料數(shù)據(jù),由于爬下來的內(nèi)容中有很多html的一些標簽,需要去掉。少量的非文本內(nèi)容的可以直接用Python的正則表達式(re)刪除, 復(fù)雜的則可以用beautifulsoup來去除。另外還有一些特殊的非英文字符(non-alpha),也可以用Python的正則表達式(re)刪除。
2.3? 預(yù)處理三:拼寫檢查更正
由于英文文本中可能有拼寫錯誤,因此一般需要進行拼寫檢查。如果確信我們分析的文本沒有拼寫問題,可以略去此步。
拼寫檢查,我們一般用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)輸出是:
ERROR: peope ERROR: likee? ? ? ? 找出錯誤后,可以自己來決定是否要改正。當(dāng)然,也可以用pyenchant中的wxSpellCheckerDialog類,來用對話框的形式來交互決定是忽略、改正還是全部改正文本中的錯誤拼寫。感興趣的話可以去研究pyenchant的官方文檔。?
完整代碼參見:github:?https://github.com/ljpzzz/machinelearning/blob/master/natural-language-processing/english_digging.ipynb
2.4? 預(yù)處理四:詞干提取(stemming)和詞形還原(lemmatization)
詞干提取(stemming)和詞型還原(lemmatization)是英文文本預(yù)處理的特色。兩者其實有共同點,即都是要找到詞的原始形式。不同點:
? ? ?(1)詞干提取(stemming):會更加激進一點,它在尋找詞干的時候可能得到的不是詞。比如"imaging"的詞干可能得到的是"imag", 并不是一個詞。
? ? (2)詞形還原:相對保守一些,它一般只對能夠還原成一個正確詞的詞進行處理。個人比較喜歡使用詞形還原而不是詞干提取。
在實際應(yīng)用中,一般使用nltk來進行詞干提取和詞型還原。安裝nltk也很簡單,"pip install nltk"即可。只不過一般需要下載nltk的語料庫,可以用下面的代碼完成,nltk會彈出對話框選擇要下載的內(nèi)容。選擇下載語料庫就可以了。
import nltk nltk.download()? ? ? ?在nltk中,做詞干提取的方法有PorterStemmer、LancasterStemmer和SnowballStemmer。個人推薦使用SnowballStemmer。這個類可以處理很多種語言,當(dāng)然,除了中文。?
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",比較符合需求。
在實際的英文文本挖掘預(yù)處理的時候,建議使用基于wordnet的詞形還原就可以了。
在這里有個詞干提取和詞型還原的demo,如果是這塊的新手可以去看看,上手很合適。
2.5 預(yù)處理五:轉(zhuǎn)化為小寫
由于英文單詞有大小寫之分,我們期望統(tǒng)計時像“Home”和“home”是一個詞。因此一般需要將所有的詞都轉(zhuǎn)化為小寫。這個直接用python的API就可以搞定。
2.6 預(yù)處理六:引入停用詞
在英文文本中有很多無效的詞,比如“a”,“to”,一些短詞,還有一些標點符號,這些我們不想在文本分析的時候引入,因此需要去掉,這些詞就是停用詞。常用的英文停用詞表下載地址,當(dāng)然也有其他版本的停用詞表。
在用scikit-learn做特征處理的時候,可以通過參數(shù)stop_words來引入一個數(shù)組作為停用詞表。這個方法和前文講中文停用詞的方法相同,這里就不寫出代碼,參考前文即可。
? ? ? NLTK的語料庫中有一個停用詞,用戶必須從切詞列表中把停用詞去掉,請參考。
2.7 預(yù)處理七:特征處理
現(xiàn)在就可以用scikit-learn來對文本特征進行處理了,在文本挖掘預(yù)處理之向量化與Hash Trick中,我們講到了兩種特征處理的方法,向量化與Hash Trick。而向量化是最常用的方法,因為它可以接著進行TF-IDF的特征處理。在文本挖掘預(yù)處理之TF-IDF中,我們也講到了TF-IDF特征處理的方法。
TfidfVectorizer類可以幫助完成向量化、TF-IDF和標準化三步。當(dāng)然,還可以幫我們處理停用詞。這部分工作和中文的特征處理也是完全相同的,參考前文即可。
2.8 預(yù)處理八:建立分析模型
有了每段文本的TF-IDF的特征向量,我們就可以利用這些數(shù)據(jù)建立分類模型,或者聚類模型了,或者進行主題模型的分析。此時的分類聚類模型和之前講的非自然語言處理的數(shù)據(jù)分析沒有什么兩樣。因此對應(yīng)的算法都可以直接使用。而主題模型是自然語言處理比較特殊的一塊,這個我們后面再單獨講。
3. 英文文本挖掘預(yù)處理總結(jié)
上面對英文文本挖掘預(yù)處理的過程做了一個總結(jié),需要注意的是這個流程主要針對一些常用的文本挖掘,并使用了詞袋模型,對于某一些自然語言處理的需求則流程需要修改。比如有時候需要做詞性標注,而有時候也需要英文分詞,比如得到"New York"而不是“New”和“York”,因此這個流程僅供自然語言處理入門參考,可以根據(jù)數(shù)據(jù)分析目的選擇合適的預(yù)處理方法。
總結(jié)
以上是生活随笔為你收集整理的文本挖掘预处理流程总结(2)— 英文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文本挖掘预处理流程总结(1)— 中文
- 下一篇: word2vec原理(五):skip-g