第8章 文本數(shù)據(jù)處理_第1頁
第8章 文本數(shù)據(jù)處理_第2頁
第8章 文本數(shù)據(jù)處理_第3頁
第8章 文本數(shù)據(jù)處理_第4頁
第8章 文本數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第8章文本數(shù)據(jù)處理8.1擴展與深化——不同種方式的文本數(shù)據(jù)處理8.2文本數(shù)據(jù)的優(yōu)化處理8.3小結(jié)8.1擴展與深化——不同種方式的文本數(shù)據(jù)處理

在第五章中,我們利用sklearn庫較為簡單的介紹了一些關于文本數(shù)據(jù)處理的知識,例如CountVectorizer、N-Grams、Tf-IDF等等。這里我們將詳細的對其介紹

在拿到一個文本數(shù)據(jù)并對其處理之前,我們首先要做的就是將其轉(zhuǎn)換成機器能夠看懂的機器語言。文字只是表達我們所說意思的載體,其所適用的對象僅限于我們?nèi)祟?。就比如,你拿著一段中國話,讓一個從未見過或者聽過中國話的外國人去看懂這段話所說的意思,這無非是強人所難。所以,在對文本數(shù)據(jù)進行處理之前,我們首先就要把文本翻譯成機器能夠看懂的機器語言。

那如何才能將文本數(shù)據(jù)翻譯成機器語言呢?第一步肯定是要將文本進行分詞,把一段話或者一句話中所要表達的主要意思提取出來。例如,“今天是星期一,我要去上學”這句話,進行完分詞操作后將會是“今天”、“是”、“星期天”、“我”、“要去”“上學”。將一句話或者一段話,拆分成一個個基本單元,這就是我們分詞操作。

在第五章中,對于英文文本,我們借助的是正則化進行分詞,而對于中文文本,我們更多借助的是jieba進行分詞操作。對于英文文本,我們雖然可以通過正則化對文本進行分詞,但如何刪去冗沉的停用詞,變成了令我們頭疼的操作。利用sklearn對英文文本進行分詞使用正則化分詞:importres=input()s=s.lower()s=re.sub(r'\,|\.','',s)s=re.sub(r'[0-9]','',s)s=re.split(r'\s+',s)使用sklearn自帶的停止詞庫進行分詞:fromsklearn.feature_extraction.textimportCountVectorizerimportres=input()s=re.sub(r'[0-9]','',s)s=re.split(r'\.|\,',s)vec=CountVectorizer(stop_words='english')tmp=vec.fit_transform(s)print(vec.get_feature_names())利用jieba對中文文本進行分詞

上面兩種方法是sklearn對英文文本的分詞方法,我們可以很明顯的感受到,使用sklearn自帶的CountVectorizer來進行分詞是優(yōu)于正則化進行分詞的。但是sklearn還有一個弊端就是不能對中文文本進行分詞,需要加載額外的package來對其進行分詞——jieba。Jieba作為python的第三方package,本身可以用python自帶的pip進行安裝和下載。Win+R鍵打開命令提示符,輸入下面這行代碼:pipinstalljieba

用Jieba進行分詞,主要是利用了jieba的cut函數(shù)。cut主要有三種模式,一種是精確模式,另一種是全模式,剩下一種是搜索引擎模式。精確模式精確模式是在不影響文本大意的前提下,盡可能的將句子精確切開,此時cut的參數(shù)cut_all應為false。tmp=jieba.cut(l,cut_all=False)print("/".join(tmp))全模式全模式就是不考慮句子本身的意思,將句子盡可能的進行分詞操作,此時cut參數(shù)中的cut_all應為true。tmp=jieba.cut(l,cut_all=True)print("/".join(tmp))搜索引擎模式搜索引擎模式是在精確模式的基礎上,在對比較長的詞語進行劃分,以便提高分詞的召回率,這也是常用在搜索引擎上的一種方法。tmp=jieba.cut_for_search(l)print("/".join(tmp))利用NLTK對文本進行分詞

