地名,机构名词云制作

  大家好,之前有篇文章是介绍词云制作的,今天主要是来详细介绍一下基于TF-IDF关键词提取及词云的制作过程,有关软件的安装见我之前的博客。点击 我的博客

实现过程
1、提取关键词
2、生成词云

遇到的问题
1、由于中文语言的复杂性,很难识别出机构名,地名等;
2、文本中会出现语气词以及难以判断的词,如我们,觉得,这样等会导致文本中的关键词无法识别出来;
3、jieba分词的不准确性;
解决问题
1、自定义词典,提高jieba分词的正确率和效率;比如本次在地名提取的过程中使用定义词典named.txt(编码格式为utf-8),如下图所示:

2、停顿词的去除
中文文本中存在“我们”,“觉得”,“那样”,“这样”等停顿词,需要先处理一下;代码如下:

def clean_using_stopword(text):
    """
    去除停顿词,利用常见停顿词表+自建词库
    :param text:
    :return:
    """
    mywordlist = []
    # 用精确模式来分词
    seg_list = jieba.cut(text, cut_all=False)
    liststr = "/ ".join(seg_list)
    with open(stopwords_path) as f_stop:
        f_stop_text = f_stop.read()
        f_stop_text = unicode(f_stop_text, 'utf-8')
    f_stop_seg_list = f_stop_text.split('\n')
    for myword in liststr.split('/'):  # 去除停顿词,生成新文档
        if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:
            mywordlist.append(myword)
    return ''.join(mywordlist)

jieba提取关键词

  jieba.analyse.extract_tags采用TF-IDF算法进行关键词的提取,如果需要了解TF-IDF算法,可参考这篇文章,我的博客
  jieba.analyse.extract_tags()方法就是用来提取关键词的,参数依次为(文本,抽取关键词的数量,返回结果是否带权重,提取关键词的词性)。由于词云是需要根据权重来生成的因此withWeight为true。得到结果如下,对TF-IDF算法有了解的,应该知道这里的权重就是tf-idf。
  比如我要实现地名(ns)和机构名(ni),我仅改变抽取识别出来的词性即可。抽取代码如下:

def extract_keywords():
    """
    利用jieba来进行中文分词。
    analyse.extract_tags采用TF-IDF算法进行关键词的提取。
    :return:
    """
    # 抽取1000个关键词,带权重,后面需要根据权重来生成词云
    allow_pos = ('nr',) # 词性
    tags = jieba.analyse.extract_tags(preprocessing(), 1000, withWeight=True)
    keywords = dict()
    for i in tags:
        print("%s---%f" % (i[0], i[1]))
        keywords[i[0]] = i[1]
    return keywords

生成词云
1、初始化Wordcloud
2、生成词云,其代码如下:

def draw_wordcloud():
    """
    生成词云。1.配置WordCloud。2.plt进行显示
    :return:
    """
    back_coloring = plt.imread(bg_image_path)  # 设置背景图片
    # 设置词云属性
    wc = WordCloud(font_path=font_path,  # 设置字体
                   background_color="white",  # 背景颜色
                   max_words=2000,  # 词云显示的最大词数
                   mask=back_coloring,  # 设置背景图片
                   )

    # 根据频率生成词云
    wc.generate_from_frequencies(extract_keywords())
    # 显示图片
    plt.figure()
    plt.imshow(wc)
    plt.axis("off")
    plt.show()
    # 保存到本地
    wc.to_file("wordcloud.jpg")

  初始化Wordcloud,WordCloud默认生成的词云为矩形的,如果需要自定义词云的形状,需要提供一张二值化的图片,生成的词会填充图的黑色部分。
wordcloud对中文的支持不太好,需要自己设置字体,自己文件在项目中。ttf的字体可以去系统中提取。可以参考此处代码,里面有初始化的照片和设置好的字体。参考代码
最终地名,机构名结果如下:
在这里插入图片描述
在这里插入图片描述
  从上图发现,其实也存在些许错误,但是这是由于分词的不精确性造成的,可以再去细分一些分词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值