Python語(yǔ)言程序設(shè)計(jì) 課件 7-字典和集合_第1頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 7-字典和集合_第2頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 7-字典和集合_第3頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 7-字典和集合_第4頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 7-字典和集合_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python語(yǔ)言程序設(shè)計(jì)PythonLanguageProgramming7字典和集合引例:文獻(xiàn)詞頻分析映射類型:字典NLTK庫(kù)簡(jiǎn)介jieba庫(kù)集合引例【例7-1】自然語(yǔ)言處理(NaturalLanguageProcessing,NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個(gè)重要方向。它研究能實(shí)現(xiàn)人與計(jì)算機(jī)之間用自然語(yǔ)言進(jìn)行有效通信的各種理論和方法。自然語(yǔ)言處理是一門(mén)融語(yǔ)言學(xué)、計(jì)算機(jī)科學(xué)、數(shù)學(xué)于一體的科學(xué)。詞頻分析(WordFrequencyAnalysis)是對(duì)文獻(xiàn)正文中重要詞匯出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計(jì)與分析,是文本挖掘的重要手段。它是文獻(xiàn)計(jì)量學(xué)中傳統(tǒng)的和具有代表性的一種內(nèi)容分析方法,基本原理是通過(guò)詞出現(xiàn)頻次多少的變化,來(lái)確定熱點(diǎn)及其變化趨勢(shì)。要求:以美國(guó)知識(shí)產(chǎn)權(quán)領(lǐng)域的案件“ChristianLouboutinS.A.v.YvesSaintLaurentAm.Holding,Inc.”為分析對(duì)象,統(tǒng)計(jì)文獻(xiàn)中出現(xiàn)的高頻詞。文獻(xiàn)數(shù)據(jù)如圖所示。引例【參考代碼】importmatplotlib.pyplotaspltfromstringimportdigitsimportstringdefremove_punctuation(text):#去掉字符串中的標(biāo)點(diǎn)符號(hào)temp=[]forcintext:ifcnotinstring.punctuation:temp.append(c)newtext=''.join(temp)return(newtext)f=open('demofile.txt','r',encoding='UTF-8').read()filelistprocessing=[]filestring=remove_punctuation(f)filelist=filestring.split()stopwordslist=f=open('stopwords.txt','r',encoding='UTF-8').read().split('\n')forffinfilelist:word=ff.lower()#字母全部改成小寫(xiě)iflen(word)>=3:remove_digits=str.maketrans('','',digits)#前兩個(gè)字符用于映射以供下一步替換,第三個(gè)字符串中的字符用于刪掉res=word.translate(remove_digits)filelistprocessing.append(res)filelistprocessing1=[]forssinfilelistprocessing:ifssnotinstopwordslist:#若不是停止詞則進(jìn)行下列操作:長(zhǎng)度不小于三的,去掉數(shù)字字符后加入列表filelistprocessing1.append(ss)filedict={}forwordinfilelistprocessing1:ifwordinfiledict:filedict[word]=filedict[word]+1else:filedict[word]=1List2=[]forkey,valinfiledict.items():#詞頻由高到低排序List2.append((val,key))List2.sort(reverse=True)n=10#控制輸出數(shù)量最多的前n個(gè)單詞及對(duì)應(yīng)次數(shù)forxinrange(n):print(List2[x])x_data,y_data=[],[]#構(gòu)建數(shù)據(jù)foriinrange(n):x_data.append(List2[i][1])y_data.append(List2[i][0])#繪圖plt.bar(x=x_data,height=y_data)plt.show()映射類型:字典創(chuàng)建字典和給字典賦值訪問(wèn)字典中的元素操作字典映射類型的內(nèi)建函數(shù)和方法詞云庫(kù)wordcloud簡(jiǎn)介字典格式dict1={key1:value1,key2:value2,……}字典中的元素為鍵(key)值(value)對(duì),中間用冒號(hào)”:”隔開(kāi),一對(duì)鍵值對(duì)是一個(gè)元素,元素間用逗號(hào)‘,’分割,整個(gè)字典的標(biāo)識(shí)符是大括號(hào)‘{}’。字典中主要描述對(duì)象是鍵。>>>dict1={5:['x','y','z'],(6,7):100,'a':{1:2.5,'b':3}}>>>dict1{5:['x','y','z'],(6,7):100,'a':{1:2.5,'b':3}}>>>dict1[5]['x','y','z']>>>dict1[(6,7)]100>>>dict1['a']{1:2.5,'b':3}>>>dict1[a]Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>dict1[a]NameError:name'a'isnotdefined>>>dict1['a'][1]2.5創(chuàng)建字典和給字典賦值創(chuàng)建空字典Python中,變量在使用前是不需要聲明的,有的時(shí)候,為了使用方便,會(huì)在生成字典之前,定義一個(gè)空的字典,并在后續(xù)過(guò)程中為該字典添加元素>>>dict1={}>>>dict1{}>>>type(dict1)<class'dict'>>>>dict1=dict()#dict()函數(shù)空參數(shù)創(chuàng)建字典>>>dict1{}創(chuàng)建字典和給字典賦值直接創(chuàng)建字典將符合字典形式的“式子”(一對(duì)值)賦值給變量,該變量即為一個(gè)字典。如前面統(tǒng)計(jì)詞頻的例子>>>dict1={'trademark':240,'mark':168,'law':123,'red':111,'functionality':103}>>>dict1{'trademark':240,'mark':168,'law':123,'red':111,'functionality':103}>>>type(dict1)<class'dict'>創(chuàng)建字典和給字典賦值用dict()函數(shù)創(chuàng)建字典dict()函數(shù)是Python的內(nèi)置字典構(gòu)建函數(shù),它的參數(shù)可以是賦值表達(dá)式,中間用逗號(hào)隔開(kāi)>>>dict2=dict(trademark=240,world=20,govement=27,we=31,home=9)>>>dict2{‘trademark’:240,'world':20,'govement':27,'we':31,'home':9}dict()的參數(shù)也可以是一個(gè)容器,如元組或者列表,該容器包含多個(gè)元素,每個(gè)元素是有且僅有兩個(gè)元素的容器>>>dict3=dict((('trademark',240),('world',12),('govement',27),('we',31),('home',9)))>>>dict3{'trademark':240,'world':12,'govement':27,'we':31,'home':9}>>>dict4=dict([('trademark',240),('world',12),('govement',27),('we',31),('home',9)])>>>dict4{'trademark':240,'world':12,'govement':27,'we':31,'home':9}創(chuàng)建字典和給字典賦值dict()和zip()函數(shù)組合創(chuàng)建字典zip()函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象>>>words=['trademark','world','govement','we','home']>>>frequency=[240,12,27,31,9]>>>zip(words,frequency)<zipobjectat0x0000000003120888>>>>dict(zip(words,frequency)){'trademark':240,'world':12,'govement':27,'we':31,'home':9}創(chuàng)建字典和給字典賦值用dict.fromkeys()創(chuàng)建字典該函數(shù)通常用來(lái)初始化字典,設(shè)置value的默認(rèn)值,假設(shè)在創(chuàng)建詞頻記錄時(shí),默認(rèn)的詞頻為0>>>dict5=dict.fromkeys(range(3),'x')>>>dict5{0:'x',1:'x',2:'x'}>>>dict6=dict.fromkeys(['america','world','govement','we','home'],0)>>>dict6{'america':0,'world':0,'govement':0,'we':0,'home':0}創(chuàng)建字典和給字典賦值給字典賦值首先定義空字典,以賦值的方式為字典的鍵添加值,同時(shí)為字典添加新的元素——鍵值對(duì)。列表是有序列的容器,每個(gè)元素有序號(hào),而字典沒(méi)有,所以dict7[0]不是尋找dict7的第0號(hào)元素,而是尋找dict7中鍵為0所對(duì)應(yīng)的值>>>dict7={}>>>dict7['trademark']=240>>>dict7['world']=12>>>dict7{'trademark':240,'world':12}>>>dict7[0]Traceback(mostrecentcalllast):File"<pyshell#39>",line1,in<module>dict7[0]KeyError:0訪問(wèn)字典中的元素遍歷字典中的鍵for循環(huán)遍歷>>>dict1={'trademark':240,'world':12,'govement':27,'we':31,'home':9}>>>forxindict1: print(x)輸出結(jié)果如下:trademarkworldgovementwehome訪問(wèn)字典中的元素遍歷字典中的鍵和值for循環(huán)遍歷>>>forkeyindict1: print(key,dict1[key])輸出結(jié)果如下:trademark240world12govement27we31home9操作字典查詢字典中的元素是鍵值對(duì)的映射,可以將值看作是描述對(duì)象“鍵”的屬性,因此,可以查詢某個(gè)鍵所對(duì)應(yīng)的值(屬性)>>>dict1={'trademark':240,'world':12,'govement':27,'we':31,'home':9}>>>print(dict1['trademark'])#查詢某個(gè)鍵所對(duì)應(yīng)的值240>>>print(dict1['china'])#當(dāng)查詢的鍵不在字典中時(shí)會(huì)報(bào)錯(cuò)Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>print(dict1['china'])KeyError:'china'>>>print(dict1.get('trademark

'))#用get()方法同樣可以得到某個(gè)鍵的值240>>>print(dict1.get('china'))#使用get()方法查詢時(shí),若該鍵不在字典中,則返回NoneNone>>>print('america'indict1)#判斷一個(gè)鍵是否在字典中,返回True或者FalseFalse操作字典修改通過(guò)賦值操作,可以直接修改字典中鍵所對(duì)應(yīng)的值>>>dict1={'trademark':240,'world':12,'govement':27,'we':31,'home':9}>>>dict1['trademark']=240>>>print(dict1){'trademark':240,'world':12,'govement':27,'we':31,'home':9}操作字典增加元素通過(guò)為字典中的鍵賦值,可以直接在字典中增加元素>>>dict1={‘trademark’:240,'world':12,'govement':27,'we':31,'home':9}>>>dict1['people']=21>>>print(dict1){'trademark':240,'world':12,'govement':27,'we':31,'home':9,'people':21}操作字典刪除元素>>>dict1={'trademark':240,'world':12,'govement':27,'we':31,'home':9}>>>deldict1['people']#永久刪除>>>dict1{'trademark':240,'world':12,'govement':27,'we':31,'home':9}>>>dict1.pop('home')#彈出,和列表中pop()方法一樣9>>>dict1{'trademark':240,'world':12,'govement':27,'we':31}>>>text=dict1.popitem()#隨機(jī)彈出>>>text('we',31)>>>text=dict1.popitem()#隨機(jī)彈出>>>text('govement',27)>>>dict1{'trademark':240,'world':12}映射類型的內(nèi)建函數(shù)和方法方法是一種特殊的函數(shù)python中,直接在模塊中而不是類中定義的,叫做函數(shù)。依附于類的,定義在類中,屬于類的,叫方法。但方法本質(zhì)上,還是一個(gè)函數(shù)。方法的第一個(gè)參數(shù)不一定必須是self。以下展示Python字典的內(nèi)置函數(shù)和內(nèi)置方法。函數(shù)功能len(dict)計(jì)算字典元素的個(gè)數(shù),即鍵的總數(shù)str(dict)以字符串的形式輸出字典表7-1Python字典的內(nèi)置函數(shù)映射類型的內(nèi)建函數(shù)和方法方法功能dict.clear()清除字典內(nèi)所有元素dict.copy()返回一個(gè)字典的淺復(fù)制dict.fromkeys(seq[,val])創(chuàng)建一個(gè)新字典,以序列seq中的元素作為字典的鍵,val為字典所有鍵所對(duì)應(yīng)的初始值dict.get(key,default=None)返回指定鍵的值,如果值不在字典中則返回default值dict.has_key(key)如果鍵在字典dict里則返回true,否則返回falsedict.items()返回可遍歷的(鍵,值)組成元素的元組列表dict.keys()以列表返回一個(gè)字典所有的鍵dict.setdefault(key,default=None)和get()類似,但如果鍵不存在于字典中,將會(huì)添加鍵并將值設(shè)為defaultdict.update(dict2)把字典dict2的鍵/值對(duì)更新到dict里dict.values()以列表返回字典中的所有值pop(key[,default])刪除字典給定鍵key所對(duì)應(yīng)的值,返回值為被刪除的值。key值必須給出。否則,返回default值popitem()隨機(jī)返回并刪除字典中的一對(duì)鍵和值表7-2Python字典的內(nèi)置方法詞云庫(kù)wordcloud簡(jiǎn)介【例7-2】繪制例7-1中知識(shí)產(chǎn)權(quán)領(lǐng)域的案件“ChristianLouboutinS.A.v.YvesSaintLaurentAm.Holding,Inc.txt”的詞云?!緟⒖即a】fromwordcloudimportWordCloud,STOPWORDSimportmatplotlib.pyplotasplttxt=open('demofile.txt','r',encoding='utf-8').read()mystopwords=open('stopwords.txt','r',encoding='utf-8').read().split()stop_words=mystopwords+list(STOPWORDS)my_wordcloud=WordCloud(background_color='White',stopwords=stop_words).generate(txt)#my_wordcloud.to_file('pywcloud.png')plt.imshow(my_wordcloud)plt.axis('off')plt.show()詞云庫(kù)wordcloud簡(jiǎn)介常用參數(shù)和方法描述width指定詞云對(duì)象生成圖片的寬度,默認(rèn)400像素height指定詞云對(duì)象生成圖片的高度,默認(rèn)200像素min_font_size指定詞云中字體的最小字號(hào),默認(rèn)4號(hào)max_font_size指定詞云中字體的最大字號(hào),根據(jù)高度自動(dòng)調(diào)節(jié)font_step指定詞云中字體字號(hào)的步進(jìn)間隔,默認(rèn)為1font_path指定文體文件的路徑,默認(rèn)Nonemax_words指定詞云顯示的最大單詞數(shù)量,默認(rèn)200stop_words指定詞云的停用詞列表mask可設(shè)定詞云的形狀,默認(rèn)為長(zhǎng)方形,需要引用imread()函數(shù)background_color指定詞云圖片的背景顏色WordCloud.generate()向WordCloud對(duì)象中加載文本,類型為字符串WordCloud.to_file(filename)將詞云輸出為圖像文件,.png或.jpg格式表7-3WordCloud常用的方法和參數(shù)NLTK庫(kù)簡(jiǎn)介Python中的Naturallanguagetoolkit(NLTK)是最受歡迎的自然語(yǔ)言處理(NLP)工具包之一。提供了WordNet這種方便處理詞匯資源的接口,以及分類、分詞、詞干提取、標(biāo)注、語(yǔ)法分析、語(yǔ)義推理等類庫(kù)和方法搜索文本:text.concordance(self,word,width=79,lines=25)搜索文本中,元素word周圍出現(xiàn)的詞,并以整齊的窗口展示。其中的參數(shù)word表示指定的單詞,width表示窗口的寬度,lines表示顯示的行數(shù)。importnltkf=open('demofile.txt','r',encoding='UTF-8').read()tokens=nltk.word_tokenize(f)text=nltk.Text(tokens)text.concordance('law')NLTK庫(kù)簡(jiǎn)介計(jì)算單詞出現(xiàn)次數(shù)計(jì)算單詞‘law’在文本中出現(xiàn)的次數(shù)。由于沒(méi)有統(tǒng)一大小寫(xiě),所以和前文中的數(shù)字有所差別。>>>text.count('law')38NLTK庫(kù)簡(jiǎn)介搜索上下文相似的詞:text.similar(‘law’)>>>text.similar('law')protectionfunctionalityandtheinfringementqualitexmarkspatentfunctionofficeoriginrecordfactregistrationsdocumentholdingtypecourtahistoryNLTK庫(kù)簡(jiǎn)介搜索幾個(gè)詞匯上下文的公共詞匯:common_contexts(self,words,num=20)>>>mon_contexts(['red'])a_lacqueredthe_outsolea_solemonochrome_shoeof_lacqueredcontrasting_lacqueredtrademark_colorshoe_solethe_solea_outsolecolor_inlacquered_outsolethan_themonochromatic_shoesa_lacquerthe_lacquereds_claimedlacquered_soleall_lacqueredand_yslNLTK庫(kù)簡(jiǎn)介離散圖表示詞出現(xiàn)的位置序列:text.dispersion_plot(self,[word1,word2,])用離散圖表示詞在text中出現(xiàn)的位置,即從開(kāi)頭算起的第多少個(gè)詞。>>>text.dispersion_plot(['red','trade','mark'])NLTK庫(kù)簡(jiǎn)介NLTK詞干提取單詞詞干提取就是從單詞中去除詞綴并返回詞根。如working的詞干是work。NLTK中PorterStemmer類,使用的就是Porter詞干提取算法>>>fromnltk.stemimportPorterStemmer>>>stemmer=PorterStemmer()>>>print(stemmer.stem('working'))>>>word>>>print(stemmer.stem('works'))workNLTK庫(kù)簡(jiǎn)介返回從文本中生成的搭配詞(連在一起的詞),忽略停用詞。collocation_list(self,num=20,window_size=2)其中,num為返回的搭配詞的最大數(shù)量,為整型;window_size為搭配所跨越的令牌數(shù)(default=2),為整型>>>text.collocation_list(num=20)NLTK庫(kù)簡(jiǎn)介詞頻統(tǒng)計(jì)FreqDist()【例7-3】用NLTK實(shí)現(xiàn)文檔的詞頻統(tǒng)計(jì)。【參考代碼】frombabilityimportFreqDistfrommatplotlibimportrcParamstext=open('demofile.txt','r',encoding='UTF-8').read()fredist=FreqDist(text.split(''))tops=fredist.most_common(15)#輸出前n個(gè)高頻詞print(tops)print(fredist['the'])#輸出元素'the'的頻率print(fredist.freq('the'))#輸出元素'the'出現(xiàn)的次數(shù)fredist.tabulate(10)#頻率分布表,以表格的形式打印出現(xiàn)次數(shù)最多的前n項(xiàng)fredist.plot(15)NLTK庫(kù)簡(jiǎn)介詞頻統(tǒng)計(jì)FreqDist()【例7-4】去掉上例文本中的停用詞和標(biāo)點(diǎn)符號(hào)之后再進(jìn)行詞頻統(tǒng)計(jì)?!緟⒖即a】frombabilityimportFreqDistfrommatplotlibimportrcParamsimportstringfromnltk.corpusimportstopwords#此處若產(chǎn)生報(bào)錯(cuò),需按照提示自行下載sowodsdefremove_punctuation(text):#自定義函數(shù),去掉字符串中的標(biāo)點(diǎn)符號(hào)temp=[]forcintext:ifcnotinstring.punctuation:temp.append(c)newtext=''.join(temp)return(newtext)f=open('demofile.txt','r',encoding='UTF-8').read()text=remove_punctuation(f)text=text.lower()#字符串中所有的字母統(tǒng)一為小寫(xiě)textlist=text.split('')textlist=[textlist[i]foriinrange(0,len(textlist))iftextlist[i]!='']#去掉列表中的空格元素textlist=[wforwintextlistifnotwinstopwords.words()]fredist=FreqDist(textlist)tops=fredist.most_common(15)#輸出前n個(gè)高頻詞print(tops)print(fredist['the'])#輸出元素'the'的頻率print(fredist.freq('the'))#輸出元素'the'出現(xiàn)的次數(shù)fredist.tabulate(10)#頻率分布表fredist.plot(15)#繪制頻率分布圖jieba庫(kù)強(qiáng)大的中文分詞庫(kù)支持三種分詞模式全模式精確模式搜索引擎模式支持自定義字典函數(shù)描述jieba.cut(s)精確模式,返回一個(gè)可迭代的數(shù)據(jù)類型jieba.cut(s,cut_all=True)全模式,輸出文本s中所有可能單詞jieba.cut_for_search(s)搜索引擎模式,適合搜索引擎建立索引的分詞結(jié)果jieba.lcut(s)精確模式,返回一個(gè)列表類型,建議使用jieba.lcut(s,cut_all=True)全模式,返回一個(gè)列表類型,建議使用jieba.lcut_for_search(s)搜索引擎模式,返回一個(gè)列表類型,建議使用jieba.add_word(w)向分詞詞典中增加新詞w表7-4jieba庫(kù)的解析jieba庫(kù)中文詞頻統(tǒng)計(jì)【例7-5】統(tǒng)計(jì)裁判文書(shū)‘某某盜竊罪再審刑事判決書(shū).txt’中的詞頻?!緟⒖即a】importjiebatxt=open('某某盜竊罪再審刑事判決書(shū).txt','rb').read()words=jieba.lcut(txt)counts={}excludes={"\r\n"}#設(shè)置停用詞過(guò)濾forwordinwords:iflen(word)==1:#排除單個(gè)字符的分詞結(jié)果continueelse:counts[word]=counts.get(word,0)+1forwordinexcludes:del(counts[word])items=list(counts.items())items.sort(key=lambdax:x[1],reverse=True)foriinrange(25):word,count=items[i]print("{0:<10}{1:>5}".format(word,count))jieba庫(kù)中文詞頻統(tǒng)計(jì)【例7-6】使用NLTK對(duì)上例裁判文書(shū)中文文本進(jìn)行詞頻統(tǒng)計(jì)。【參考代碼】frombabilityimportFreqDistfrommatplotlibimportrcParamsimportstringfromnltk.corpusimportstopwordsimportjiebatxt=open('羅峰盜竊罪再審刑事判決書(shū).txt','rb').read()words=jieba.lcut(txt)fredist=FreqDist(words)tops=fredist.most_common(15)print(tops)jieba庫(kù)關(guān)鍵詞提取關(guān)鍵詞提取是從待分析文本中抽取和其意義最相關(guān)的一些詞語(yǔ),在文獻(xiàn)檢索、自動(dòng)文摘、文本聚類、分類等方面有著重要的應(yīng)用分為有監(jiān)督和無(wú)監(jiān)督兩類TF-IDF算法,TextRank算法和主題模型算法(包括LSA,LSI,LDA等)都屬于無(wú)監(jiān)督算法jieba庫(kù)關(guān)鍵詞提取TF-IDF算法。用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)TF意思是詞頻(TermFrequency),IDF意思是逆文本頻率指數(shù)(InverseDocumentFrequency)主要思想是:如果某個(gè)單詞在一篇文章中出現(xiàn)的頻率TF高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語(yǔ)具有很好的類別區(qū)分能力,適合用來(lái)分類TF的公式:其中nij是該詞在文件dj中出現(xiàn)的次數(shù),分母是文件dj中所有出現(xiàn)詞條的總和jieba庫(kù)關(guān)鍵詞提取TF-IDF算法。用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)IDF的公式其中,|D|

是語(yǔ)料庫(kù)中的文件總數(shù)。|{j:ti∈dj}|

表示包含詞語(yǔ)

ti

的文件數(shù)目(即

ni,j≠0

的文件數(shù)目)。如果該詞語(yǔ)不在語(yǔ)料庫(kù)中,就會(huì)導(dǎo)致分母為零,因此一般情況下使用

1+|{j:ti∈dj}|,即:jieba庫(kù)關(guān)鍵詞提取TF-IDF算法。用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)>>>importjieba.analyse>>>jieba.analyse.extract_tags(sentence,topK=20,withWeight=False,allowPOS=())其中sentence為待提取的文本,topK為返回幾個(gè)TF/IDF權(quán)重最大的關(guān)鍵詞,默認(rèn)值為20;withWeight為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為False;allowPOS僅包括指定詞性的詞,默認(rèn)值為空,即不篩選。>>>jieba.analyse.TFIDF(idf_path=None)新建TFIDF實(shí)例,idf_path為IDF頻率文件。Jieba也可以自定義停用詞庫(kù):>>>jieba.analyse.set_stop_words(file_name)其中file_name為自定義語(yǔ)料庫(kù)的路徑。jieba庫(kù)關(guān)鍵詞提取TF-IDF算法。用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)【例7-6】使用jieba庫(kù)中的TF-IDF算法提取文書(shū)中的關(guān)鍵詞?!緟⒖即a】importjiebaimportjieba.analysecontent=open('羅峰盜竊罪再審刑事判決書(shū).txt','rb').read()tags=jieba.analyse.extract_tags(content,topK=20,withWeight=True)print(tags)jieba庫(kù)關(guān)鍵詞提取TF-IDF算法。用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)將文本語(yǔ)料庫(kù)切換成自定義語(yǔ)料庫(kù)>>>jieba.analyse.set_idf_path(file_name)其中file_name為自定義語(yǔ)料庫(kù)的路徑。jieba庫(kù)關(guān)鍵詞提取基于TextRank算法的關(guān)鍵詞抽取通過(guò)把文本分割成若干組成單元(單詞、句子)并建立圖模型,利用投票機(jī)制對(duì)文本中的重要成分進(jìn)行排序,僅利用單篇文檔本身的信息即可實(shí)現(xiàn)關(guān)鍵詞提取、文摘基本思想是首先將待抽取關(guān)鍵詞的文本進(jìn)行分詞;其次以固定窗口大小(默認(rèn)為5,通過(guò)span屬性調(diào)整),詞之間的共現(xiàn)關(guān)系,構(gòu)建圖;最后計(jì)算圖中節(jié)點(diǎn)的PageRank,注意是無(wú)向帶權(quán)圖jieba庫(kù)關(guān)鍵詞提取基于TextRank算法的關(guān)鍵詞抽取【例7-8】使用jieba庫(kù)中的TextRank算法提取文書(shū)中的關(guān)鍵詞。importjiebaimportjieba.analysecontent=open('羅峰盜竊罪再審刑事判決書(shū).txt','rb').read()tags=jieba.analyse.textrank(content,topK=20,withWeight=True)print(tags)集合集合類型集合的常用函數(shù)與操作集合類型是無(wú)序的、不重復(fù)的數(shù)據(jù)序列。集合的符號(hào)是大括號(hào)“{}”,集合的創(chuàng)建用set()函數(shù)。創(chuàng)建集合>>>set1={1,2,3,'a'}>>>set1{1,2,3,'a'}>>>type(set1)<class'set'>>>>list1=[1,2,3,4]>>>turtle1=(5,6,7,8,9)>>>set2=set(list1)>>>set2{1,2,3,4}>>>set3=set(turtle1)>>>set3{5,6,7,8,9}>>>list2=[1,2,2,2,2]>>>set1=set(list2)#當(dāng)列表中包含重復(fù)的元素時(shí),變成集合后,會(huì)自動(dòng)合并重復(fù)的元素>>>set1{1,2}集合的常用函數(shù)與操作添加元素s.add(x)將元素x添加到集合s中,若s中原來(lái)已經(jīng)包含x元素,則不進(jìn)行任何動(dòng)作>>>s={1,2,3,4}>>>s.add('text')>>>s{1,2,3,4,'text'}>>>s.add(3)>>>s{1,2,3,4,'text'}集合的常用函數(shù)與操作更新集合s.update(x)將集合x(chóng)并入原有集合s中,其中x可以是列表、元組和字典,x也可以有多個(gè),用逗號(hào)分開(kāi)>>>list1=[1,2,3,4]>>>turtle1=(5,6,7,8,9)>>>set1={'a','b','c'}>>>set1.update(list1)>>>set1{1,2,3,4,'b','c','a'}>>>set1.update(turtle1)>>>set1{1,2,3,4,'b',5,6,7,8,9,'c','a'}>>>set1.update(100)Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>set1.update(100)TypeError:'int'objectisnotiterable集合的常用函數(shù)與操作刪除集合中的元素s.discard(x)和s.remove(x)前者將x從集合s中刪除,若x不存在,則不會(huì)報(bào)錯(cuò),不進(jìn)行任何操作;后者進(jìn)行同樣的刪除動(dòng)作,但當(dāng)x不存在于s中時(shí),則會(huì)報(bào)錯(cuò)在集合中也有pop()方法,但因集合無(wú)序,故該方法會(huì)隨機(jī)刪除一個(gè)元素>>>set1={1,2,3,4,'b',5,6,7,8,9,'c','a'}>>>set1.pop()1>>>set1.pop()2s.clear()方法會(huì)清除集合中的所有元素。集合的常用函數(shù)與操作集合的關(guān)系運(yùn)算方法表達(dá)式說(shuō)明--xins1判斷元素x在集合s1中--xnotins1判斷元素x不在集合s1中--s1==s2判斷兩個(gè)集合等價(jià)--s1!=s2判斷兩個(gè)集合不等價(jià)--s1&|s2;s2真子集測(cè)試s1.issubset(s2)s1&|s2;=s2子集測(cè)試

