python實例:三國演義TXT文本詞頻分析
0x00 前言
找不到要寫什麽東西了!今天有個潭州大牛講師 說了個 文本詞頻分析
我基本上就照抄了一遍
中間遇到一些小小的問題 自我百度 填坑補全了 如下 :
效果演示
0x01 準備環境及介紹
python3.x版本 隨意
安裝jieba庫
pip install jieba
jieba三種模式:
1.精準模式 lcut函數,返回一個分詞列表
2.全模式
3.搜索引擎模式
詞頻:
<單詞>:<出現次數>的鍵值對
IPO描述 imput output process
輸入 :從文件讀取三國演義的內容
處理 :采用jiedb進行分詞,字典數據結構統計詞語出現的頻率
輸出 :文章中出現最對的前10個詞
代碼:
第一步:讀取文件
第二步:分詞
第三步:統計
第四步:排序
介紹完畢了!那麽進入實戰吧!
0x02 實戰
完整代碼如下:
1 import jieba 2 3 content = open(‘三國演義.txt‘, ‘r‘,encoding=‘utf-8‘).read() 4 words =jieba.lcut(content)#分詞 5 excludes={"將軍","卻說","二人","後主","上馬","不知","天子","大叫","眾將","不可","主公","蜀兵","只見","如何","商議","都督","一人","漢中","不敢","人馬","陛下","魏兵","天下","今日","左右","東吳","於是","荊州","不能","如此","大喜","引兵","次日","軍士","軍馬"}#排除的詞匯 6 words=jieba.lcut(content) 7 counts={} 8 9 for word in words: 10 if len(word) == 1: # 排除單個字符的分詞結果 11 continue 12 elif word == ‘孔明‘ or word == ‘孔明曰‘: 13 real_word = ‘孔明‘ 14 elifword == ‘關公‘ or word == ‘雲長‘: 15 real_word = ‘關羽‘ 16 elif word == ‘孟德‘ or word == ‘丞相‘: 17 real_word = ‘曹操‘ 18 elif word == ‘玄德‘ or word == ‘玄德曰‘: 19 real_word = ‘劉備‘ 20 else: 21 real_word =word 22 counts[word] = counts.get(word, 0) + 1 23 24 25 26 for word in excludes: 27 del(counts[word]) 28 items=list(counts.items()) 29 items.sort(key=lambda x:x[1],reverse=True) 30 for i in range(10): 31 word,count=items[i] 32 print("{0:<10}{1:>5}".format(word,count))
0x03 註意事項
① 在執行的過程中遇到:‘gbk‘ codec can‘t decode byte 0x82 in position 20: illegal multibyte sequence 編碼錯誤:content = open("C:\\Users\\geek\\Desktop\\python.txt", "r",encoding= ‘utf-8‘)
這裏是我下載的txt文件 《三國演義》是ASCII,怎麽辦呢!搜索過後得知,要正常運行就得把TXT的編碼改為UTF-8的形式才能運行成功,怎麽做呢!
首先:打開TXT文本→文件→另存為→編碼→UTF-8 →確定 完成第一個坑。 到這裏呢!配合以上代碼你成功了,但是我遇到的遠遠要多2個的所以我準備一並寫出來。
② 坑②,這裏呢!就是他在在線講課啊 ,沒有TXT三國演義文件怎辦呢!沒辦法 自己找個三國演義文本 附上下載地址: http://vdisk.weibo.com/s/AfY-rVkr38Gg
③ 下載好以後就可以就可以愉快的玩耍了,但是我要說但是了,要問我為什麽?容我一一道來! 15個字組太多會出現什麽呢!我截圖
運行後會出現很多不相幹的詞匯,行,沒辦法只能清理 ,但是我清理大多數還是有 ,實在沒辦法了,本為了練手所用所以我降到10個詞組,不錯,那麽想要完整的名字詞組呢?就需要排除的詞匯增多,所以這個玩法就到此結束。
0x04 謝幕
完
python實例:三國演義TXT文本詞頻分析