字典類(lèi)型及操作
字典的定義
理解“映射”
映射是一種鍵(索引)和值(數(shù)據(jù))的對(duì)應(yīng)
字典類(lèi)型是“映射”的體現(xiàn)
鍵值對(duì):鍵是數(shù)據(jù)索引的擴(kuò)展
字典是鍵值對(duì)的集合,鍵值對(duì)之間無(wú)序
采用大括號(hào){}和dict()創(chuàng)建,鍵值對(duì)用冒號(hào): 表示
{<鍵1>:<值1>,<鍵2>:<值3>}
可以通過(guò)鍵拿到值
我們?cè)谥暗牡募现姓f(shuō)聲明一個(gè)空集合要使用set(),而不是直接用{}這是因?yàn)?,如果使用{}默認(rèn)為集合
字典的處理函數(shù)及方法
?
注意keys()和values()返回的是一種字典的key類(lèi)型,這些類(lèi)型是可以用for in的方式做遍歷,但是不能當(dāng)做列表類(lèi)型來(lái)操作
?這里要注意的是:如果我們使用get()找鍵時(shí)沒(méi)有找到,那就返回第二個(gè)設(shè)置的參數(shù),否則返回值?
# 定義空字典d d={} # 向d新增2個(gè)鍵值對(duì)元素 d[0]=1 d[1]=2 # 修改第2個(gè)元素 d[1]=3 # 判斷字符"c"是否是d的鍵 "c" in d # 計(jì)算d的長(zhǎng)度 len(d) # 清空d d.clear()
Jieba庫(kù)的使用
jieba庫(kù)概述:jieba是優(yōu)秀的中文分詞第三方庫(kù)
中文文本需要通過(guò)分詞獲得單個(gè)的詞語(yǔ)
jieba是優(yōu)秀的中文分詞第三方庫(kù),需要額外安裝
jieba庫(kù)提供三種分詞模式,最簡(jiǎn)單只需掌握一個(gè)函數(shù)
jieba庫(kù)的安裝
(cmd命令行) pip install jieba
jieba分詞的原理?
jieba分詞依靠中文詞庫(kù)
利用一個(gè)中文詞庫(kù),確定中文字符之間的關(guān)聯(lián)概率
中文字符間概率大的組成詞組,形成分詞結(jié)果
除了分詞,用戶還可以添加自定義的詞組
jieba庫(kù)使用說(shuō)明
?精確模式、全模式、搜索引擎模式
精確模式:把文本精確的切分開(kāi),不存在冗余單詞
全模式:把文本中所有可能的詞語(yǔ)都掃描出來(lái),有冗余
搜索引擎模式:在精確模式基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分
?
jieba分詞要點(diǎn)?jieba.lcut(s)
文本詞頻統(tǒng)計(jì)--英文
需求:一篇文章,出現(xiàn)了哪些詞?哪些詞出現(xiàn)得最多?
該怎么做呢? 這里要分中文文本 和 英文文本
?英文文本:Hamet 分析詞頻
https://python123.io/resources/pye/hamlet.txt
中文文本:《三國(guó)演義》 分析人物
https://python123.io/resources/pye/threekingdoms.txt?
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-790915.html
這段代碼的作用是讀取一個(gè)名為“hamlet.txt”的文本文件,將其轉(zhuǎn)換為小寫(xiě)字母,并將文本中的特殊字符替換為空格。然后,將文本中的單詞分割,并統(tǒng)計(jì)每個(gè)單詞出現(xiàn)的次數(shù)。最后,按照單詞出現(xiàn)次數(shù)從高到低的順序,輸出出現(xiàn)次數(shù)最多的前10個(gè)單詞及其出現(xiàn)次數(shù)。
具體實(shí)現(xiàn)過(guò)程如下:
-
定義函數(shù)?
getText()
,它打開(kāi)名為“hamlet.txt”的文本文件,并將文件內(nèi)容讀取到變量?txt
?中。 -
將?
txt
?中的所有字符轉(zhuǎn)換為小寫(xiě)字母。 -
遍歷字符串?
txt
?中的每個(gè)字符,如果字符是特殊字符,則將其替換為空格。 -
返回處理后的文本?
txt
。 -
調(diào)用?
getText()
?函數(shù),將處理后的文本賦值給變量?hamletTxt
。 -
將?
hamletTxt
?中的單詞通過(guò)空格分割,并將每個(gè)單詞的出現(xiàn)次數(shù)保存在字典?counts
?中。 -
將?
counts
?轉(zhuǎn)換為列表?items
,并按照每個(gè)元素的第二個(gè)值(即單詞出現(xiàn)次數(shù))從高到低排序。 -
遍歷?
items
?列表的前10個(gè)元素,將每個(gè)元素的第一個(gè)值(即單詞)和第二個(gè)值(即出現(xiàn)次數(shù))輸出到屏幕上。其中,{0:<10}
?表示輸出第一個(gè)值(即單詞)時(shí)左對(duì)齊占用10個(gè)字符的位置,{1:>5}
?表示輸出第二個(gè)值(即出現(xiàn)次數(shù))時(shí)右對(duì)齊占用5個(gè)字符的位置。
文本詞頻統(tǒng)計(jì)--中文
import jieba
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
else:
counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):
word, count = items[i]
print ("{0:<10}{1:>5}".format(word, count))
這段代碼的作用是讀取一個(gè)名為“threekingdoms.txt”的文本文件,使用結(jié)巴分詞庫(kù)將文本中的中文分詞,并統(tǒng)計(jì)每個(gè)詞語(yǔ)出現(xiàn)的次數(shù)。最后,按照詞語(yǔ)出現(xiàn)次數(shù)從高到低的順序,輸出出現(xiàn)次數(shù)最多的前15個(gè)詞語(yǔ)及其出現(xiàn)次數(shù)。
具體實(shí)現(xiàn)過(guò)程如下:
-
導(dǎo)入結(jié)巴分詞庫(kù)?
jieba
。 -
打開(kāi)名為“threekingdoms.txt”的文本文件,并將文件內(nèi)容讀取到變量?
txt
?中。注意需要指定文件編碼為?utf-8
。 -
使用結(jié)巴分詞庫(kù)?
jieba
?中的?lcut()
?函數(shù)對(duì)文本進(jìn)行分詞,并將分詞結(jié)果保存在列表?words
?中。 -
創(chuàng)建一個(gè)空字典?
counts
,用于保存每個(gè)詞語(yǔ)的出現(xiàn)次數(shù)。 -
遍歷列表?
words
?中的每個(gè)詞語(yǔ),如果該詞語(yǔ)的長(zhǎng)度為1,則跳過(guò)該詞語(yǔ);否則,將該詞語(yǔ)的出現(xiàn)次數(shù)加1,并保存到字典?counts
?中。 -
將字典?
counts
?轉(zhuǎn)換為列表?items
,并按照每個(gè)元素的第二個(gè)值(即詞語(yǔ)出現(xiàn)次數(shù))從高到低排序。 -
遍歷?
items
?列表的前15個(gè)元素,將每個(gè)元素的第一個(gè)值(即詞語(yǔ))和第二個(gè)值(即出現(xiàn)次數(shù))輸出到屏幕上。其中,{0:<10}
?表示輸出第一個(gè)值(即詞語(yǔ))時(shí)左對(duì)齊占用10個(gè)字符的位置,{1:>5}
?表示輸出第二個(gè)值(即出現(xiàn)次數(shù))時(shí)右對(duì)齊占用5個(gè)字符的位置。
但是存在一個(gè)bug,將詞頻與人物并沒(méi)有相關(guān)聯(lián)?
import jieba
excludes = {"將軍","卻說(shuō)","荊州","二人","不可","不能","如此"}
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "諸葛亮" or word == "孔明曰":
rword = "孔明"
elif word == "關(guān)公" or word == "云長(zhǎng)":
rword = "關(guān)羽"
elif word == "玄德" or word == "玄德曰":
rword = "劉備"
elif word == "孟德" or word == "丞相":
rword = "曹操"
else:
rword = word
counts[rword] = counts.get(rword,0) + 1
for word in excludes:
del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):
word, count = items[i]
中文文本分詞
使用字典表達(dá)詞頻
擴(kuò)展程序解決問(wèn)題
面向問(wèn)題改造程序
這段代碼的功能是讀取《三國(guó)演義》文本文件,使用jieba分詞庫(kù)對(duì)文本進(jìn)行分詞,并統(tǒng)計(jì)關(guān)鍵詞出現(xiàn)的頻率。在統(tǒng)計(jì)關(guān)鍵詞的過(guò)程中,對(duì)一些關(guān)鍵詞進(jìn)行了簡(jiǎn)化和替換,如“孔明曰”簡(jiǎn)化為“孔明”,“玄德曰”簡(jiǎn)化為“劉備”,“丞相”替換為“曹操”。
該代碼的面向問(wèn)題改造思路如下:
-
問(wèn)題:需要統(tǒng)計(jì)《三國(guó)演義》中出現(xiàn)頻率最高的關(guān)鍵詞。
-
解決方案:使用jieba分詞庫(kù)對(duì)文本進(jìn)行分詞,并統(tǒng)計(jì)關(guān)鍵詞出現(xiàn)的頻率,然后按照出現(xiàn)頻率從高到低排序,選取出現(xiàn)頻率最高的前10個(gè)關(guān)鍵詞。
-
實(shí)現(xiàn)步驟:
- 讀取《三國(guó)演義》文本文件,使用jieba分詞庫(kù)對(duì)文本進(jìn)行分詞。
- 統(tǒng)計(jì)分詞結(jié)果中各個(gè)關(guān)鍵詞出現(xiàn)的頻率,將結(jié)果存儲(chǔ)在字典counts中。
- 對(duì)一些關(guān)鍵詞進(jìn)行簡(jiǎn)化和替換,如“孔明曰”簡(jiǎn)化為“孔明”,“玄德曰”簡(jiǎn)化為“劉備”,“丞相”替換為“曹操”。
- 刪除一些無(wú)意義的關(guān)鍵詞,如“將軍”、“卻說(shuō)”、“荊州”、“二人”、“不可”、“不能”、“如此”。
- 將counts轉(zhuǎn)換為列表items,并按照出現(xiàn)頻率從高到低排序。
- 選取出現(xiàn)頻率最高的前10個(gè)關(guān)鍵詞,并輸出結(jié)果。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-790915.html
?
到了這里,關(guān)于字典類(lèi)型操作、jieba庫(kù)使用及文本詞頻統(tǒng)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!