当前位置:   article > 正文

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

新闻情感分析系统总体结构图

计算机毕业设计:基于python热门旅游景点数据分析系统+可视化 +django框架✅

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌

毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总

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()




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111

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