03-4-綜合案例:走進紅樓夢_第1頁
03-4-綜合案例:走進紅樓夢_第2頁
03-4-綜合案例:走進紅樓夢_第3頁
03-4-綜合案例:走進紅樓夢_第4頁
03-4-綜合案例:走進紅樓夢_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

綜合案例:走進紅樓夢Python自然語言處理第三章CONTENT目錄

01語料庫基礎03獲取語料庫02自然語言處理工具包NLTK04綜合案例:走進紅樓夢課前回顧國內(nèi)外著名語料庫網(wǎng)絡數(shù)據(jù)獲取NLTK獲取語料庫綜合案例:走進紅樓夢04數(shù)據(jù)采集與預處理構(gòu)建本地語料庫語料操作數(shù)據(jù)采集和預處理本實驗使用紅樓夢作為語料,通過網(wǎng)絡數(shù)據(jù)獲取的方式采集紅樓夢的相關數(shù)據(jù),但由于該書文字太多,所以,獲取時,可每10萬字保存到一個文件中,同時,還需將完整內(nèi)容單獨保存在一個文件中。實現(xiàn)代碼如下所示:importre,nltkimportmathimportcodecsfromurllib.requestimporturlopenurl='/cache/epub/24264/pg24264-images.html'html=urlopen(url).read()html=html.decode('utf-8')#完整內(nèi)容withcodecs.open("/home/ubuntu/dict/hlm.txt",'w','utf-8')asf:f.write(html[2186:len(html)])#2186字符后是后樓夢正文

f.close()#每10萬字一個文件forindexinrange(math.ceil((len(html)-2186)/100000)):filename='/home/ubuntu/dict/hlm'+str(index)+'.txt'sindex=index*100000+2186eindex=(index+1)*100000+2186withcodecs.open(filename,'w','utf-8')asf:f.write(html[sindex:eindex])f.close()數(shù)據(jù)采集和預處理運行結(jié)束后,在/home/ubuntu/dict目錄下生成了11個文件,其中“hlm.txt”是紅樓夢的完整內(nèi)容,而其余的10個文件是每10萬字保存的文件,如下圖所示:綜合案例:走進紅樓夢04數(shù)據(jù)采集與預處理構(gòu)建本地語料庫語料操作構(gòu)建本地語料庫采集到紅樓夢的相關內(nèi)容后,接下來可將采集到的內(nèi)容構(gòu)建出自己的語料庫,實現(xiàn)代碼如下所示:fromnltk.corpusimportPlaintextCorpusReadercorpus_root=r'/home/ubuntu/dict'wordlists=PlaintextCorpusReader(corpus_root,'.*')print(wordlists.fileids())len(wordlists.words('hlm1.txt'))構(gòu)建完成自己語料庫之后,利用PythonNLTK內(nèi)置函數(shù)都可以完成對應的操作。值得注意的是,部分方法NLTK是針對英文語料的,如果要處理中文的語料庫,可以通過插件處理或者在NLTK中利用StandfordNLP工具包完成對中文語料的操作。綜合案例:走進紅樓夢04數(shù)據(jù)采集與預處理構(gòu)建本地語料庫語料操作語料操作打開Python編輯器,導出NLTK,并統(tǒng)計紅樓夢共計多少字、查看共有多大的用字量,即不重復詞和每個字的平均使用次數(shù)等,實現(xiàn)代碼如下所示:importcodecswithcodecs.open(r"/home/ubuntu/dict/hlm.txt","r+",'utf-8')asf:str=f.read()print(len(str))print(len(set(str)))print(len(str)/len(set(str)))語料操作運行結(jié)果如下所示:用字總量:960780用字量:4376平均使用頻率:219.55667276051187實驗可知紅樓夢總字數(shù)為960780,用了4376個詞匯,平均每個詞使用了219次,那么常用詞分布如何呢?既然是紅樓夢,那么玉字使用了多少次呢?黛玉:1321寶玉:3832玉:5991語料操作由此可見,寶玉用了3538次,黛玉用了1321次,因為講的寶玉和黛玉的愛情故事,“玉”肯定是高頻詞(5991次)。如上所述,紅樓夢總詞匯是960780,那么整個詞匯累積分布如何,可以用下面的代碼查看詞匯累積分布情況,實現(xiàn)代碼如下所示:importcodecsimportnltkfromnltk.bookimport*withcodecs.open(r"/home/ubuntu/dict/hlm.txt","r+",'utf-8')asf:txt=f.read()fdist=FreqDist(txt)fdist.plot()語料操作運行結(jié)果如圖所示:語料操作累積分布情況如圖所示:語料操作分析上圖可知,6萬以下時低頻詞大于30%,高頻詞大于1.4%,中頻占68.6%。如查看高頻率的1000個詞可使用以下代碼實現(xiàn):importcodecsimportnltkfromnltk.bookimport*withcodecs.open(r"/home/ubuntu/dict/hlm.txt","r+",'utf-8')asf:txt=f.read()print(sorted(set(txt[:1000])))fdist=FreqDist(txt)fdist.plot(1000)#高頻詞的分布

fdist.plot(1000,cumulative=True)#高頻詞的累積分布語料操作運行結(jié)果如圖:語料操作1000個高頻詞的分布如圖所示:語料操作1000個高頻詞的累積分布如圖所示:語料操作粗略估計下大約占了70%以上。在研究詞頻分布時,通常會統(tǒng)計各詞頻段的分布情況,如查詢詞頻在[0~100]、[100~1000]、[1000~5000]、[5000以上]等詞頻段的分布情況,實現(xiàn)代碼如下所示:importcodecsimportnltkfromnltk.bookimport*fromcollectionsimportCounterwithcodecs.open(r"/home/ubuntu/dict/hlm.txt","r+",'utf-8')asf:txt=f.read()V=Counter(txt)print("[0~100]:"+str(len([wforwinV.values()ifw<100])))print("[100~1000]:"+str(len([wforwinV.values()ifw>100andw<1000])))print("[1000~5000]:"+str(len([wforwinV.values()ifw>1000andw<5000])))print("[5000以上]:"+st

溫馨提示

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

評論

0/150

提交評論