python中的jieba库(分词)和wordcloud库(词云)
qingheluo2022-08-29清河洛851
jieba分词库
中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个词组,这种手段叫做分词,我们可以通过jieba库来完成这个过程
安装:pip install jieba
分词原理:利用自带的中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果
jieba分词函数有两个cut()和lcut(),两者的使用方式完全相同,cut()返回一个生成器对象,而lcut()返回生成器对象转换的list
jieba分词的三种模式
s = "中华人民共和国万岁"
精确模式:把一段文本精确地切分成若干个词组,这些词组...
jieba分词库
中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个词组,这种手段叫做分词,我们可以通过jieba库来完成这个过程
安装:pip install jieba
分词原理:利用自带的中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果
jieba分词函数有两个cut()和lcut(),两者的使用方式完全相同,cut()返回一个生成器对象,而lcut()返回生成器对象转换的list
jieba分词的三种模式
s = "中华人民共和国万岁" 精确模式:把一段文本精确地切分成若干个词组,这些词组经过组合就可以精确地还原为原始文本。其中不存在冗余单词 jieba.lcut(s) ['中华人民共和国', '万岁'] 全模式:把一段文本中所有可能的词组都扫描出来,分词后再组合起来会有冗余,不再是原来的文本 jieba.lcut(s,cut_all=True) ['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国', '万岁'] 搜索引擎模式:先用精准模式分词,然后再用全模式对比较长的词组再次进行分词,也有冗余 jieba.lcut_for_search(s) ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '万岁']
添加自定义分词
jieba.add_word("民共") jieba.lcut(s)返回不含"民共",说明jieba是先按照自带词库进行分词,由于不能冗余,所以没有出现 jieba.lcut(s,cut_all=True)返回含有"民共" jieba.lcut_for_search(s)返回含有"民共" jieba.add_word("国万") 仅仅jieba.lcut(s,cut_all=True)返回带有"国万" 因为lcut_for_search函数是先用精准模式分词,然后再用全模式对比较长的词组再次进行分词
添加自定义词典
jieba.load_userdict(dict_file)读取一个文件,将文件中的所有词作为自定义词组 每行只可写三项参数,分别为词语、词频(可省略)、词性(可省略)空格隔开,顺序不可颠倒
删除词组:jieba.del_word(cizu)
返回分词和分词权重
需要先引入import jieba.analyse jieba.analyse.extract_tags(txt, topK=20, withWeight=False,allowPOS=()) txt: 待分词的文本 topK: 返回前几个权重最大的关键词,默认为20 withWeight: 是否一并返回关键词权重值,默认为False allowPOS: 一个元组,表示仅包括指定词性的词,默认为空,即不筛选 该方法的分词模式为精确模式
wordcloud词云库
词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨
WordCloud 是一款python环境下的词云图工具包,同时支持python2和python3,能通过代码的形式把关键词数据转换成直观且有趣的图文模式
安装:pip install wordcloud
wordcloud库把词云作为一个WordCloud对象来操作,wordcloud.WordCloud()代表一个文本对应的词云对象
创建WordCloud对象:
w = wordcloud.WordCloud(font_path=None, margin=20, width=400, height=200, prefer_horizontal=0.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling='auto', regexp=None, collocations=True, colormap=None, normalize_plurals=True, repeat=False, include_numbers=False, min_word_length=0)
font_path:string,词云图中使用的字体文件,如果含有中文则必须指定,支持OTF或TTF两种格式 margin:词云图片中每个词组的之间的间隔距离 width,height:int,词云图的宽和高 prefer_horizontal:float,制作词云时文字水平放置的比例(最大为1),为0的话所有词都将垂直放置 mask:词云形状,默认使用矩形,指定的图片中白色部分将不会绘制,用于打开图片的模块有 imageio模块:imageio.v3.imread(img_file) numpy和PIL模块:numpy.array(PIL.Image.open(img_file)) scale:float,按照指定比例放大画布 color_func:func,生成新颜色的函数,如果为空则使用self.color_func 函数可用参数word, font_size, position, orientation,font_path, random_state 返回一个单词的 PIL 颜色 如果要为所有单次设置相同的颜色,可以使用color_func=lambda *args, **kwargs: "white" max_words:int,要显示的词的最大个数 min_font_size:int,显示的最小的字体大小,默认为4 stopwords:string,设置需要屏蔽的词,如果为None则使用内置的STOPWORDS random_state:int,为每个单词返回一个PIL颜色 background_color:string,背景颜色,使用英文单词字符串 max_font_size:int,显示的最大的字体大小,默认为None,根据画布高度自动调节 font_step:int,字体步长,大于1会加快运算,但是可能导致结果出现较大的误差 mode:string,当参数为"RGBA"并且background_color为None时,背景为透明 relative_scaling:float,词频和字体大小的关联性 为0时,只考虑排名,排名高的比低的大一定比例 为1时,出现频率两倍的词大小会提高两倍 regexp:string,使用正则表达式分隔输入的文本,默认使用r"w[w']+" collocations:bool,是否包括两个词的搭配 colormap:string,给每个单词随机分配颜色,若指定color_func,则忽略该方法 normalize_plurals:bool,是否将末尾是"s"的单词去掉末尾的"s"然后进行统计 repeat:bool,bool,是否重复单词和短语直到达到 max_words 或 min_font_size include_numbers:bool,是否将数字也作为词组计算 min_word_length:int,一个单次包含的最小字母数量
WordCloud对象的常用方法
generate(text):根据文本生成词云,该函数有个别名generate_from_text(text) fit_words(frequencies):根据词频生成词云,传入一个dict,key为词语,val为该词的float格式权重 generate_from_frequencies(frequencies,max_font_size=None):同fit_words(),多了一个形参 recolor():对现有输出重新着色(重新上色会比重新生成整个词云快很多) to_file(filename):输出到文件 to_array():返回转化后的numpy array to_image():返回转化后的PIL图片对象 to_svg():返回转化后的svg格式文本内容