文本數(shù)據(jù)清洗2_第1頁
文本數(shù)據(jù)清洗2_第2頁
文本數(shù)據(jù)清洗2_第3頁
文本數(shù)據(jù)清洗2_第4頁
文本數(shù)據(jù)清洗2_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

·項目介紹·應用正則表達式進行文本清洗·高效讀取文件·批量新聞文本數(shù)據(jù)清洗文本數(shù)據(jù)清洗了解掌握掌握掌握

學習目標了解語料庫12掌握文件高效讀取的方法能夠使用正則表達式進行文本數(shù)據(jù)清洗34能夠對大量文本數(shù)據(jù)進行批量清洗01任務介紹過渡頁03應用正則表達式進行文本清洗04批量新聞文本數(shù)據(jù)清洗02高效讀取文件2-1新聞語料準備

語料可以理解為語言材料,包括口語材料和書面材料。語料庫是語料庫語言學研究的基礎資源,也是經(jīng)驗主義語言研究方法的主要資源。應用于詞典編纂,語言教學,傳統(tǒng)語言研究,自然語言處理中基于統(tǒng)計或實例的研究等方面。語料庫有多種類型,確定類型的主要依據(jù)是它的研究目的和用途,。本章采用30余萬條語料進行練習,語料構成如下:新聞語料是什么編號新聞類別新聞數(shù)量語料大小1財經(jīng)37098117MB2教育41936141MB3科技65534122MB4時政63086118MB5體育65534191MB6娛樂65534136MB表1新聞語料2-2高效讀取文件思考

由上面的語料庫我們知道,語料庫的數(shù)據(jù)量是很大的,本章僅僅使用了30萬條。讀取大量文件,有哪些方式呢?如何比較們的讀取效率呢?批量讀取大量文件,我們有兩種方式,一種是遞歸讀取文件,別一種使用yield生成器讀取文件。我們可以通過比較它讀取30萬個文件所用的時間來確定它們的效率。結論2-2高效讀取文件遞歸是一種重復將問題分解為同類的了問題而解決問題的方法。這里通過遞歸算法遍歷30萬新聞語料,來介紹遞歸的應用以及遞歸遍歷讀取文件的效率。(記錄開始時間和結束時間,用于計算效率,每讀取500條打印一句信息)遞歸方式讀取大量文件:2-2高效讀取文件圖2語料目錄結構示意圖遞歸方式讀取大量文件:2-2高效讀取文件#2遍歷目錄文件defTraversalDir(rootDir):#返回指定目錄包含的文件或文件夾的名字的列表fori,listsinenumerate(os.listdir(rootDir)):#待處理文件夾名字集合path=os.path.join(rootDir,lists)#核心算法,對文件具體操作ifos.path.isfile(path):ifi%5000==0:print('{t}***{i}\tdocshasbeenread'.format(i=i,t=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime())))#遞歸遍歷文件目錄ifos.path.isdir(path):TraversalDir(path)

遞歸方式讀取大量文件:2-2高效讀取文件#3主函數(shù)if__name__=='__main__':

#記錄開始時間

t1=time.time()#根目錄文件路徑rootDir=r"../Corpus/CSCMNews"

#遍歷TraversalDir(rootDir)

#記錄結束時間

t2=time.time()print('totallycost%.2f'%(t2-t1)+'s')圖3遞歸讀取文件結果實驗證明,遞歸方式完成約30萬新聞文本的讀取需花費48.29秒,這里還沒有對文本任何操作,但隨著數(shù)據(jù)量的增加,執(zhí)行速度會越來越慢,因此遞歸不適合讀取大量文件的場景。下面我們介紹yield生成器讀取大量文件。結論2-2高效讀取文件

生成器是一次生成一個值的特殊類型函數(shù)??梢詫⑵湟暈榭苫謴秃瘮?shù)。調用該函數(shù)將返回一個可用于生成連續(xù)x值的生成【Generator】,簡單的說就是在函數(shù)的執(zhí)行過程中,yield語句會把你需要的值返回給調用生成器的地方,然后退出函數(shù),下一次調用生成器函數(shù)的時候又從上次中斷的地方開始執(zhí)行,而生成器內(nèi)的所有變量參數(shù)都會被保存下來供下一次使用。

有yield的函數(shù)已經(jīng)成為一個生成器了,并且,直接調用函數(shù)是不會執(zhí)行生成器里面的代碼,只有使用next()或者send(),才會被執(zhí)行生成器里面的函數(shù)。 生成器函數(shù)返回一個生成器對象,針對生成器對象,python提供了兩個主要方法,一個是next()一個是send()。yield生成器:2-2高效讀取文件1.yield數(shù)據(jù)存儲在非內(nèi)存中,而數(shù)組、列表、字符串、文件等數(shù)據(jù)的缺點是所有數(shù)據(jù)都在內(nèi)存中,海量的數(shù)據(jù)會消耗大量內(nèi)存2.yield生成器是可以迭代的,工作原理就是重復調用next()方法,直到捕獲一個異常3.有yield的函數(shù)不再是一個普通的函數(shù),而是一個生成器,可用于迭代。4.yield是一個類似于return的關鍵字。yield生成器特性:2-2高效讀取文件yield方式讀取大量文件:2-2高效讀取文件#定義獲取目錄類classloadFolders(object):#迭代器def__init__(self,par_path):self.par_path=par_path#迭代器

def__iter__(self):forfileinos.listdir(self.par_path):file_abspath=os.path.join(self.par_path,file)#如果路徑是一個目錄,返回路徑

ifos.path.isdir(file_abspath):yieldfile_abspath#定義獲取文件類classloadFiles(object):def__init__(self,par_path):self.par_path=par_pathdef__iter__(self):folders=loadFolders(self.par_path)forfolderinfolders:#獲取一級目錄

catg=folder.split(os.sep)[-1]#遍歷一級目錄

forfileinos.listdir(folder):yieldcatg,fileyield方式讀取大量文件:2-2高效讀取文件#主函數(shù)if__name__=='__main__':

#記錄開始時間

start=time.time()filepath=os.path.abspath(r'../Corpus/CSCMNews')files=loadFiles(filepath)fori,msginenumerate(files):ifi%5000==0:print('{t}***{i}\tdocshasbeenRead'.format(i=i,t=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime())))

#記錄結束時間end=time.time()print('totalspenttimes:%.2f'%(end-start)+'s')圖4yield方式讀取文件結果實驗證明,yield生成器方式完成約30萬新聞文本的讀取需花費0.26秒,是遞歸方式的近180倍,可見,

溫馨提示

  • 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

提交評論