Python文本挖掘: 词频统计,词云图

作者: 拾荒巴菲特 | 来源:发表于2016-11-29 14:57 被阅读8501次

在中文的文本挖掘中,对海量文本进行准确分词是其中至关重要一步。当前的Python语言下存在多种开源文本分析包,其中jieba这个包能够提供相对高效的分词方案。

结合jieba代码和一些相关资料,基本得知jieba是基于Trie树结构实现的高效词图扫描,生成句子中汉字所有可能成词情况的有向无环图(DAG)。 结巴分词中自带了一个叫做dict.txt的词典,里面包含词,词条出现次数(基于人民日报等语料库),词性。结巴会根据词典对分词句子切分,生成DAG,与此同时将每个词的出现次数转换成频率。 该频率会根据动态规划查找最大路径,找出基于词频的切分组合。

对于不存在与词典中的词,结巴则采用了基于汉字成词能力的HMM模型,使用Viterbi算法进行分词。也就是说如果dict.txt词典中没有任何词,结巴也能够根据HMM模型分词。下面写一个demo测试下结巴的分词能力。

测试文本数据采用了一篇翻译过来的医学论文《Importance of Being Adaptable Developing Guidelines for Lung Nodule Evaluation》.

结巴的提取关键词API非常易用, 这里我们提取测试文本中出现频率前100的高频词汇。 并将中文编码转为unicode.

    content = open("testing.txt","rb").read()
    # tags extraction based on TF-IDF algorithm
    tags = jieba.analyse.extract_tags(content, topK=100, withWeight=False)
    text =" ".join(tags)
    text = unicode(text)

在变量text中存储了我们需要的关键词结果。

接下来我们使用python中wordcloud这个库来快速生成一个词云图。由于wordcloud并不包含中文字体。对于显示中文分词,一定要对word cloud指定中文字体位置,否则最后词云图的中文都是方框乱码。

    wc = WordCloud(font_path='simsun.ttc',
            background_color="white", max_words=300, mask=trump_coloring,
            max_font_size=40, random_state=42)

    # generate word cloud 
    wc.generate(text)

词云图结果

wordcloud2.png

从词云图结果上大概可以看出,关键性高频名词基本被容纳进去,但是有一些无意义的高频介词也被包括进去。后期在提高模型正确率时,一方面需要扩充语义库,另一方面要对词性进行定义,将某些高频但无意义的词进行过滤。

全文代码:

# -*- encoding:utf-8 -*-
import jieba.analyse
from os import path
from scipy.misc import imread
import matplotlib as mpl 
import matplotlib.pyplot as plt 
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

if __name__ == "__main__":

    mpl.rcParams['font.sans-serif'] = ['FangSong']
    #mpl.rcParams['axes.unicode_minus'] = False

    content = open("testing.txt","rb").read()

    # tags extraction based on TF-IDF algorithm
    tags = jieba.analyse.extract_tags(content, topK=100, withWeight=False)
    text =" ".join(tags)
    text = unicode(text)
    # read the mask
    d = path.dirname(__file__)
    trump_coloring = imread(path.join(d, "Trump.jpg"))

    wc = WordCloud(font_path='simsun.ttc',
            background_color="white", max_words=300, mask=trump_coloring,
            max_font_size=40, random_state=42)

    # generate word cloud 
    wc.generate(text)

    # generate color from image
    image_colors = ImageColorGenerator(trump_coloring)

    plt.imshow(wc)
    plt.axis("off")
    plt.show()

参考资料:

  1. 对Python中文分词模块结巴分词算法过程的理解和分析
    Django梦之队, http://ddtcms.com/blog/archive/2013/2/4/69/jieba-fenci-suanfa-lijie/
  2. github结巴文档 https://github.com/fxsjy/jieba

相关文章

  • Python文本挖掘: 词频统计,词云图

    在中文的文本挖掘中,对海量文本进行准确分词是其中至关重要一步。当前的Python语言下存在多种开源文本分析包,其中...

  • 如何使用python实现词云

    如果想要生成词云图,首先我们需要对输入的文本进行词频统计。这里我们使用的是《小王子》中的一段文本进行统计: 词频统...

  • 用Python制作酷炫词云图,原来这么简单!

    一、简介 词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词:! 图1 词云...

  • 词频词性统计工具

    对于文字工作者,和内容运营的朋友,经常需要统计词频词性,然后画出词云图这样的需求。本文推荐一种词频词性统计工具,并...

  • 教你用Python进行中文词频统计

    Python是用于数据挖掘的利器 用Python可以用来做很多很好玩的东西,下面就来用Python来进行词频统计 ...

  • 词向量

    词向量大法 从文本语料得到词向量的话,大概来讲有如下几个步骤:分词,统计词频,构建huffman树,输入文本训练词...

  • 专业好用的词频分析工具

    导语 词频统计分析:是文本挖掘的重要方法,通过关键词出现频次多少的变化,来确定热点及其变化趋势。 不管你是在工作还...

  • Python——对淘宝评论词频统计并生成词云图

    可以检查下分词有没有问题,我在结巴分词中增加了2个花卉的名称和“花加”这品牌名,如果要求严格的话最好把单个的词都检...

  • 【数据可视化】使用Python进行词云绘制

    使用Python绘制词云 1、制作效果: 绘制词云效果图: 词云图中文本原文,复制文本保存到txt中: https...

  • 你真的会用wordcloud制作词云图吗?

    前言 对于文本分析而言,大家都绕不开词云图,而python中制作词云图,又绕不开wordcloud,但我想说的是,...

网友评论

本文标题:Python文本挖掘: 词频统计,词云图

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