IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 基于用户评论情感分析详细设计与技术实现 -> 正文阅读

[Python知识库]基于用户评论情感分析详细设计与技术实现

基于用户评论情感分析详细设计与技术实现



前言

随着平台用户的不断扩大,平台的用户生态环境,或多或少是一个平台长期发展的重要因数,如果一个平台中的负面情绪较大,那么该平台就应该注意用户发展动态和思考平台本身的运营是否存在问题。
那么如何去分析用户的情感,通过下面的思路或许可以找到突破口。


提示:以下是本篇文章正文内容,下面案例可供参考

一、技术架构

在这里插入图片描述
架构介绍:

  • 数据库提供分析器目标分析数据;
  • 其他数据源可通过爬虫,数据收集等获取数据
  • 分析服务器使用python微型web开发框架Flask,flask框架需要pycharm专业版或破解版
  • 对外接口服务,可以查看情感分析数据

二、分析服务器构建

在这里插入图片描述
上图为我的flask项目文件目录展示,下面将重点讲解怎么去构建这样一个项目;

1.1 创建flask项目

  • 使用pycharm创建一个新项目,项目选择flask
    在这里插入图片描述
  • 选择你想要创建到什么文件夹,然后点击右下角的create,即可创建;

1.2 编写数据库连接脚本,获取用户评论数据;

  • 案例如下:
    我们想要获取评论数据,就需要负责存储平台上所有的评论数据;我的评论数据时保存在mysql中的comment表中,表结构如下:
    在这里插入图片描述
    我们需要获取console字段的所有评论数据
  • 创建getdatafromdb.py文件编写脚本,并且将获得的数据存放到csv文件中;

1.2.1 引入库

import pymysql
import pandas

1.2.2 连接数据库获取数据

class Test_myqsl(object):
    # 运行数据库和建立游标对象
    def __init__(self):
        self.connect = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="318422", database="forum",
                                       charset="utf8")
        # 返回一个cursor对象,也就是游标对象
        self.cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)

    # 关闭数据库和游标对象
    def __del__(self):
        self.connect.close()
        self.cursor.close()

    def write(self):
        # 将数据转化成DataFrame数据格式
        data = pandas.DataFrame(self.read())
        # 把id设置成行索引
        data_1 = data.set_index("id", drop=True)
        # 写写入数据数据
        pandas.DataFrame.to_csv(data_1, "comment_db.csv", encoding="utf-8")
        print("写入成功")

    def read(self):
        # 读取数据库的所有数据
        data = self.cursor.execute("""select id,console  from comment""")
        field_2 = self.cursor.fetchall()
        print(field_2)
        return field_2


# 封装
def main():
    write = Test_myqsl()
    write.write()

1.2.3 测试

[{'id': 1, 'console': '我喜欢这个帖子'}, 
{'id': 2, 'console': '我想笑了'},
{'id': 3, 'console': '你好帅啊,我好喜欢'}, 
{'id': 4, 'console': '没有什么东西,毫无价值'},
{'id': 5, 'console': '大佬,yyds'}, 
{'id': 6, 'console': '兄弟们,真的感动哭了'}, 
{'id': 7, 'console': '不觉得很酷吗?'}, 
{'id': 8, 'console': '我好喜欢你'}, 
{'id': 9, 'console': '我会在这里等你!'}, 
{'id': 10, 'console': '好家伙,给我整破防了。'}, 
{'id': 11, 'console': '讨厌这次的疫情,改变了我的梦想'}, 
{'id': 12, 'console': '你们都是最棒的'}, 
{'id': 13, 'console': '没有什么不能完成的任务'}, 
{'id': 14, 'console': '我的梦想丢了'}, 
{'id': 15, 'console': '搞笑!你是不是傻。'}, 
{'id': 16, 'console': '哈哈哈'}, 
{'id': 17, 'console': '嘿嘿嘿'}, 
{'id': 18, 'console': '学代码好难啊!'}]
写入成功

当前数据已经写入到comment_db.csv文件中
在这里插入图片描述

1.3 编写情感分析脚本

1.3.1 引入库

import pandas as pd
from snownlp import SnowNLP
import matplotlib.pyplot as plt
import numpy as np
from wordcloud import WordCloud
import jieba
from jieba import analyse

import getdatafromdb

这里我们主要依赖的是snownlp库进行数据分析:
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。

snownlp库: https://github.com/isnowfy/snownlp
可参考学习技术资料:https://zhuanlan.zhihu.com/p/26331196

1.3.2 情感分直方图实现

getdatafromdb.main()
data = pd.read_csv('comment_db.csv')#读取csv文件数据

def read_file():
    data.head(2)
    data1 = data[['id', 'console']]
    data1.head(10)
    data1['emotion'] = data1['console'].apply(lambda x: SnowNLP(x).sentiments)
    data1.head(10)
    data1.describe()
    return data1


def getping_chart(data1):
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    bins = np.arange(0, 1.1, 0.1)
    plt.hist(data1['emotion'], bins, color='#4F94CD', alpha=0.9)
    plt.xlim(0, 1)
    plt.xlabel('情感分')
    plt.ylabel('数量')
    plt.title('情感分直方图')
    plt.savefig('F:\Github\onliveschool\onliveschool\sentiment\static\情感分直方图.png')
    picpath = 'F:\Github\online\onlineexam-main\onlineexam\onlinewx\miniprogram\images\情感分直方图.png'
    return picpath