s1>s2嚴(yán)格意義上的超集測(cè)試s1.issuperset(s2)s>=t超集測(cè)試s1.union(s2)s1|s2求并集s1.intersection(s2)s1&s2求交集s1.difference(s2)s1–s2求差集s1.symmetric_difference(s2)s1^s2對(duì)稱差集s1.copy()

返回集合s1的淺拷貝表7-5集合類型運(yùn)算符和常用方法集合的常用函數(shù)與操作集合的關(guān)系運(yùn)算>>>set1={1,2,3,4,5,6}>>>set2={4,5,6,7,8,9}>>>set1|set2{1,2,3,4,5,6,7,8,9}>>>set1.union(set2){1,2,3,4,5,6,7,8,9}>>>set1.difference(set2)#返回集合set1中除去和set2中公共的部分{1,2,3}>>>set1.symmetric_difference(set2)#返回兩個(gè)集合中除去公共元素的其它元素{1,2,3,7,8,9}>>>ersection(set2)#返回兩個(gè)集合公共的部分{4,5,6}7.3.5集合的常用函數(shù)與操作【例7-9】對(duì)比李白和杜甫的詩(shī)詞。李白和杜甫是詩(shī)歌史上的一對(duì)雙子星,他們是我國(guó)歷史上最具影響力的兩位詩(shī)人,一個(gè)被稱為詩(shī)仙,一個(gè)被稱為詩(shī)圣。他們共同經(jīng)歷了唐王朝由盛極衰的歷史。面對(duì)這個(gè)亂世,他們個(gè)人不同的遭遇和不同的性格,形成了迥然不同的詩(shī)歌藝術(shù)風(fēng)格。從用詞的角度比較二人詩(shī)詞的差異。集合的常用函數(shù)與操作【參考代碼】importjiebafromcollectionsimportCounterimportmatplotlib.pyplotaspltimportmatplotlib.pyplotaspyplotexword={'一一','/','一','!','',',','。',':','(',')','?','!','(',')','·','\n','',';','、','\u3000',''}defread_file(file):withopen(file,'r',encoding='utf-8')asf:l=f.readlines()returnldefclean_note(l):#清除原文中包含的括號(hào)txt=''forr,lineinenumerate(l):if'('inline:l[r]=line.split('(')[0]elif'('inline:l[r]=line.split('(')[0]txt+=l[r]returntxtdefclean_word(l):forr,wordinenumerate(l):ifwordinexword:dell[r]else:forexinexword:l[r]=word.strip(ex)defdic_to_tuple(dic):l=[]forwordindic:l.append((dic[word],word))l=sorted(l,reverse=True)returnldefprocess_unique_set(s,d):#將set生成字典l,w,c=[],[],[]forwordins:iflen(word)==1:continuel.append((d[word],word))l=sorted(l,reverse=True)forwordinl:w.append(word[1])c.append(word[0])returnl,w,cdefprocess_common_set(s,dic1,dic2):l,w,c=[],[],[]forwordins:iflen(word)==1:continuel.append((dic1[word]+dic2[word],word))l=sorted(l,reverse=True)forwordinl:w.append(word[1])c.append(word[0])returnl,w,cdefget_count(l,d):c=[]forwordinl:c.append(d[word[1]])returnc集合的常用函數(shù)與操作if__name__=='__main__':li_list=read_file('李白詩(shī)集.txt')du_list=read_file('杜甫詩(shī)集.txt')li_txt=clean_note(li_list)du_txt=clean_note(du_list)li_list=jieba.lcut(li_txt)#此時(shí)list中包含可jieba分詞以后的結(jié)果,都是一個(gè)個(gè)詞du_list=jieba.lcut(du_txt)#print(li_list[:20])print(len(li_list))clean_word(li_list)clean_word(du_list)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論