版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Ch15字符串和文本處理本章要點(diǎn):15.1相關(guān)模塊概述15.2正則表達(dá)式15.3正則表達(dá)式模塊re15.4正則表達(dá)式應(yīng)用舉例15.5中文分詞庫(kù)jieba15.6詞云庫(kù)Wordcloud15.7綜合應(yīng)用舉例資源下載提示2課件等資源:掃描封底的“課件下載”二維碼,在公眾號(hào)“書圈”中下載。素材(源碼):掃描本書目錄上方的二維碼下載。講解視頻:掃描封底刮刮卡中的二維碼,再掃描書中相應(yīng)章節(jié)中(位于每章最前)的二維碼,作為開(kāi)源的補(bǔ)充閱讀和學(xué)習(xí)資源。
案例研究:掃描封底刮刮卡中的二維碼,再掃描書中相應(yīng)章節(jié)中(位于每章最后)的二維碼,可以在線學(xué)習(xí)。每章練習(xí)題:掃描封底刮刮卡中的二維碼,再掃描每章習(xí)題部分的二維碼,下載本章練習(xí)題電子版。
題庫(kù)平臺(tái):教師登錄網(wǎng)站(),聯(lián)系客服開(kāi)通教師權(quán)限字符串和文本處理的相關(guān)模塊string模塊:包含若干字符集常量,其處理字符串的函數(shù)已經(jīng)被字符串對(duì)象的方法替代。re模塊:正則表達(dá)式處理。codecs模塊:字符編碼處理。difflib模塊:比較字符串列表的差異。gettext模塊:語(yǔ)言國(guó)際化。textwrap模塊:格式化文本段落。unicodedata模塊:Unicode字符庫(kù)。字符串處理概述的常用方法(1)使用str對(duì)象提供的方法,可以實(shí)現(xiàn)常用的字符串處理功能(2)使用正則表達(dá)式,匹配和查找字符串并對(duì)其進(jìn)行相應(yīng)的修改處理(3)使用專用的第三方文本處理模塊(例如NLTK)正則表達(dá)式正則表達(dá)式是由普通字符(例如:字符a到z)以及特殊字符(稱為元字符)組成的文字模式,元字符包括:.、^、$、*、+、?、{、}、[、]、\、|、(以及)"Go"#匹配字符串"GodGood"中的"Go""G.d"#匹配字符串"GodGood"中的"God",.為元字符,匹配除行終止符外的任何字符"d$"#匹配字符串"GodGood"中的最后一個(gè)"d",$為元字符,匹配結(jié)尾正則表達(dá)式引擎處理正則表達(dá)式的軟件Python的模塊re實(shí)現(xiàn)了正則表達(dá)式處理的功能導(dǎo)入re模塊后,使用findall、search函數(shù)可以進(jìn)行匹配【例15.1】正則表達(dá)式示例>>>importre#導(dǎo)入模塊re>>>re.findall('d','goodness')['d']普通字符和轉(zhuǎn)義字符普通字符包括ASCII字符、Unicode字符和轉(zhuǎn)義字符正則表達(dá)式中的元字符(.、^、$、*、+、?、{、}、[、]、\、|、(以及))包含特殊含義,如果要作為普通字符使用,則需要轉(zhuǎn)義。例如:\$>>>re.findall("fo","thequickbrownfoxjumpsforfood")['fo','fo','fo']>>>re.findall("1+1=2","1+1=2")#元字符+重復(fù)一次或多次,即匹配11=2[]>>>re.findall("1+1=2","11=2")#元字符+重復(fù)一次或多次,即匹配11=2['11=2']>>>re.findall("1\+1=2","1+1=2")#轉(zhuǎn)義元字符+,即匹配1+1=2['1+1=2']>>>re.findall("(note)","please(note)")#()在正則表達(dá)式中為分組['note']>>>re.findall("\(note\)","please(note)")#\(匹配圓括號(hào)['(note)']字符類和預(yù)定義字符類字符類是由一對(duì)方括號(hào)[]括起來(lái)的字符集合,正則表達(dá)式引擎匹配字符集中的任意一個(gè)字符[xyz]:枚舉字符集,匹配括號(hào)中的任意字符。例如,"t[aeio]n"匹配"tan"、"ten"、"tin"、"ton"。[^xyz]:否定枚舉字符集,匹配不在此括號(hào)中的任意字符。例如:[^aeiou]。[a-z]:指定范圍的字符,匹配指定范圍的任意匹配。例如:[0-9]。[^a-z]:指定范圍以外的字符,匹配指定范圍以外的任意匹配。例如:[^0-9]預(yù)定義字符集預(yù)定義字符集通常使用縮寫形式,例如:\d等價(jià)于[0-9]邊界匹配符重復(fù)限定符例如:中華人民共和國(guó)郵政編碼由6位數(shù)字組成,使用重復(fù)限定符“\d{6}”,表示數(shù)字字母重復(fù)6次匹配算法:貪婪和懶惰貪婪性匹配算法是指重復(fù)限定符會(huì)導(dǎo)致正則表達(dá)式引擎試圖盡可能多的重復(fù)前導(dǎo)字符,只有當(dāng)這種重復(fù)會(huì)引起整個(gè)正則表達(dá)式匹配失敗的情況下,引擎會(huì)進(jìn)行回溯貪婪算法返回了一個(gè)最左邊的最長(zhǎng)的匹配。如果在重復(fù)限定符后面加后綴“?”,則正則表達(dá)式引擎使用懶惰性匹配算法選擇分支正則表達(dá)式中“|”表示選擇例如,中國(guó)電話號(hào)碼一般為:區(qū)號(hào)-電話號(hào)碼,區(qū)號(hào)為3位或4位數(shù)字,電話號(hào)碼為6位或8位數(shù)字,故其正則表達(dá)式為:(0\d{2}|0\d{3})-(\d{8}|d{6})>>>re.findall(r"((0\d{2}|0\d{3})-(\d{8}|d{6}))","電話號(hào))[(,'021','62232333')]分組和向后引用(1)重復(fù)限定符重復(fù)前導(dǎo)字符,如果需要重復(fù)多個(gè)字符,則需要把正則表達(dá)式的一部分放在圓括號(hào)()內(nèi),形成分組例如IP地址的一般形式為:ddd.ddd.ddd.ddd,ddd.重復(fù)了三次,可以使用分組:(\d{1,3}\.){3}\d{1,3}當(dāng)用“()”定義了一個(gè)正則表達(dá)式組后,正則引擎則會(huì)把被匹配的組按照順序編號(hào),存入緩存分組和向后引用(2)分組命名和引用在Python中,對(duì)組可以進(jìn)行如下命名并引用:(?P<name>group)#組命名(?P=name)#引用命名組分組的擴(kuò)展語(yǔ)法,如表15-5所示>>>m=re.search(r"(?P<Area>\d+)-(?P<No>\d+)","電話號(hào)碼)>>>m.groupdict()#輸出:{'Area':'021','No':'62232333'}常用正則表達(dá)式正則表達(dá)式模塊re>>>re.match("to","Tobe,\nornottobe")#無(wú)匹配>>>re.search("^to","Tobe,\nornottobe")#無(wú)匹配>>>re.search("to","Tobe,\nornottobe")#匹配<_sre.SRE_Matchobjectat0x02D21528>>>>re.findall("be","Tobe,\nornottobe")
['be','be']>>>re.finditer("be","Tobe,\nornottobe")#返回結(jié)果迭代器<callable_iteratorobjectat0x02D22BF0>>>>foriinre.finditer("be","Tobe,\nornottobe"):print(i,end='')<_sre.SRE_Matchobjectat0x02D21528><_sre.SRE_Matchobjectat0x02D21608>正則表達(dá)式re模塊提供了以下若干用于匹配和搜索的函數(shù)。re.match(pattern,string,flags=0):若匹配,返回Match對(duì)象,否則返回None。re.search(pattern,string,flags=0):若匹配,返回Match對(duì)象,否則返回None。re.findall(pattern,string,flags=0):返回匹配結(jié)果列表;若pattern中包含組,返回組的列表。re.finditer(pattern,string,flags=0):返回所有匹配結(jié)果Match對(duì)象迭代器。匹配選項(xiàng)匹配選項(xiàng)說(shuō)明re.A、re.ASCII\w、\W、\b、\B、\d、\D、\s以及\S,只匹配ASCII字符re.I、re.IGNORECASE忽略大小寫。例如:>>>re.match("to","Tobe,\nornottobe")#無(wú)匹配>>>re.match("to","Tobe,\nornottobe",re.I)#匹配<_sre.SRE_Matchobjectat0x02D21640>re.L、re.LOCALE\w、\W、\b、\B、\s以及\S,與本地字符集有關(guān)re.M、re.MULTILINE多行匹配模式。例如:>>>re.search("^or","Tobe,\nornottobe")#無(wú)匹配>>>re.search("^or","Tobe,\nornottobe",re.M)#匹配<_sre.SRE_Matchobjectat0x02D21528>re.S、re.DOTALL匹配所有字符,包括換行符re.X、re.VERBOSE忽略空格并可以使用#注釋,提高可讀性。例如:b=pile(r"\d+\.\d*")等價(jià)于a=pile(r"""\d+#整數(shù)部分\.#小數(shù)點(diǎn)\d*#小數(shù)部分""",re.X)re.DEBUG輸出調(diào)試信息正則表達(dá)式對(duì)象>>>regex1=pile('to')>>>regex2=pile('^to')>>>regex1.match("Tobe,\nornottobe")#無(wú)匹配>>>regex2.search("Tobe,\nornottobe")#無(wú)匹配>>>regex1.search("Tobe,\nornottobe")#匹配<_sre.SRE_Matchobjectat0x02C73528>>>>regex1.findall("Tobe,\nornottobe")#返回結(jié)果列表['to']>>>regex1.finditer("Tobe,\nornottobe")#返回結(jié)果迭代器<callable_iteratorobjectat0x02C26730>匹配對(duì)象使用正則表達(dá)式re模塊中的函數(shù)search和match,或者正則表達(dá)式對(duì)象方法search和match,返回的結(jié)果為匹配對(duì)象(Matchobject)。使用匹配對(duì)象的方法,可以進(jìn)行匹配結(jié)果處理>>>m=re.search("be","Tobe,\nornottobe")>>>m.group()#輸出:'be'>>>m.span()#輸出:(3,5)>>>m=re.search(r"(?P<Area>\d+)-(?P<No>\d+)","電話號(hào)碼)>>>m.group(),m.group(0),m.group(1),m.group(2)(,,'021','62232333')>>>m.groups()#輸出:('021','62232333')>>>m.groupdict()#輸出:{'Area':'021','No':'62232333'}匹配和替換正則表達(dá)式re模塊中的函數(shù)sub和subn,或者正則表達(dá)式對(duì)象方法sub和subn,使用正則表達(dá)式匹配字符串,用指定內(nèi)容替換結(jié)果,并返回替換后的字符串其中,pattern為匹配模式;string為要匹配和替換的字符串;repl為要替換的內(nèi)容;count為替換的最大次數(shù);flags為匹配選項(xiàng)>>>re.sub('bad','good','Ittastesbad.')'Ittastesgood.'分隔字符串正則表達(dá)式re模塊中的函數(shù)split,或正則表達(dá)式對(duì)象方法split,使用正則表達(dá)式匹配字符串(匹配分隔符),并分隔字符串,返回分隔后的字符串列表>>>re.split('\W+','Good,better,best!')#'\W+'1個(gè)以上非單詞字符['Good','better','best','']>>>re.split(‘\W+’,‘Good,better,best!’,1)#分隔1次['Good','better,best!']>>>re.split('(\W+)','Good,better,best!')#使用分組時(shí),同時(shí)返回分隔字符['Good',',','better',',','best','!','']>>>re.split('\d','1a2b3c4d')#分隔符為數(shù)字字符['','a','b','c','d']正則表達(dá)式應(yīng)用舉例(1)字符串包含驗(yàn)證【例15.2】驗(yàn)證一個(gè)字符串是否為有效的電子郵件格式(emailaddress_check.py)importos,redefcheck_email(strEmail):regex_email=pile(r'^[\w\.\-]+@([\w\-]+\.)+[\w\-]+$')result=Trueifregex_email.match(strEmail)elseFalsereturnresult#測(cè)試代碼if__name__=='__main__':str1="hjiang@"#有效的電子郵箱str2=""#無(wú)效的電子郵箱print(str1,'是有效的電子郵件格式嗎?',check_email(str1))print(str2,'是有效的電子郵件格式嗎?',check_email(str2))正則表達(dá)式應(yīng)用舉例(2)字符串查找和拆分【例15.3】根據(jù)給定正則表達(dá)式的匹配拆分字符串示例(tasklist.py)。例子中使用了os.popen執(zhí)行操作系統(tǒng)命令并返回管道importos,redeftasklist():regex_task=pile(r'([\w.]+(?:[\w.]+)*)\s\s+(\d+)\w+\s\s+\d+\s\s+([\d,]+K)')withos.popen('tasklist/nh','r')asf:forlineinf:print(regex_task.findall(line.strip()))if__name__=='__main__':tasklist()正則表達(dá)式應(yīng)用舉例(3)字符串替換和清除【例15.4】從輸入字符串中清除HTML標(biāo)記(html_txt.py)importredefhtml_txt(htmlwithtag):regex_href=pile(r'<.+?>')returnregex_href.sub('',htmlwithtag)#替換為空'',并返回替換結(jié)果#測(cè)試代碼if__name__=='__main__':htmltext=r'<ahref=\"index.html\">WelcometoPythonworld!</a>'print(html_txt(htmltext))正則表達(dá)式應(yīng)用舉例(4)字符串查找和截取【例15.5】從指定的網(wǎng)頁(yè)中查找所有的超鏈接地址(url_extract.py)importre,urllib.requestdefurl_extract(homepage):regex_href=pile(r'href="(.+?)"')f=urllib.request.urlopen(homepage)webcontents=f.read().decode()matches=regex_href.finditer(webcontents)forminmatches:print(m.group(1))#測(cè)試代碼if__name__=='__main__':www=r''url_extract(www)中文分詞庫(kù)jieba在文本處理中,常常需要通過(guò)分詞,將連續(xù)的字序列按照一定的規(guī)范重新組合成詞序列。在英文的句子中,單詞之間是以空格作為自然分界符的,因而分詞相對(duì)容易。而中文句子中單詞之間沒(méi)有形式上的分界符,因而中文分詞則比較復(fù)雜和困難使用Python第三方庫(kù)jieba可以方便地實(shí)現(xiàn)中文分詞【例15.6】安裝jieba庫(kù)在Windows命令提示符窗口中,輸入命令行命令“pipinstalljieba”jieba庫(kù)包含以下三種分詞模式。(1)精確模式:把文本精確地分開(kāi),不存在冗余單詞。(2)全模式:把文本中所有可能的詞語(yǔ)都掃描出來(lái),存在冗余單詞。(3)搜索引擎模式:在精確模式基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分jieba庫(kù)的主要函數(shù)API【例15.7】jieba庫(kù)的基本使用舉例>>>importjieba>>>s="中華人民共和國(guó)是一個(gè)歷史偉大的國(guó)家!">>>jieba.lcut(s)Buildingprefixdictfromthedefaultdictionary...DumpingmodeltofilecacheC:\Users\jh\AppData\Local\Temp\jieba.cacheLoadingmodelcost0.968seconds.Prefixdicthasbeenbuiltsuccessfully.['中華人民共和國(guó)','是','一個(gè)','歷史','偉大','的','國(guó)家','!']>>>jieba.lcut(s,cut_all=True)['中華','中華人民','中華人民共和國(guó)','華人','人民','人民共和國(guó)','共和','共和國(guó)','國(guó)是','一個(gè)','歷史','偉大','的','國(guó)家','!']>>>jieba.lcut_for_search(s)['中華','華人','人民','共和','共和國(guó)','中華人民共和國(guó)','是','一個(gè)','歷史','偉大','的','國(guó)家','!']使用jieba庫(kù)分析統(tǒng)計(jì)中文文檔使用jieba庫(kù)對(duì)中文文檔分析統(tǒng)計(jì)的過(guò)程通常包含以下三個(gè)步驟。(1)讀取文本文件的內(nèi)容到字符串s中。(2)使用jieba庫(kù)的cut函數(shù)對(duì)s進(jìn)行分詞。(3)循環(huán)遍歷分詞結(jié)果列表或者可迭代對(duì)象,進(jìn)行統(tǒng)計(jì)分析,并輸出結(jié)果【例15.8】《紅樓夢(mèng)》是清代作家曹雪芹所著的中國(guó)古代章回體長(zhǎng)篇小說(shuō),是中國(guó)古典四大名著之一。使用jieba庫(kù)編寫程序(hongloumeng.py),統(tǒng)計(jì)分析文本文件“紅樓夢(mèng).txt”中出現(xiàn)頻率最高的5個(gè)單詞importjiebatxtfilepath='紅樓夢(mèng).txt'withopen(txtfilepath,encoding='utf-8')asf:#打開(kāi)文件txt=f.read()#讀取文本文件的所有內(nèi)容words=jieba.cut(txt)#使用精確模式對(duì)文本進(jìn)行分詞counts={}#通過(guò)鍵值對(duì)的形式存儲(chǔ)詞語(yǔ)及其出現(xiàn)的次數(shù)forwordinwords:#遍歷所有詞語(yǔ),每出現(xiàn)一次其對(duì)應(yīng)的值加1iflen(word)==1:#單個(gè)詞語(yǔ)不計(jì)算在內(nèi)continueelse:counts[word]=counts.get(word,0)+1items=list(counts.items())#將鍵值對(duì)轉(zhuǎn)換成列表items.sort(key=lambdax:x[1],reverse=True)#根據(jù)詞語(yǔ)出現(xiàn)的次數(shù)進(jìn)行從大到小排序foriinrange(5):word,count=items[i]print("{0:<8}{1:>8}".format(word,count))詞云庫(kù)Wordcloud在文本分析中,當(dāng)統(tǒng)計(jì)關(guān)鍵字(詞)的頻率后,可以通過(guò)詞云圖(也稱為文字云)對(duì)文本中出現(xiàn)頻率較高的“關(guān)鍵詞”予以視覺(jué)化的展現(xiàn),從而突出文本中的主旨。使用Python第三方庫(kù)Wordcloud可以方便地實(shí)現(xiàn)詞云圖【例15.9】安裝Wordcloud庫(kù)(1)方法1:在Windows命令提示符窗口中,輸入命令行命令“pipinstallwordcloud”,以安裝Wordcloud庫(kù)。注意,使用該方法需要本地計(jì)算機(jī)安裝了MicrosoftVisualC++14.0編譯器,否則安裝會(huì)失敗。(2)方法2:下載Wordcloud庫(kù)的編譯版本然后安裝C:\WINDOWS\system32>pipinstallC:\tmp\wordcloud?1.8.1?cp310?cp310?win_amd64.whlWordcloud庫(kù)的APIWordcloud庫(kù)的核心是WordCloud類,所有的功能都封裝在WordCloud類中。使用Wordcloud庫(kù)生成詞云圖,一般遵循以下步驟。(1)實(shí)例化一個(gè)WordCloud對(duì)象,例如,wc=WordCloud()。(2)調(diào)用wc.generate(text),對(duì)文本text進(jìn)行分詞,并生成詞云圖。(3)調(diào)用wc.to_file("wc.png"),把生成的詞云圖輸出到圖像文件wc.png。在生成詞云時(shí),Wordcloud默認(rèn)會(huì)以空格或標(biāo)點(diǎn)為分隔符對(duì)目標(biāo)文本text進(jìn)行分詞處理【例15.10】使用Wordcloud庫(kù)生成簡(jiǎn)單的詞云圖(wc_animals.py)fromwordcloudimportWordCloud #導(dǎo)入模塊text="dogcatfishbirdcatcatdogcatcatdogmonkeycat"wc=WordCloud(background_color="white") #實(shí)例化WordCloud對(duì)象wc.generate(text) #文本分詞,生成詞云圖wc.to_file("wc_animals.png") #詞云圖輸出到圖像文件定制詞云圖的繪制參數(shù)定制詞云圖的繪制參數(shù)示例【例15.11】《傲慢與偏見(jiàn)》(PrideandPrejudice)是英國(guó)女小說(shuō)家簡(jiǎn)·奧斯汀創(chuàng)作的長(zhǎng)篇小說(shuō),其內(nèi)容保存在“PrideAndPrejudice.txt”文件中。編寫程序(wc_PridePrejudice.py),使用Wordcloud庫(kù)為“傲慢與偏見(jiàn)”這本小說(shuō)生成自定義的詞云圖。通過(guò)指定詞云形狀的掩碼圖片(heart1.jpg),生成炫酷的詞云圖fromwordcloudimportWordCloudimportnumpyasnpfromPILimportImagemask1=np.array(Image.open("heart1.jpg"))#讀取為np-array類型,以傳遞給mask參數(shù)withopen('PrideAndPrejudice.txt','r',encoding='utf-8')asfile:text=file.read()wc=WordCloud(background_color="white",width=800,height=600,max_words=100,mask=mask1)wc.generate(text)wc.to_file('傲慢與偏見(jiàn).png')使用Wordcloud庫(kù)顯示中文詞云圖對(duì)于中文文本,分詞處理一般需要遵循以下步驟。(1)先通過(guò)jieba庫(kù)將文本分詞處理。(2)把jieba中文分詞的結(jié)果列表以空格為分隔符拼接成文本。(3)實(shí)例化一個(gè)WordCloud對(duì)象,例如,wc=WordCloud()。注意:需要指定中文字體,否則顯示為亂碼。(4)調(diào)用wc.generate(text),對(duì)文本text進(jìn)行分詞,并生成詞云圖。(5)調(diào)用wc.to_file("wc.png"),把生成的詞云圖輸出到圖像文件wc.png【例15.12】編寫程序(wc_honglou.py),先通過(guò)jieba庫(kù)將文件“紅樓夢(mèng).txt”進(jìn)行文本分詞處理,然后使用Wordcloud庫(kù)顯示中文詞云圖。注意使用停用詞列表excludes排出一些意義不大的詞【例8.19】使用Wordcloud庫(kù)顯示中文詞云圖(wc_honglou.py)importjieba #導(dǎo)入模塊fromwordcloudimportWordCloud #導(dǎo)入模塊excludes=["什么","一個(gè)","我們","那里","你們","如今","說(shuō)道","知道","老太太","起來(lái)","這里","出來(lái)","他們","眾人","自己","一面","太太","只見(jiàn)","怎么","奶奶","兩個(gè)","沒(méi)有","不知","這個(gè)","聽(tīng)見(jiàn)","幾個(gè)","姑娘","不是"] #停用詞列表txtfilepath='紅樓夢(mèng).txt'withopen(txtfilepath,encoding='utf-8')asf: #打開(kāi)文件(文本讀取模式)
txt=f.read() #讀取文本文件的所有內(nèi)容
words=jieba.lcut(txt) #使用精確模式對(duì)文本進(jìn)行分詞
words=[wordforwordinwordsiflen(word)>1] #去除單個(gè)詞語(yǔ)
newtxt=''.join(words) #使用空格將分詞結(jié)果拼接成文本
wc=WordCloud(background_color="white",width=800,height=600,font_path="msyh.ttc",max_words=100,max_font_size=80,stopwords=excludes) #創(chuàng)建WordCloud對(duì)象
wc.generate(newtxt) #文本分詞,生成詞云圖
wc.to_file('紅樓夢(mèng).png') #詞云圖輸出到圖像文件【例15.13】編寫程序(wc_2021政府報(bào)告.py)先通過(guò)jieba庫(kù)將文件“2021政府報(bào)告.txt”進(jìn)行文本分詞處理,然后使用Wordcloud庫(kù)顯示中文詞云圖。通過(guò)指定詞云形狀(五角星)的掩碼圖片(star.jpg),生成炫酷的詞云圖importjiebafromwordcloudimportWordCloudimportnumpyasnpfromPILimportImagemask1=np.array(Image.open("star.jpg"))#讀取為np-array類型,以傳遞給mask參數(shù)txtfilepath=‘2021政府報(bào)告.txt'withopen(txtfilepath,encoding='utf-8')asf:#打開(kāi)文件
txt=f.read()#讀取文本文件的所有內(nèi)容
words=jieba.cut(txt)#使用精確模式對(duì)文本進(jìn)行分詞
words=[wordforwordinwordsiflen(word)>1]#去除單個(gè)詞語(yǔ)
newtxt=''.join(words)#使用空格,將jieba分詞結(jié)果拼接成文本
wc=WordCloud(background_color="white",width=800,height=600,font_path="msyh.ttc",max_words=100,mask=mask1,max_font_size=80)wc.generate(newtxt)wc.to_file('2020政府報(bào)告.png')綜合應(yīng)用舉例文本統(tǒng)計(jì)文本統(tǒng)計(jì)程序可以從文本文件中讀取字符串序列,統(tǒng)計(jì)文本中包含的段落數(shù)、行數(shù)、句數(shù)、單詞數(shù),以及統(tǒng)計(jì)各單詞出現(xiàn)的頻率頻率計(jì)數(shù)廣泛用于從海量的數(shù)據(jù)中統(tǒng)計(jì)各種事件出現(xiàn)的頻率。例如,語(yǔ)言學(xué)家從文章中發(fā)現(xiàn)單詞的使用模式;商人從訂單中發(fā)現(xiàn)重要的客戶等等【例15.14】文本統(tǒng)計(jì)示例程序(text_stat.py)。統(tǒng)計(jì)美國(guó)小說(shuō)家馬克·吐溫1876年發(fā)表的長(zhǎng)篇小說(shuō)《湯姆·索亞歷險(xiǎn)記》(TheAdventuresofTomSawyer)中的文本信息:段落數(shù)、行數(shù)、句數(shù)、單詞數(shù),以及出現(xiàn)頻率最高的10個(gè)單詞…tobecontinuedimportreimportcollectionsdefanalyze_text(text):paragraphs=re.split("\n\n",text)paragraph_count=len(paragraphs)print("段落數(shù):{0}".format(paragraph_count))lines=re.split("\n",text)line_count=len(lines)print("行數(shù):{0}".format(line_count))sentences=re.split("[.?!]",text)sentence_count=len(sentences)print("句數(shù):{0}".format(sentence_count))words=re.split(r"\W+",text)word_count=len(words)print("單詞數(shù):{0}".format(word_count))freqs=collections.Counter(words)print("頻率最高的10個(gè)單詞:")for(w,n)infreqs.most_common(10):print("{0:10}:{1:10}".format(w,n))if__name__=="__main__":filename="tomsawyer.txt"withopen(filename,"r")asf:text=f.read()analyze_text(text.strip())【例15.14】文本統(tǒng)計(jì)示例程序(text_stat.py)基因預(yù)測(cè)基因是生命的本質(zhì),生物學(xué)家用字母A、C、T和G分別代表生物體DNA的四個(gè)堿基。基因由一序列的密碼子組成,每個(gè)密碼子是一個(gè)由一系列代表氨基酸的三個(gè)堿基組成的序列。判斷某字符串是否對(duì)應(yīng)一個(gè)潛在的基因的準(zhǔn)則如下:(1)基因長(zhǎng)度為3的倍數(shù);(2)以ATG標(biāo)識(shí)基因的開(kāi)始,以TAG、TAA或者
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 可再生能源電解水制氫耦合合成氨系統(tǒng)集成與技術(shù)經(jīng)濟(jì)評(píng)價(jià)
- 二零二五年度汽車維修保養(yǎng)套餐銷售代理居間服務(wù)合同
- 應(yīng)急預(yù)案落地實(shí)施
- 科技行業(yè)的會(huì)計(jì)工作總結(jié)
- 二零二五個(gè)人向金融機(jī)構(gòu)借款合同終止條件合同模板4篇
- 二零二五年度鋼構(gòu)橋梁建造與維護(hù)服務(wù)合同
- 游戲中心前臺(tái)工作心得
- 工業(yè)園區(qū)綜治工作中心上墻制度
- 二零二五版石料運(yùn)輸車輛運(yùn)輸責(zé)任保險(xiǎn)合同范本6篇
- 進(jìn)出口行業(yè)客戶開(kāi)發(fā)總結(jié)
- TD/T 1044-2014 生產(chǎn)項(xiàng)目土地復(fù)墾驗(yàn)收規(guī)程(正式版)
- 2024年湖南現(xiàn)代物流職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案1套
- 垃圾桶創(chuàng)新設(shè)計(jì)說(shuō)明書
- 蔚來(lái)汽車技術(shù)
- 浙教版勞動(dòng)二年級(jí)上冊(cè)全冊(cè)教案
- 智能衣服方案
- 李克勤紅日標(biāo)準(zhǔn)粵語(yǔ)注音歌詞
- 基于視覺(jué)的工業(yè)缺陷檢測(cè)技術(shù)
- 軍事英語(yǔ)詞匯整理
- DB31-T 1440-2023 臨床研究中心建設(shè)與管理規(guī)范
- 老客戶維護(hù)方案
評(píng)論
0/150
提交評(píng)論