文檔讀取贰健,詞云辑鲤,分詞
1.詞云的生成
安裝wordcloud庫(kù)呻粹,imageio庫(kù)
若在線pip install wordcloud庫(kù)失敗勇哗,選擇離線安裝:(解決c++環(huán)境缺失的問題)在工作目錄保存wordcloud.whl文件后昼扛,打開終端 pip install [文件路徑]文件名進(jìn)行安裝
import jieba
from wordcloud import WordCloud
text = '''詞語是詞和語的合稱,包括單詞詞組及整個(gè)詞匯文字組成語句文章的最小組詞結(jié)構(gòu)形式欲诺。新詞典詞語豐富抄谐,信息量大。詞是由語素組成的最小的造句單位扰法。詞語有2字蛹含、3字及4字的分類 '''
txt_list = jieba.lcut(text)
txt = ' '.join(txt_list)
print(txt)
w = WordCloud(
background_color = 'white', #背景顏色
font_path = 'msyh.ttc', #字體
width = 400, #寬
height = 300 #高
).generate(text)
w.to_file('詞云.jpg')#保存詞云
2.文本讀取
import jieba
with open('build/novel/threekingdom.txt', 'r', encoding = 'utf-8')as f:
print(f.read)
另一種形式
txt = open('build/novel/threekingdom.txt', 'r', encoding = 'utf-8').read()
3.生成任意形狀的詞云
import jieba
import imageio
from wordcloud import WordCloud
mask = imageio.imread('china.jpg')
with open('build/novel/threekingdom.txt', 'r', encoding= 'UTF-8') as f:
data = f.read()
# print(data)
# print(len(data))
word_list = jieba.lcut(data)
word = " ".join(word_list)
#print(word_list)
print(len(word_list))
w = WordCloud(
background_color = 'white',
font_path = 'msyh.ttc',
width = 800,
height = 600,
mask = mask
# max_words = 40, # min_font_size = 80
# max_font_size = 80
).generate(word)
w.to_file('threekingdom.png')
4.排序
生成一個(gè)列表,然后隨機(jī)隨機(jī)打亂列表順序
li = []
for i in range(10):
li.append(i)
print('生成的li:',li)
from random import shuffle
shuffle(li)
print('打亂順序之后的li:', li)
對(duì)列表重新進(jìn)行排序
這里采用兩種方法:
1.使用 list對(duì)象的sort方法
li.sort()
print('使用sort方法進(jìn)行排序之后:', li)
# reverse=True倒序排序
li.sort(reverse=True)
print('使用sort方法,指定reverse進(jìn)行排序之后:', li)
- 使用內(nèi)置函數(shù)sorted
li = sorted(li)
print('使用sorted函數(shù)排序之后', li)
li = sorted(li, reverse=True)
print('使用sorted函數(shù), reverse=True 排序之后', li)
總結(jié): sort和sorted的區(qū)別
- sort僅針對(duì)列表進(jìn)行排序, 無返回值,會(huì)在原來的列表基礎(chǔ)上修改
- sorted 是python中單獨(dú)的內(nèi)置函數(shù)塞颁,可以對(duì)可迭代(iterable)對(duì)象進(jìn)行排序浦箱,不局限于list, 它不改表原生的數(shù)據(jù)吸耿,重新生成一個(gè)新的隊(duì)列
5.函數(shù)
- 以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()
- 任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間酷窥,圓括號(hào)之間可以用于定義參數(shù)咽安。
- 函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明,函數(shù)內(nèi)容以冒號(hào)起始蓬推,并且縮進(jìn)妆棒。
- return [表達(dá)式] 結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方沸伏。不帶表達(dá)式的return相當(dāng)于返回 None糕珊。
def 函數(shù)名(參數(shù)):
function_suite
return [表達(dá)式]
實(shí)例:
def calculatNum(num):
sum = 0
for i in range(1, num + 1):
sum += i
return sum
num = int (input('請(qǐng)輸入任意整數(shù):'))
print('1到{}之間的累積和為{}'.format(num, calculatNum(num)))
stu_info_list = [
{'name': 'zhangsan', 'age': 18, 'addr': '渾南'},
{'name': 'lisi', 'age': 50, 'addr': '渾南'},
{'name': 'wangwu', 'age': 3, 'addr': '渾南'},
{'name': 'zhaoliu', 'age': 35, 'addr': '渾南'},
{'name': 'tianqi', 'age': 20, 'addr': '渾南'}
]
print('排序前', stu_info_list)
def sort_by_age(x):
return x['age']
stu_info_list.sort(key = sort_by_age)
print('排序后', stu_info_list)
6.匿名函數(shù)
python 使用 lambda 來創(chuàng)建匿名函數(shù)。
- lambda只是一個(gè)表達(dá)式
- lambda的主體是一個(gè)表達(dá)式馋评,而不是一個(gè)代碼塊放接。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
- lambda函數(shù)擁有自己的命名空間留特,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)纠脾。
- 雖然lambda函數(shù)看起來只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù)蜕青,后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率苟蹈。
lambda [arg1 [,arg2,.....argn]]:expression
實(shí)例:
sum_two_num = lambda x, y : x + y
print(sum_two_num(1, 5))#6
使用帶有匿名函數(shù)的表達(dá)式進(jìn)行排序
stu_info_list = [
{'name': 'zhangsan', 'age': 18, 'addr': '渾南'},
{'name': 'lisi', 'age': 50, 'addr': '渾南'},
{'name': 'wangwu', 'age': 3, 'addr': '渾南'},
{'name': 'zhaoliu', 'age': 35, 'addr': '渾南'},
{'name': 'tianqi', 'age': 20, 'addr': '渾南'}
]
stu_info_list1 = sorted(stu_info_list, key=lambda items:items['age'], reverse = True)
print(stu_info_list1)
利用上述所學(xué)實(shí)現(xiàn),實(shí)例:三國(guó)人物出現(xiàn)頻率top10分析
- 出現(xiàn)頻率前20的詞匯統(tǒng)計(jì)代碼
import jieba
with open('build/novel/threekingdom.txt', 'r', encoding = 'utf-8')as f:
data = f.read()#讀取文件
words_list = jieba.lcut(data)#分詞
#print(words_list)
#構(gòu)建一個(gè)容器右核,存儲(chǔ)我們的數(shù)據(jù)
counts = {}
#遍歷wordlist慧脱,篩選出人名
for word in words_list:
#print(word)
if len(word) <= 1:
#過濾無關(guān)詞語
continue
else:
#向counts內(nèi)更新值
counts[word] = counts.get(word, 0) + 1
#print(counts)
items = list(counts.items())
items.sort(key = lambda x:x[1], reverse = True)
#print(items)
for i in range(20):
word,count = items[i]
print('"{}"出現(xiàn)次數(shù):{}'.format(word, count))