本次作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2822

中文词频统计

1. 下载一长篇中文小说。

2. 从文件读取待分析文本。

3. 安装并使用jieba进行中文分词。

pip install jieba

import jieba

jieba.lcut(text)

4. 更新词库,加入所分析对象的专业词汇。

jieba.add_word('天罡北斗阵')  #逐个添加

jieba.load_userdict(word_dict)  #词库文本文件

参考词库下载地址:https://pinyin.sogou.com/dict/

转换代码:scel_to_text

5. 生成词频统计

6. 排序

7. 排除语法型词汇,代词、冠词、连词等停用词。

stops

tokens=[token for token in wordsls if token not in stops]

8. 输出词频最大TOP20,把结果存放到文件里

9. 生成词云。


一、核心代码:

import jieba
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt

f = open('novel.txt', 'r', encoding='utf-8') #读取小说内容
nov = f.read()
f.close()

f1 =  open('stops_chinese.txt', 'r', encoding='utf-8')  #读取无用中文关键词
waste = f1.read()
f1.close()

for i in [' ','\n']:
    nov = nov.replace(i, '')
#jieba添加词典与关键词
jieba.add_word("赵璇")
jieba.load_userdict('紫薇学园字典.txt')
novel=jieba.lcut(nov)  #用jieba切割nov


#token过滤无用关键词
waste=waste.split('\n')
tokens = [token for token in novel if token not in waste]

Set = set(tokens)#把tokens转换为集合方便字典统计
Dict = {}  # 创建一个字典统计词频
for i in Set:
    Dict[i] = tokens.count(i)
TopList = list(Dict.items())  # 转换成列表进行排序
TopList.sort(key = lambda x: x[1], reverse=True)  # 按照词频降序排列

for i in range(20): #输出前20
   print(TopList[i])

pd.DataFrame(data=TopList[0:20]).to_csv('top20.csv', encoding='utf-8')

#生成词云图,进行字体变量配置后用空格分割内容
wl_split=' '.join(tokens)
mywc=WordCloud().generate(wl_split)
plt.imshow(mywc)
plt.axis("off")
plt.show()

 

二、生成的TOP20.CSV:

 

三、运行截图+词云图