美文网首页Python
词频统计 - 词云绘制

词频统计 - 词云绘制

作者: _hahaha | 来源:发表于2017-07-04 23:20 被阅读1335次

    需求分析:

    搜狗实验室 下载一份迷你版的样例数据,解压后文件名为 ‘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()
    

    运行结果如下:

    *

    相关文章

      网友评论

        本文标题:词频统计 - 词云绘制

        本文链接:https://www.haomeiwen.com/subject/jrpxhxtx.html