NLTK(NaturalLanguageToolkit)是一個自然語言處理工具包,在NLP領域中,也是最常使用的一個python庫。這里我們就以英文文本為例,對NLTK庫的使用進行講解。至于如何對中文文本進行操作,這個作為一個提高性的內(nèi)容,有需要的讀者可以自行了解NLTK的安裝Win+R鍵打開cmd(命令提示符),輸入“pipinstallnltk”進行安裝,安裝完成后,打開你的pycharm輸入下面一串代碼:importnltknltk.download()然后下載所需的你所需的組件進行安裝。NLTK較sklearn的分詞方式,有著兩大優(yōu)勢:一是NLTK支持整段文本句子化,利用sent_tokenize()來對整篇文章進行分句。二是NLTK支持段落直接分詞,而不是先分成句子,然后再分詞。利用sent_tokenizer()進行分句;fromnltk.tokenizeimportsent_tokenize,word_tokenizes=input()s=sent_tokenize(s)foriins:print("Sentence:",i)利用word_tokenizer()來進行分詞:fromnltk.tokenizeimportword_tokenizes=input()s=word_tokenize(s)print(s)

這里,有讀者可能會問到,為什么分完詞之后那些標點符號還有一些無用的詞語沒有去掉呢?這里,就引申出了我們下面要講的關于NLTK停止詞的使用。NLTK停止詞的使用關于什么是停止詞,第五章里已經(jīng)做了詳細的介紹,如果忘了的讀者可以翻到第五章自行查看。下面我們來學習關于NLTK停止詞的使用。

由于NLTK內(nèi)置了停用詞表,我們可以在nltk.corups里來找到它并查看其組成:

{'because','over','until','has','ours','after','ourselves','in','any','won','being','against','does','no','them','myself','isn','ain','him','itself','which','can','by','for','between','be','below','me','and','these','its','we','with','again','once','it','having','o','don','this','out','own','your','an','hers','ma','but','up','there','if','have','how','just','our','a','ve','where','re','most','what','mightn','nor','herself','shan','too','was','from','am','to','as','such','very','wouldn','himself','then','are','under','m','while','through','should','their','themselves','few','of','other','mustn','both','the','each','my','some','she','that','than','only','he','now','same','so','wasn','didn','on','whom','t','hasn','not','d','were','yourselves','do','or','about','during','needn','yours','hadn','aren','s','yourself','couldn','they','at','weren','her','doesn','off','theirs','who','all','above','into','y','doing','why','ll','here','those','been','more','will','when','i','haven','his','did','you','before','shouldn','is','down','had','further'}共計153個停用詞,如果有特殊需要的話,讀者也可以自行添加停用詞。接下來我們從文本中刪除停用詞fromnltk.corpusimportstopwordsfromnltk.tokenizeimportword_tokenizes=input()s=s.lower()stop_words=set(stopwords.words('english'))s=word_tokenize(s)tmp=[xforxinsifnotxinstop_words]m=[]forxintmp:ifxnotinstop_wordsandxnotinm:m.append(x)print("tmp:\n",tmp)print("m:\n",m)接著,我們只需要刪除一些殘留的標點符號即可。delete=[',','.',':',';']foriindelete:ifiinm:m.remove(i)print("m:\n",m)8.2文本數(shù)據(jù)的優(yōu)化處理利用NLTK對文本數(shù)據(jù)進行優(yōu)化處理在上一節(jié)中,我們利用NLTK進行了分詞操作,將一整篇文本分成若干個獨立的基本單元,但是這種簡單的分詞方式,也會出現(xiàn)一些問題,讀者是否想到了呢?讓我們來看下面一串代碼:輸入:“Ihaveabook,buthehastwobooks.”s=input()s=s.lower()stop_words=set(stopwords.words('english'))s=word_tokenize(s)tmp=[xforxinsifnotxinstop_words]m=[]forxintmp:ifxnotinstop_wordsandxnotinm:m.append(x)delete=[',','.',':',';']foriindelete:ifiinm:m.remove(i)print("m:\n",m)輸出:m:['book','two','books']

