当前位置:   article > 正文

cedit多行文本设置透明背景会重叠_python:电商用户评价文本分析(wordcloud+jieba)...

cedit 多行

v2-9ae1930e3c510caaf1cd862e878f20bf_1440w.jpg?source=172ae18b

v2-a5b5a3103db1b021b4bc365bdb5abc35_b.jpg

一、wordcloud:文本分析

1、导入wordcloud和数据可视化包matplotlib:

  1. from wordcloud import WordCloud
  2. import matplotlib.pyplot as plt
  3. import warnings
  4. warnings.filterwarnings("ignore")
  5. %matplotlib inline
  6. %config InlineBackend.figure_format="svg"

2、导入文本:这里以三国演义小说为例

  1. #读取文本
  2. text = open(r"C:UsersAdministratorDesktopsg.txt",encoding="UTF-8").read()

3、使用WordCloud绘图,WordCloud参数如下:

  • font_path : string //字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = r"C:WindowsFontssimfang.ttf"
  • width : int (default=400) //输出的画布宽度,默认为400像素
  • height : int (default=200) //输出的画布高度,默认为200像素
  • prefer_horizontal : float (default=0.90) //词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
  • mask : nd-array or None (default=None) //如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。
  • 除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),
  • 背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。
  • scale : float (default=1) //按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。
  • min_font_size : int (default=4) //显示的最小的字体大小
  • font_step : int (default=1) //字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。
  • max_words : number (default=200) //要显示的词的最大个数
  • stopwords : set of strings or None //设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
  • background_color : color value (default=”black”) //背景颜色,如background_color='white',背景颜色为白色。
  • max_font_size : int or None (default=None) //显示的最大的字体大小
  • mode : string (default=”RGB”) //当参数为“RGBA”并且background_color不为空时,背景为透明。
  • relative_scaling : float (default=.5) //词频和字体大小的关联性
  • color_func : callable, default=None //生成新颜色的函数,如果为空,则使用 self.color_func
  • regexp : string or None (optional) //使用正则表达式分隔输入的文本
  • collocations : bool, default=True //是否包括两个词的搭配
  • colormap : string or matplotlib colormap, default=”viridis” //给每个单词随机分配颜色,若指定color_func,则忽略该方法。
  • fit_words(frequencies) //根据词频生成词云【frequencies,为字典类型】
  • generate(text) //根据文本生成词云
  • generate_from_frequencies(frequencies[, ...]) //根据词频生成词云
  • generate_from_text(text) //根据文本生成词云
  • process_text(text) //将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
  • recolor([random_state, color_func, colormap]) //对现有输出重新着色。重新上色会比重新生成整个词云快很多。
  • to_array() //转化为 numpy array
  • to_file(filename) //输出到文件
  1. #绘图
  2. #创建画板
  3. plt.figure(figsize=(10,8),dpi=80)
  4. #字体路径
  5. font = r"C:WindowsFontssimfang.ttf"
  6. #绘制词云图
  7. wc=WordCloud(font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)
  8. #显示词云
  9. plt.imshow(wc,interpolation="bilinear")
  10. plt.axis("off")
  11. plt.savefig(r"C:UsersAdministratorDesktopsg1.png")

v2-b9fc1619f5d0bcf6049615fc3a17bc11_b.jpg

二、添加jieba包进行分词

1、根据文本生成词云图

jieba分词模块有三种分词模式:

  • 1.全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
  • 2.精确模式:试图将句子最精确地切开,适合文本分析(类似LTP分词方式),较为贴合实际工作需求。
  • 3.搜索引擎模式:在精确模式的基础上对长词再次切分,提高召回率,适合用于搜索引擎分词,更加细化了。

jieba分词方法如下:

  • jieba.cut 接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式或精准模式;HMM 参数用来控制是否使用 HMM 模型。
  • jieba.cut_for_search 接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8。

注意点:

  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用jieba.lcut 以及jieba.lcut_for_search 直接返回 list。
  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

1.1、导入包

  1. #导入jieba包
  2. import jieba

1.2、jieba全模式、精准模式以及搜索引擎模式案例示范。

  1. #案例
  2. seg_list = jieba.cut("小明来到杭州阿里巴巴" , cut_all=True)
  3. print("全模式:"+"/".join(seg_list)) #全模式
  4. seg_2 = jieba.cut("小明来到杭州阿里巴巴",cut_all=False)
  5. print("精准模式:"+"/".join(seg_2)) #精准模式
  6. seg_3 = jieba.cut("小明来到杭州阿里巴巴")
  7. print("默认模式:"+",".join(seg_3)) #默认模式
  8. seg_4 = jieba.cut_for_search("李华来自杭州,毕业于浙江大学,现在在日本早稻田大学深造")
  9. print("搜索引擎模式:"+",".join(seg_4)) #搜索引擎模式

v2-fbfe21ab3dedf451e3673485122541e2_b.jpg

jieba.cut()默认模式是精准模式。

1.3、读入文本

  1. #打开文本
  2. text=open(r"C:UsersAdministratorDesktopsg.txt",encoding="UTF-8").read()

