京东商品评论爬虫(二)情感分析与词云图的制作

之前我们已经通过爬虫将京东的商品评论抓取下来,本文进行后续的操作
原文章的地址:
https://blog.csdn.net/qq_42692386/article/details/105120598

首先我们将数据从之前存入的数据库中取出来

#从数据库中取出评论 数据
def gettxt():
    conn= sqlite3.connect("comments.db")
    sql='select comment from Comments_jd'
    cursor=conn.execute(sql)#执行查询语句,返回sqlite3.Cursor object
    text=cursor.fetchall()# 获得查询结果集
    commentstr=''
    for txt in text:
        commentstr=commentstr+txt[0]
    return  commentstr,text

    conn.close()

我们可以看到取出来的数据为一个list,同时list里的每个元素为一个元组。所以思路上我们一个返回原始数据供情感分析每个评论使用,另外将所有评论拼接供分词使用

之后是分词和词云部分:

#分词与词云处理
def  get_wordcloud(commentstr):

    # 文本预处理
    pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式,u后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码
    string_data = re.sub(pattern, '', commentstr) # 将符合模式的字符去除

    # 文本分词
    '''
    结巴分词模式
    # jieba.lcut(s)        精确模式,返回一个列表,不存在冗余单词
    
    # jieba.lcut(s,cut_all=True)    全模式,返回一个列表,存在冗余单词
    # jieba.lcut_for_search(s)   搜索引擎模式,将精确模式下返回的长字符再次进行分词
    # jieba.add_word(w)  向分词的词典中加入新的词汇
    '''
    jieba.load_userdict("dict.txt")  # 添加用户自定义字典,防止一些词汇的拆分
    seg_list_exact = jieba.cut(string_data, cut_all = False) # 精确模式分词
    object_list = []
    # 自定义停用词,排除没有意义的高频词
    remove_words = [u'的', u'和', u'是', u'尺码大小',u'尺码大小',u'舒适度',u'做工细节',u'透气性',u'抓地效果',u',',u'。',u'了',u'也',u'尺码',u':',u'!','42','425',u'穿',u"很"]

    for word in seg_list_exact: # 循环读出每个分词
        if word not in remove_words: # 如果不在去除词库中
            object_list.append(word) # 分词追加到列表
    # 词频统计
    word_counts = collections.Counter(object_list) # 对分词做词频统计
    word_counts_top10 = word_counts.most_common(20) # 获取前20最高频的词
    print (word_counts_top10) # 输出检查

    # 词频展示
    mask = np.array(Image.open('adidas.jpg')) # 选择图片作为词频背景
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
        mask=mask, # 设置背景图
        max_words=50, # 最多显示词数
        max_font_size=100 # 字体最大值
    )

    wc.generate_from_frequencies(word_counts) # 从字典生成词云
    image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    plt.imshow(wc) # 显示词云
    plt.axis('off') # 关闭坐标轴
    plt.show() # 显示图deeeeee

在生成词云的时候有些我们需要删除以及错误分词的词汇,因此我们通过输出生成的词云以及词频的统计,并根据结果加入自定义的词典和去除停用词

最终的到的结果图:
京东商品评论爬虫(二)情感分析与词云图的制作_第1张图片
之后我们在使用snowNLP包对评论做情感分析,得到每个评论的情感分数与总平均分

#情感分析
def  comment_Emotional_analysis(text):
    sum = 0
    count = 0
    for txt in text:
        print(txt[0])
        s = SnowNLP(txt[0])
        #.sentiments用来计算positive的概率,越接近于1表示越正面
        print('{}'.format(s.sentiments))
        # print(s.sentiments,mylog)
        sum += s.sentiments
        count += 1

    score = sum / count
    print('finalscore={}'.format(score))

得到的部分结果:

.........
款式很好,穿起来很舒服,做工也不错,透气性不错,买给朋友的,朋友说很值得,活动期间买的,不贵,而且换货也快,包裹性不错,快递来是个大箱子,包装很好,下次还来买,颜色挺喜欢的,总之非常满意的购物,客服也回的很快
0.9999822132874397
外观颜值:ub4.0这个配色是经典啦。黑白永远都不会过时,平时穿运动穿都合适。
舒适度:boost中底很舒适,这是共识了吧。鞋面编制也很舒服
做工细节:阿迪现在做工比耐克好多了,耐克各种溢胶不对称
尺码大小:42的大小合适
抓地效果:马牌橡胶大底值得信赖
透气性:鞋面透气,想要更透气的可以是cool版的
0.9999999993863875


finalscore=0.9837236562199404

相关源码获取通过公众号Romi杂货铺后台回复京东评论爬虫分析获取

你可能感兴趣的:(python爬虫,Python数据分析)