打印的各个评论的情感分数如下:

    id          console   emotion
0    1          我喜欢这个帖子  0.418492
1    2             我想笑了  0.714930
2    3        你好帅啊,我好喜欢  0.980900
3    4      没有什么东西,毫无价值  0.332192
4    5          大佬,yyds  0.782665
5    6       兄弟们,真的感动哭了  0.890965
6    7          不觉得很酷吗?  0.732578
7    8            我好喜欢你  0.799730
8    9         我会在这里等你!  0.740741
9   10      好家伙,给我整破防了。  0.517992
10  11  讨厌这次的疫情,改变了我的梦想  0.970619
11  12          你们都是最棒的  0.961800
12  13      没有什么不能完成的任务  0.369391
13  14           我的梦想丢了  0.873836
14  15        搞笑!你是不是傻。  0.184189

在这里插入图片描述

我们可以看出大部分情感数值集中在0.4-0.8。

1.3.3 态度比例图;

我们将大于情感分数大于0.5的视为积极的

def getattion_chart(data1):
    # 计算积极评论与消极评论各自的数目
    pos = 0
    neg = 0
    for i in data1['emotion']:
        if i >= 0.5:
            pos += 1
        else:
            neg += 1
    # 积极评论占比
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    pie_labels = 'postive', 'negative'
    plt.pie([pos, neg], labels=pie_labels, autopct='%1.1f%%', shadow=True)
    path = 'F:\Github\onliveschool\onliveschool\sentiment\static\积极评论占比图.png'
    plt.savefig(path)
    picpath = 'F:\Github\onliveschool\onliveschool\sentiment\static\积极评论占比图.png'
    return picpath

在这里插入图片描述
这里就可以直观的看出该平台积极正向的评论和消极的比例

1.3.4 用户高频词云;

def getap10_chart():
    # 关键词top10
    text = ''
    for s in data['console']:
        text += s
    key_words = jieba.analyse.extract_tags(sentence=text, topK=10, withWeight=True, allowPOS=())
    print(key_words)
    # 参数说明 :
    # sentence
    # 需要提取的字符串,必须是str类型,不能是list
    # topK
    # 提取前多少个关键字
    # withWeight
    # 是否返回每个关键词的权重
    # allowPOS是允许的提取的词性,默认为allowPOS =‘ns’, ‘n’, ‘vn’, ‘v’,提取地名、名词、动名词、动词



def getcloud_chart():
    w = WordCloud(font_path="msyh.ttc")  # font_path="msyh.ttc",设置字体,否则显示不出来
    text = ''
    for s in data['console']:
        text += s
    data_cut = ' '.join(jieba.lcut(text))
    w.generate(data_cut)
    image = w.to_file('F:\Github\onliveschool\onliveschool\sentiment\static\词云图.png')
    picpath = 'F:\Github\onliveschool\onliveschool\sentiment\static\词云图.png'
    return picpath

首先分析前10条词条:

[('喜欢', 0.42769413022650005), 
('梦想', 0.3875037441765), 
('很酷', 0.330188261785), 
('好难', 0.330188261785), 
('yyds', 0.2988691875725), 
('我整', 0.2988691875725), 
('破防', 0.2988691875725), 
('嘿嘿嘿', 0.27390596682), 
('毫无价值', 0.26806559554), 
('搞笑', 0.26333454555)]
Loading model cost 1.393 seconds.

词云图片如下:
在这里插入图片描述

1.4 flask实现web接口服务

  • 在flask项目app.py编写接口方法
  • 运行app.py文件,调用web服务
  • 打开浏览器访问接口
  • 查看返回图片文件地址

相关代码:

from flask import Flask
import main


app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


# 获得用户态度比例表
@app.route('/api/py/acctionchart')
def getacction_chart():
    # 获取最新表
    path = main.getattion_chart(main.read_file())
    return path


# 获得用户词云
@app.route('/api/py/getcloudchart')
def getcloud_chart():
    path = main.getcloud_chart()
    return path


# 情感分直方图
@app.route('/api/py/getpingchart')
def getpingbu_chart():
    path = main.getping_chart(main.read_file())
    return path


if __name__ == '__main__':
    app.run()

在这里插入图片描述

  • 点击http://127.0.0.1:5000/,会展示Hello World!页面

在这里插入图片描述

  • 输入http://127.0.0.1:5000/api/py/getpingchart,获得用户情感分布直方图文件路径;
    在这里插入图片描述

  • 访问该路径图片
    在这里插入图片描述

  • 扩展说明
    我们有了接口,并且接口也返回了当前保存图片的文件路径,如果项目有前端的话,就直接将保持图片的路径设置到前端文件夹中,前端固定好图片路径,运行该flask项目,并且调用接口,就可以在前端管理页面看到展示数据。这里也可以实现一些其他性格相关的操作,比如可以将情感值在细化分析。

三、总结

以上就是今天要讲的内容,本文仅仅简单情感分析服务架构的创建和使用,如果在学习时有问题,可在评论区提出来!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:18:55  更:2022-03-16 22:21:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:44:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码