jieba默认模式对文本进行分词

  1. #中文分词
  2. text = " ".join(jieba.cut(text))
  3. print(text[:50])

v2-0fd38c8542bac15c604429252c7d037a_b.png

1.4、绘图

  1. #绘图
  2. #创建画板
  3. plt.figure(figsize=(10,8),dpi=80)
  4. #创建词云图
  5. wc=WordCloud(font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)
  6. #生成图像
  7. plt.imshow(wc,interpolation="bilinear")
  8. plt.axis("off")
  9. plt.savefig(r"C:UsersAdministratorDesktopsg2.png")

v2-d842233d63578730d802c428faa31b1d_b.jpg

对比先前看出,经过jieba.cut()分词之后,显示的词更加符合中文的词语划分习惯。

  • 自定义背景图片显示词云图:
  1. #增加词云图形象
  2. #创建画板
  3. plt.figure(figsize=(10,8),dpi=80)
  4. #自定义背景图片
  5. mask = plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
  6. #生成词云图
  7. wc=WordCloud(mask=mask,font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)#font_path=font缺少会乱码
  8. plt.imshow(wc,interpolation="bilinear")
  9. plt.axis("off")
  10. plt.savefig(r"C:UsersAdministratorDesktopsg3.png")

v2-48627a589bdd6285822484d867cf1598_b.jpg
自定义背景原图

v2-cba006606133831837c429499747ddde_b.jpg
显现结果

注意点:与分析英文文本不同,中文文本如果不加font_path参数,中文无法显示。

  1. #增加词云图形象
  2. #创建画板
  3. plt.figure(figsize=(10,8),dpi=80)
  4. #自定义背景图片
  5. mask = plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
  6. #生成词云图
  7. wc=WordCloud(mask=mask,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)#font_path=font缺少会乱码
  8. plt.imshow(wc,interpolation="bilinear")
  9. plt.axis("off")
  10. plt.savefig(r"C:UsersAdministratorDesktopsg3.png")

v2-d741abc47eab38e2f77427c75ea2dc87_b.jpg

对于中文路径,在”C:WindowsFonts“路径下选择字体,但是直接复制字体名称过来,发现还是读入错误,这是因为字体显示的名称不一定是字体的引用名称。

v2-41525383d0ecdb80802dd8dc3b679022_b.jpg

解决方法:选择目标字体,右击选择属性,显示的名称才是我们目标的字体。

v2-be1fa4586dc128728e145014a38043ed_b.jpg

1.5 从自定背景图片中获取颜色

  1. #从图片中获取颜色
  2. #导入包
  3. from wordcloud import ImageColorGenerator
  4. plt.figure(figsize=(10,8),dpi=80)
  5. #绘图
  6. mask=plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
  7. wc=WordCloud(mask=mask,font_path=font,width=800,height=500,scale=2,mode="RGBA",background_color=None).generate(text)
  8. #从背景图片获取颜色
  9. image_color = ImageColorGenerator(mask)
  10. wc.recolor(color_func=image_color)
  11. #显示
  12. plt.imshow(wc,interpolation="nearest")
  13. plt.axis("off")
  14. plt.savefig(r"C:UsersAdministratorDesktopsg4.png")

v2-e5013809a1b60b2474d693c7eebb65e5_b.jpg

2、提取关键词权重,根据词的频率生成词云图

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False,allowPOS=())

参数说明:

  • 1.sentence 为待提取的文本。
  • 2.topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20。
  • 3.withWeight 为是否一并返回关键词权重值,默认值为 False。
  • 4.allowPOS 仅包括指定词性的词,默认值为空,即不筛选,若提供则仅返回符合词性要求的关键词。

jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件。

2.1 导入分析包

  1. #导入分析包
  2. import jieba.analyse

2.2 读取文本

  1. #读取文本
  2. text = open(r"C:UsersAdministratorDesktopsg.txt",encoding="UTF-8").read()

2.3 生成词频

  1. #生成词频
  2. freq = jieba.analyse.extract_tags(text,topK=200,withWeight=True)
  3. print(freq[:5])
  4. #转换成字典
  5. freq = {i[0]:i[1] for i in freq}
  6. for i,(k,v) in enumerate(freq.items()) :
  7. print({k:v},end="")
  8. if i ==10:
  9. break

v2-3f38575e0234d3239cc5a53af3f15f51_b.jpg

2.4 绘制词云图

  1. #绘图
  2. plt.figure(figsize=(10,8),dpi=80)
  3. mask=plt.imread(r"C:UsersAdministratorDesktoptimg.jpg")
  4. font = r"C:WindowsFontssimhei.ttf"
  5. #绘图
  6. wc=WordCloud(mask=mask,font_path=font,width=800,height=500,mode="RGBA",background_color=None).generate_from_frequencies(freq)
  7. plt.imshow(wc,interpolation="bilinear")
  8. plt.axis("off")
  9. plt.savefig(r"C:UsersAdministratorDesktopsg5.png")

v2-12dfb7b14b27cce641296a624bc4df1b_b.jpg

