Python

词频统计 - 词云绘制

2017-07-04  本文已影响1335人  _hahaha

需求分析:

搜狗实验室 下载一份迷你版的样例数据,解压后文件名为 ‘SogouC.mini’。作为练习数据对其进行以下几个实验:词频统计-词云绘制-关键词提取-相似文章推荐-自动摘要等实验。本篇为词频统计和词云绘制篇,后面几个实验我会慢慢补上。‘SogouC.mini’的文件目录结构如下:

*

开发环境:

系统: macOS Sierra; 开发软件: PyChram CE; 运行环境: Python3.6


import jieba
import pandas
from wordcloud import WordCloud
import matplotlib.pyplot as plt
filePaths = []
fileContents = []

for root, dirs, files in os.walk(  # 遍历文件目录,包括目录下的子文件
    'data/SogouC.mini/Sample'
):
    for name in files:
        filePath = os.path.join(root, name)  # 组成每个子文件的全路径
        filePaths.append(filePath)
        f = codecs.open(filePath, 'r', 'utf-8')  #open只能写入str类型的数据,某些情况可能会出现编码错误,而codecs.open能避免这个问题
        fileContent = f.read()
        f.close()
        fileContents.append(fileContent)

corpus = pandas.DataFrame({
    'filePath': filePaths,
    'fileContent': fileContents
})
corpus.to_csv('data/corpus.csv', index=False) #将语料库corpus保存为csv文件

运行结果如下:(用head()函数显示前面5行)


*
# 读取停用词文件(StopwordsCN.txt)
stopWords = pandas.read_csv(
    'data/StopwordsCN.txt',
    encoding='utf-8',
    index_col=False
)
# 分词处理 & 过滤停用词
for index, row in corpus.iterrows():  # 迭代(iterate)覆盖整个DataFrame的行中,返回(index, Series)对
    filePath = row['filePath']。# row为字典类型,所以可以用row[key]的形式取到value值
    fileContent = row['fileContent']
    seg_list = jieba.cut(fileContent)
    for seg in seg_list:
        # 去除停用词及空字符(>0的时候为去处空字符),并且只保留字数大于1的词(>1的时候为去处空字符以及计数小于1的词)
        if seg not in stopWords['stopword'].values and len(seg.strip())>1:
            segments.append(seg)
            filePaths.append(filePath)
segmentDF = pandas.DataFrame({
    'filePath': filePaths,
    'segment': segments
})

运行结果如下:(只显示部分结果)


*
# 词频统计
segStat = segmentDF.groupby(
    by='segment'
)['segment'].agg({
    '计数':len
}).reset_index().sort_values(
    '计数',
    ascending=False  # 降序排列
)

运行结果如下:(只显示部分结果)


*
# 绘制词云
wordCloud = WordCloud(
    font_path='data/simhei.ttf',  # 设置字体为中文字体
    background_color='black'  # 设置词云背景颜色
)
words = segStat.set_index('segment').to_dict()  # 设置segment列为索引,并将DataFrame转化为字典形式
wordCloud.fit_words(words['计数'])  # 配置词云
plt.imshow(wordCloud)
plt.show()
plt.close()

运行结果如下:

*
上一篇下一篇

猜你喜欢

热点阅读