1. 程式人生 > 其它 >Python二級備考筆記6 《從清華到MIT》詞頻統計

Python二級備考筆記6 《從清華到MIT》詞頻統計

1 《從清華到MIT》詞頻統計

型別:Python 組合資料型別‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬


從data.txt檔案讀入一篇文章《從清華到MIT》,用 jieba 庫的函式 lcut 的全模式做分詞,統計詞彙長度為 2 的詞出現的次數,輸出出現次數最多的前 10 個詞彙及其出現次數。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

示例1:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

輸入:從data.txt檔案讀入
輸出:"
大學:21‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
設計:20‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
美國:16‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
清華:15‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
學生:14‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
教授:12‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
課程:11‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
一個:10‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
國大:8‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
計算:8
"

本題所用到的文章 參考http://www.qianmu.org/article/3865.htm儲存在記事本里即可

#在_____處填寫一行程式碼
#在…處填寫多行程式碼
#不允許修改其他程式碼
import jieba
dk = {}
with open('data.txt','r') as f:
    …
dp = list(dk.items())
dp.sort(key= lambda x:int(x[1]), reverse = True)
…

1.1 程式碼

#在_____處填寫一行程式碼
#在…處填寫多行程式碼
#不允許修改其他程式碼
import jieba
dk = {}
with open('data.txt','r') as f:
    lf = f.readlines()
for i in lf:
    ls = jieba.lcut(i,cut_all=True)
    for j in ls:
        if len(j)==2:
            if j in dk:
                dk[j] += 1
            else:
                dk[j] = 1
dp = list(dk.items())
dp.sort(key= lambda x:int(x[1]), reverse = True)
for i in range(10):
   print("{}:{}".format(dp[i][0],dp[i][1]))

2 檔案的開啟

with open('data.txt', 'r', encoding='utf-8') as f:
    print(f.read())
# ...more code

3 jieba

3.1 簡介

jieba分詞的三種模式:精確模式、全模式、搜尋引擎模式
精確模式:把文字精確的切分開,不存在冗餘單詞
全模式:把文字中所有可能的詞語都掃描出來,有冗餘
搜尋引擎模式:在精確模式基礎上,對長詞再次切分

3.2 常用函式

函式 描述
jieba.lcut(s) 精確模式,返回一個列表型別的分詞結果
jieba.lcut(s,cut_all=True) 全模式,返回一個列表型別的分詞結果,存在冗餘
jieba.lcut_for_search(s) 搜尋引擎模式,返回一個列表型別的分詞結果,存在冗餘
jieba.add_word(w) 向分詞詞典增加新詞w

3.3 例子

from jieba import *
str1 = "智慧財產權是由人類智力勞動成果依法產生的專有權利。"
print(lcut(str1))
print(lcut_for_search(str1))
print(lcut(str1,cut_all=True))

輸出

['智慧財產權', '是', '由', '人類', '智力', '勞動成果', '依法', '產生', '的', '專有', '權利', '。']
['知識', '產權', '智慧財產權', '是', '由', '人類', '智力', '勞動', '成果', '勞動成果', '依法', '產生', '的', '專有', '權利', '。']
['知識', '智慧財產權', '產權', '是', '由', '人類', '智力', '勞動', '勞動成果', '成果', '依法', '產生', '的', '專有', '專有權', '有權', '權利', '。']

4 練習

4.1 問題1

用 jieba 分詞,計算字串 s 中的中文詞彙個數,不包括中文標點符號。顯示輸分詞後的結果,用”/ ”分隔,以及中文詞彙個數。

輸入

工業網際網路”實施的方式是通過通訊、控制和計算技術的交叉應用,建造一個資訊物理系統,促進物理系統和數字系統的融合。

輸出

工業/ 網際網路/實施/ 的/ 方式/是/ 通過/ 通訊/控制/ 和/ 計算技術/的/ 交叉/ 應用/建造/ 一個/ 資訊/物理/ 系統/ 促進/物理/ 系統/ 和/數字/ 系統/ 的/融合/
中文詞語數是:27

4.2 問題2

在問題1的基礎上,統計分詞後的詞彙出現的次數,用字典結構儲存。顯示輸出每個詞彙出現的次數,以及出現次數最多的詞彙。如果有多個詞彙出現次數一樣多,都要顯示出來。

輸入

工業網際網路”實施的方式是通過通訊、控制和計算技術的交叉應用,建造一個資訊物理系統,促進物理系統和數字系統的融合。

輸出

控制: 1
物理: 2
通訊: 1
交叉: 1
網際網路: 1
和: 2
是: 1
計算技術: 1
一個: 1
的: 3
數字: 1
促進: 1
資訊: 1
方式: 1
建造: 1
應用: 1
系統: 3
通過: 1
實施: 1
融合: 1
工業: 1
出現最多的詞是(的 系統):3 次