本文主要是介绍地名,机构名词云制作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
大家好,之前有篇文章是介绍词云制作的,今天主要是来详细介绍一下基于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的字体可以去系统中提取。可以参考此处代码,里面有初始化的照片和设置好的字体。参考代码
最终地名,机构名结果如下:
从上图发现,其实也存在些许错误,但是这是由于分词的不精确性造成的,可以再去细分一些分词。
这篇关于地名,机构名词云制作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!