




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章文本數(shù)據(jù)處理8.1擴(kuò)展與深化——不同種方式的文本數(shù)據(jù)處理8.2文本數(shù)據(jù)的優(yōu)化處理8.3小結(jié)8.1擴(kuò)展與深化——不同種方式的文本數(shù)據(jù)處理
在第五章中,我們利用sklearn庫(kù)較為簡(jiǎn)單的介紹了一些關(guān)于文本數(shù)據(jù)處理的知識(shí),例如CountVectorizer、N-Grams、Tf-IDF等等。這里我們將詳細(xì)的對(duì)其介紹
在拿到一個(gè)文本數(shù)據(jù)并對(duì)其處理之前,我們首先要做的就是將其轉(zhuǎn)換成機(jī)器能夠看懂的機(jī)器語(yǔ)言。文字只是表達(dá)我們所說(shuō)意思的載體,其所適用的對(duì)象僅限于我們?nèi)祟?。就比如,你拿著一段中?guó)話,讓一個(gè)從未見過(guò)或者聽過(guò)中國(guó)話的外國(guó)人去看懂這段話所說(shuō)的意思,這無(wú)非是強(qiáng)人所難。所以,在對(duì)文本數(shù)據(jù)進(jìn)行處理之前,我們首先就要把文本翻譯成機(jī)器能夠看懂的機(jī)器語(yǔ)言。
那如何才能將文本數(shù)據(jù)翻譯成機(jī)器語(yǔ)言呢?第一步肯定是要將文本進(jìn)行分詞,把一段話或者一句話中所要表達(dá)的主要意思提取出來(lái)。例如,“今天是星期一,我要去上學(xué)”這句話,進(jìn)行完分詞操作后將會(huì)是“今天”、“是”、“星期天”、“我”、“要去”“上學(xué)”。將一句話或者一段話,拆分成一個(gè)個(gè)基本單元,這就是我們分詞操作。
在第五章中,對(duì)于英文文本,我們借助的是正則化進(jìn)行分詞,而對(duì)于中文文本,我們更多借助的是jieba進(jìn)行分詞操作。對(duì)于英文文本,我們雖然可以通過(guò)正則化對(duì)文本進(jìn)行分詞,但如何刪去冗沉的停用詞,變成了令我們頭疼的操作。利用sklearn對(duì)英文文本進(jìn)行分詞使用正則化分詞:importres=input()s=s.lower()s=re.sub(r'\,|\.','',s)s=re.sub(r'[0-9]','',s)s=re.split(r'\s+',s)使用sklearn自帶的停止詞庫(kù)進(jìn)行分詞: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對(duì)中文文本進(jìn)行分詞
上面兩種方法是sklearn對(duì)英文文本的分詞方法,我們可以很明顯的感受到,使用sklearn自帶的CountVectorizer來(lái)進(jìn)行分詞是優(yōu)于正則化進(jìn)行分詞的。但是sklearn還有一個(gè)弊端就是不能對(duì)中文文本進(jìn)行分詞,需要加載額外的package來(lái)對(duì)其進(jìn)行分詞——jieba。Jieba作為python的第三方package,本身可以用python自帶的pip進(jìn)行安裝和下載。Win+R鍵打開命令提示符,輸入下面這行代碼:pipinstalljieba
用Jieba進(jìn)行分詞,主要是利用了jieba的cut函數(shù)。cut主要有三種模式,一種是精確模式,另一種是全模式,剩下一種是搜索引擎模式。精確模式精確模式是在不影響文本大意的前提下,盡可能的將句子精確切開,此時(shí)cut的參數(shù)cut_all應(yīng)為false。tmp=jieba.cut(l,cut_all=False)print("/".join(tmp))全模式全模式就是不考慮句子本身的意思,將句子盡可能的進(jìn)行分詞操作,此時(shí)cut參數(shù)中的cut_all應(yīng)為true。tmp=jieba.cut(l,cut_all=True)print("/".join(tmp))搜索引擎模式搜索引擎模式是在精確模式的基礎(chǔ)上,在對(duì)比較長(zhǎng)的詞語(yǔ)進(jìn)行劃分,以便提高分詞的召回率,這也是常用在搜索引擎上的一種方法。tmp=jieba.cut_for_search(l)print("/".join(tmp))利用NLTK對(duì)文本進(jìn)行分詞
NLTK(NaturalLanguageToolkit)是一個(gè)自然語(yǔ)言處理工具包,在NLP領(lǐng)域中,也是最常使用的一個(gè)python庫(kù)。這里我們就以英文文本為例,對(duì)NLTK庫(kù)的使用進(jìn)行講解。至于如何對(duì)中文文本進(jìn)行操作,這個(gè)作為一個(gè)提高性的內(nèi)容,有需要的讀者可以自行了解NLTK的安裝Win+R鍵打開cmd(命令提示符),輸入“pipinstallnltk”進(jìn)行安裝,安裝完成后,打開你的pycharm輸入下面一串代碼:importnltknltk.download()然后下載所需的你所需的組件進(jìn)行安裝。NLTK較sklearn的分詞方式,有著兩大優(yōu)勢(shì):一是NLTK支持整段文本句子化,利用sent_tokenize()來(lái)對(duì)整篇文章進(jìn)行分句。二是NLTK支持段落直接分詞,而不是先分成句子,然后再分詞。利用sent_tokenizer()進(jìn)行分句;fromnltk.tokenizeimportsent_tokenize,word_tokenizes=input()s=sent_tokenize(s)foriins:print("Sentence:",i)利用word_tokenizer()來(lái)進(jìn)行分詞:fromnltk.tokenizeimportword_tokenizes=input()s=word_tokenize(s)print(s)
這里,有讀者可能會(huì)問(wèn)到,為什么分完詞之后那些標(biāo)點(diǎn)符號(hào)還有一些無(wú)用的詞語(yǔ)沒有去掉呢?這里,就引申出了我們下面要講的關(guān)于NLTK停止詞的使用。NLTK停止詞的使用關(guān)于什么是停止詞,第五章里已經(jīng)做了詳細(xì)的介紹,如果忘了的讀者可以翻到第五章自行查看。下面我們來(lái)學(xué)習(xí)關(guān)于NLTK停止詞的使用。
由于NLTK內(nèi)置了停用詞表,我們可以在nltk.corups里來(lái)找到它并查看其組成:
{'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'}共計(jì)153個(gè)停用詞,如果有特殊需要的話,讀者也可以自行添加停用詞。接下來(lái)我們從文本中刪除停用詞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)接著,我們只需要?jiǎng)h除一些殘留的標(biāo)點(diǎn)符號(hào)即可。delete=[',','.',':',';']foriindelete:ifiinm:m.remove(i)print("m:\n",m)8.2文本數(shù)據(jù)的優(yōu)化處理利用NLTK對(duì)文本數(shù)據(jù)進(jìn)行優(yōu)化處理在上一節(jié)中,我們利用NLTK進(jìn)行了分詞操作,將一整篇文本分成若干個(gè)獨(dú)立的基本單元,但是這種簡(jiǎn)單的分詞方式,也會(huì)出現(xiàn)一些問(wèn)題,讀者是否想到了呢?讓我們來(lái)看下面一串代碼:輸入:“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']
看到這里讀者是不是明白了呢?沒錯(cuò),“has”、“have”和“ate”、“eat”這兩組單詞其實(shí)是一個(gè)單詞的不同種形式,“has”是“have”的第三人稱形式,“books”是“book”的過(guò)去式。這里NLTK的分詞默認(rèn)他們是兩個(gè)不同的單詞,所以會(huì)出現(xiàn)上述的結(jié)果。針對(duì)這種情況,我們可以對(duì)已經(jīng)分完詞的列表m進(jìn)行提取詞干操作。什么是提取詞干呢?顧名思義就是將一個(gè)英文單詞的詞干提取出來(lái),例如“having”提取詞干之后會(huì)變成“have”,“iamging”提取之后會(huì)變成“iamg”。我們可以利用NTLK.stem中的PorterStemmer進(jìn)行詞干提取fromnltk.stemimportPorterStemmerps=PorterStemmer()M=[]foriinm:if(ps.stem(i)notinM):M.append(ps.stem(i))print("M:\n",M)輸出:M:['book','two']這里,由于“have”和“has”是停止詞,所以在分詞的時(shí)候會(huì)被過(guò)濾掉,因此我們也不必考慮“have”和“has”的關(guān)系。當(dāng)然,NLTK.stem中的SnowballStemmer也可以進(jìn)行提取詞干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來(lái)進(jìn)行處理。fromnltk.stem.snowballimportEnglishStemmeres=EnglishStemmer()M=[]foriinm:if(es.stem(i)notinM):M.append(es.stem(i))print("M:\n",M)輸出:M:['book','two']利用NLTK進(jìn)行詞性標(biāo)注
現(xiàn)在我們已經(jīng)了解了如何用NLTK進(jìn)行分詞、詞干提取和篩選停用詞,接下來(lái)就讓我們學(xué)習(xí)如何利用NLTK進(jìn)行詞性標(biāo)注。詞性標(biāo)注,就是給已經(jīng)分完詞的單詞一個(gè)標(biāo)簽,這個(gè)標(biāo)簽就代表著這個(gè)單詞的詞形。就比如“cat”,我們就可以給它名詞的標(biāo)簽(NN),標(biāo)記“cat”是一個(gè)名詞。詞性標(biāo)注的實(shí)現(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')]這里,關(guān)于NLTK各個(gè)標(biāo)記的含義,讀者可以在編譯器中,輸入下面這行代碼來(lái)進(jìn)行查看:nltk.help.upenn_tagset()利用NLTK進(jìn)行詞形還原
有些時(shí)候,僅僅利用詞干提取來(lái)去還原單詞還是不夠的,而且詞干提取經(jīng)常會(huì)創(chuàng)造一些字典上并不存在的“新單詞”,這也是詞干提取和詞形還原的最大不同之處。所謂詞形還原,就是在實(shí)際的單詞基礎(chǔ)上進(jìn)行的還原,而不會(huì)憑空創(chuàng)造出新的單詞。詞形還原所用到的是NLTK.stem中的WordNetLemmatizer,下面將會(huì)和詞干提取一起進(jìn)行演示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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 與車商簽合同范例
- 供貨合同標(biāo)準(zhǔn)文本(二)
- 中國(guó)鋼結(jié)構(gòu)施工合同范例
- 光伏用戶合同樣本
- 幾人共同購(gòu)房合同樣本
- 免燒磚廠合同樣本
- 農(nóng)村買房協(xié)議合同標(biāo)準(zhǔn)文本
- 個(gè)人職業(yè)發(fā)展規(guī)劃計(jì)劃
- 冠名商贊助合同標(biāo)準(zhǔn)文本
- 2025燈光音響租賃合同模板
- (一模)桂林市、來(lái)賓市2025屆高考第一次跨市聯(lián)合模擬考試生物試卷(含答案詳解)
- 電纜溝、電纜管、電纜井專項(xiàng)施工方案
- 2024年公務(wù)員考試中財(cái)務(wù)知識(shí)的考察試題及答案
- 治理鹽堿可行性報(bào)告
- 《人工智能技術(shù)基礎(chǔ)》課件-第六章 知識(shí)圖譜
- 2025年山東省濟(jì)南市市中區(qū)中考物理一模試卷(無(wú)答案)
- (三模)吉林市2025屆高三第三次模擬測(cè)試 英語(yǔ)試卷(含答案詳解)
- 2024-2030年中國(guó)驅(qū)蚊用品行業(yè)市場(chǎng)深度分析及投資策略研究報(bào)告
- 廣東省深圳市寶安區(qū)10校聯(lián)考2023-2024學(xué)年八年級(jí)下學(xué)期4月期中物理試題(含答案)
- 2024年遼寧沈陽(yáng)地鐵集團(tuán)有限公司所屬公司招聘筆試真題
- DL∕T 1751-2017 燃?xì)?蒸汽聯(lián)合循環(huán)機(jī)組余熱鍋爐運(yùn)行規(guī)程
評(píng)論
0/150
提交評(píng)論