首页 > 编程语言 >python新闻评论情感分析可视化系统 Flask框架 NLP情感分析 计算机毕业设计(源码)✅

python新闻评论情感分析可视化系统 Flask框架 NLP情感分析 计算机毕业设计(源码)✅

时间:2024-11-22 10:16:04浏览次数:3  
标签:word type 情感 源码 评论 毕业设计 可视化 data

python新闻评论情感分析可视化系统 Flask框架 NLP情感分析 计算机毕业设计(源码)✅

1、项目介绍

技术栈:
Flask框架、 snownlp情感分析、Echarts可视化、 NLP情感分析、 LDA算法、 Kmeans算法
新闻评论情感分析可视化系统

2、项目界面

(1)系统首页

在这里插入图片描述
(2)主题词汇分析
在这里插入图片描述

(3)热门新闻分析
在这里插入图片描述

(4)注册登录界面

在这里插入图片描述

3、项目说明

技术栈:

  1. Flask框架:用于搭建Web应用程序,提供后端支持和接口。
  2. snownlp情感分析:用于对新闻评论进行情感分析,判断评论的情感倾向(积极、消极、中性)。
  3. Echarts可视化:用于将情感分析结果以图表的形式展示,提供直观的数据可视化效果。
  4. NLP:自然语言处理技术,用于对新闻评论进行文本处理、分词、词性标注等操作。
  5. LDA算法:主题模型算法,用于从新闻评论中提取出潜在的主题信息。
  6. Kmeans算法:聚类算法,用于将新闻评论进行分类或分组。

新闻评论情感分析可视化系统介绍:
该系统基于Flask框架搭建,主要实现对新闻评论进行情感分析和可视化展示的功能。
用户可以输入新闻评论的内容,系统将使用snownlp情感分析库对评论进行情感倾向的判断,并将结果呈现给用户。
同时,系统还使用NLP技术对评论进行文本处理、分词和词性标注等操作,提取出评论中的关键词和主题信息。
利用LDA算法,系统可以从评论中挖掘出潜在的主题,帮助用户更好地理解评论的内容。
最后,系统使用Echarts可视化库将情感分析结果、关键词和主题信息以图表的形式展示,用户可以直观地查看分析结果。
通过该系统,用户可以更好地了解新闻评论的情感倾向和主题信息,帮助他们进行决策或分析。

4、核心代码

import pymysql
import jieba
from collections import Counter
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from wordcloud import WordCloud
from snownlp import SnowNLP


def LDA(text, type):
    jiebaword = []
    for line in text:
        line = line.strip('\n')
        # 清除多余的空格
        line = "".join(line.split())
        # 默认精确模式
        seg_list = jieba.cut(line, cut_all=False)
        word = "/".join(seg_list)
        jiebaword.append(word)
    stopwords_filepath = "./static/stopwords.txt"
    # 读取停用词表
    stopwords = [line.strip() for line in open(stopwords_filepath, 'r', encoding='utf-8').readlines()]
    stopwords.append('##')
    fw = open('./static/clean.txt', 'w', encoding='utf-8')
    # 去除停用词
    word3 = ''
    for words in jiebaword:
        words = words.split('/')
        for word in words:
            if word not in stopwords:
                word3 += word + " "
                fw.write(word + '\t')
        fw.write('\n')
    fw.close()
    with open('./static/clean.txt', "r", encoding='utf-8') as fr:
        wordList = fr.readlines()
    # 生成tfidf矩阵
    transformer = TfidfVectorizer()
    tfidf = transformer.fit_transform(wordList)
    # 转为数组形式
    tfidf_arr = tfidf.toarray()
    km = nltk.cluster.kmeans.KMeansClusterer(num_means=3, distance=nltk.cluster.util.cosine_distance)
    # 进行kmeans聚类分析
    km.cluster(tfidf_arr)
    data0 = []
    data1 = []
    data2 = []
    for data, word in zip(tfidf_arr, wordList):
        if km.classify(data) == 0:
            word = word.replace('\n', '').split('\t')
            for i in word:
                if i != "":
                    data0.append(i)
        elif km.classify(data) == 1:
            word = word.replace('\n', '').split('\t')
            for i in word:
                if i != "":
                    data1.append(i)
        elif km.classify(data) == 2:
            word = word.replace('\n', '').split('\t')
            for i in word:
                if i != "":
                    data2.append(i)
    data = data0 + data1 + data2
    wordcloud(data, type)
    data = Counter(data)
    d2 = sorted(data.items(), key=(lambda x: x[1]), reverse=True)
    data = []
    for i in d2:
        data.append(list(i))
    return data


def wordcloud(words, type):
    text = ""
    for i in words:
        text += (i + " ")
    # 生成词云图
    my_wordcloud = WordCloud(background_color=("#fff"), font_path="C:\Windows\Fonts\simhei.ttf", scale=4).generate(
        text)  # 注:song.ttc  设置展示的图文的字体
    my_wordcloud.to_file("./static/" + type + ".png")  # 保存图片



if __name__ == '__main__':
    con = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='lda', charset='utf8')
    cur = con.cursor()
    sql = 'select * from data'
    cur.execute(sql)
    res = cur.fetchall()
    types = ['2020', '2021', '2022', '2023']
    for type in types:
        texts = []
        for i in res:
            if str(i[4])[:4] == type:
                texts.append(str(i[7]))
        #   LDA算法
        data = LDA(texts, type)

        for i in data:
            if i[1] > 10:
                s = SnowNLP(i[0])
                # s.sentiments 查询最终的情感分析的得分 小于0.4为消极
                result = s.sentiments
                sql = "insert into words(word,num,nlp,year) values('%s','%s','%s','%s')" % (i[0], i[1], result, type)
                cur.execute(sql)
                con.commit()




123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111

标签:word,type,情感,源码,评论,毕业设计,可视化,data
From: https://blog.csdn.net/Jake_make/article/details/143903435

相关文章