看到這里讀者是不是明白了呢?沒錯,“has”、“have”和“ate”、“eat”這兩組單詞其實是一個單詞的不同種形式,“has”是“have”的第三人稱形式,“books”是“book”的過去式。這里NLTK的分詞默認他們是兩個不同的單詞,所以會出現(xiàn)上述的結(jié)果。針對這種情況,我們可以對已經(jīng)分完詞的列表m進行提取詞干操作。什么是提取詞干呢?顧名思義就是將一個英文單詞的詞干提取出來,例如“having”提取詞干之后會變成“have”,“iamging”提取之后會變成“iamg”。我們可以利用NTLK.stem中的PorterStemmer進行詞干提取fromnltk.stemimportPorterStemmerps=PorterStemmer()M=[]foriinm:if(ps.stem(i)notinM):M.append(ps.stem(i))print("M:\n",M)輸出:M:['book','two']這里,由于“have”和“has”是停止詞,所以在分詞的時候會被過濾掉,因此我們也不必考慮“have”和“has”的關系。當然,NLTK.stem中的SnowballStemmer也可以進行提取詞干fromnltk.stemimportSnowballStemmerss=SnowballStemmer('english')M=[]foriinm:if(ss.stem(i)notinM):M.append(ss.stem(i))print("M:\n",M)輸出:M:['book','two']還可以用NLTK.stem.snowball中的EnglishStemmer來進行處理。fromnltk.stem.snowballimportEnglishStemmeres=EnglishStemmer()M=[]foriinm:if(es.stem(i)notinM):M.append(es.stem(i))print("M:\n",M)輸出:M:['book','two']利用NLTK進行詞性標注

現(xiàn)在我們已經(jīng)了解了如何用NLTK進行分詞、詞干提取和篩選停用詞,接下來就讓我們學習如何利用NLTK進行詞性標注。詞性標注,就是給已經(jīng)分完詞的單詞一個標簽,這個標簽就代表著這個單詞的詞形。就比如“cat”,我們就可以給它名詞的標簽(NN),標記“cat”是一個名詞。詞性標注的實現(xiàn)方法主要使用NLTK中的pos_tag importnltkfromnltk.corpusimportstopwordsfromnltk.tokenizeimportword_tokenizes=input()s=s.lower()top_words=set(stopwords.words('english'))s=word_tokenize(s)tmp=[xforxinsifnotxinstop_words]m=[]forxintmp:ifxnotinstop_wordsandxnotinm:m.append(x)delete=[',','.',':',';']foriindelete:ifiinm:m.remove(i)m=nltk.pos_tag(m)print(m)輸出:[('life','NN'),('chess-board','JJ'),('world','NN'),('pieces','NNS'),('phenomena','VBP'),('universe','JJ'),('rules','NNS'),('game','NN'),('call','NN'),('laws','NNS'),('nature','VBP'),('player','NN'),('side','NN'),('hidden','VBD'),('us','PRP'),('know','VBP'),('play','VB'),('always','RB'),('fair','JJ'),('patient','NN'),('also','RB'),('cost','VBD'),('never','RB'),('overlooks','JJ'),('mistake','NN'),('makes','VBZ'),('smallest','JJS'),('allowance','NN'),('ignorance','NN')]這里,關于NLTK各個標記的含義,讀者可以在編譯器中,輸入下面這行代碼來進行查看:nltk.help.upenn_tagset()利用NLTK進行詞形還原

有些時候,僅僅利用詞干提取來去還原單詞還是不夠的,而且詞干提取經(jīng)常會創(chuàng)造一些字典上并不存在的“新單詞”,這也是詞干提取和詞形還原的最大不同之處。所謂詞形還原,就是在實際的單詞基礎上進行的還原,而不會憑空創(chuàng)造出新的單詞。詞形還原所用到的是NLTK.stem中的WordNetLemmatizer,下面將會和詞干提取一起進行演示importnltkfromnltk.corpusimportstopwordsfromnltk.tokenizeimportword_tokenizefromnltk.stemimportWordNetLemmatizerfromnltk.stemimportPorterStemmerps=PorterStemmer()wdl=WordNetLemmatizer()s=input()s=s.lower()top_words=set(stopwords.words('english'))s=word_tokenize(s)tmp=[xforxinsifnotxinstop_w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論