注意点:从文本中提取词频后,直接导入生成词云图,但是报错:list object has no attribute items。需要对结果进行再次转化,改成字典类型。

v2-7ba6cd263b4271a461e7af123e3b238b_b.jpg

转换字典类型后,生成词云图正常。转化代码:freq = {i[0]:i[1] for i in freq}。

v2-064f827f0a552b112c734ed55ed97143_b.jpg

3、实战案例:电商女士服装评论

1、导入包

  1. #导入数据分析包
  2. import pandas as pd

2、读取数据

  1. #读取数据
  2. data = pd.read_csv(r"E:dataWomens-Clothing-E-Commerce-ReviewsWomens Clothing E-Commerce Reviews.csv",dtype="object",encoding="UTF-8")
  3. data.head()

v2-b5bafeec3d4c7c63ec876a5102261b8f_b.jpg

3、数据清洗

3.1 选取子集

  1. #选取子集
  2. reviewData=data["Review Text"]
  3. reviewData.head()

v2-b9bba552d2a94e7441fbb60bba6f844a_b.jpg

3.2 去重

  1. #去重
  2. reviewData=reviewData.dropna()
  3. reviewData.shape

v2-34bdf19704e9d63caa95452c094e0f15_b.png

4、获取文本

  1. #获取文本数据
  2. #遍历文本
  3. text=""
  4. for i in reviewData.values:
  5. i=i.lower().replace(".","").replace("!","").replace(",","")#去除符号
  6. text = text+" ".join(jieba.cut(i))

5、根据文本生成词云图

  1. #根据文本生成词云图
  2. #创建画板
  3. plt.figure(figsize=(10,8),dpi=80)
  4. #生成词云图
  5. wc = WordCloud(width=800,height=500,scale=2,background_color=None,mode="RGBA").generate(text)
  6. #显示视图
  7. plt.imshow(wc,interpolation="bilinear")
  8. plt.axis("off")
  9. plt.savefig(r"C:UsersAdministratorDesktopsg6.png")

v2-cd14f9697686aa83c1345ad3a672e444_b.jpg

正则表达式获取文本:

  • 导入包
  1. #导入re包
  2. import re
  • 正则表达式去除标点符号,获取文本
  1. #获取文本
  2. text=""
  3. for i in reviewData.values:
  4. #正则表达式去除符号
  5. temp = re.compile(r",.!")
  6. i=temp.sub("",i)
  7. text = text+" ".join(jieba.cut(i))
  • 绘制词云图
  1. #绘图
  2. plt.figure(figsize=(10,8),dpi=80)
  3. mask=plt.imread(r"C:UsersAdministratorDesktoptimg1.jpg")
  4. wc = WordCloud(mask=mask,width=800,height=500,scale=2,background_color=None,mode="RGBA").generate(text)
  5. #从图片获取颜色
  6. image_color = ImageColorGenerator(mask)
  7. wc.recolor(color_func=image_color)
  8. #显示视图
  9. plt.imshow(wc,interpolation="bilinear")
  10. plt.axis("off")
  11. plt.savefig(r"C:UsersAdministratorDesktopsg7.png")

v2-e098f1287c39f7352cba98a208632430_b.jpg
dress自定义背景图

v2-9ddacfb78f3a35de85aa1efa4809c80b_b.jpg

6、根据词频生成词云图

  • 获取文本
  1. #获取文本
  2. text=""
  3. for i in reviewData.values:
  4. temp = re.compile(r",.!")
  5. i = temp.sub("",i.lower())
  6. text=text+"".join(jieba.cut(i))
  • 获取词频
  1. #获取词频
  2. freq=jieba.analyse.extract_tags(text,topK=100,withWeight=True)
  3. print(freq[:5])

v2-c025e58629a4d4ad2a2504d1c5f0fb62_b.jpg
  • 转换为字典dict
  1. #转换为字典
  2. freq = {i[0]:i[1] for i in freq}
  3. for i,(k,v) in enumerate(freq.items()):
  4. print({k:v},end="")
  5. if i ==10:
  6. break

v2-bfe3b45a3a19eb7099260eb2152684b1_b.jpg
  • 绘制词云图
  1. #绘图
  2. #创建画板
  3. plt.figure(figsize=(10,8),dpi=80)
  4. #自定义背景图片
  5. mask=plt.imread(r"C:UsersAdministratorDesktoptimg1.jpg")
  6. #绘制词云图
  7. wc=WordCloud(mask=mask,width=800,height=500,mode="RGBA",background_color=None,stopwords=("was","my","so","but")).generate_from_frequencies(freq)
  8. #获取照片颜色
  9. image_color=ImageColorGenerator(mask)
  10. wc.recolor(color_func=image_color)
  11. #显示图片
  12. plt.imshow(wc,interpolation="nearest")
  13. plt.axis("off")
  14. plt.savefig(r"C:UsersAdministratorDesktopsg8.png")

v2-ca452082f159a45880c5385f9d662f82_b.jpg

对比文本生成的词云图和词频生成的词云图,所获得的词还是有差别的,根据文本获得词云图更符合我们的需求。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/806434
推荐阅读
相关标签
  

闽ICP备14008679号