python新闻评论情感分析可视化系统 Flask框架 NLP情感分析 计算机毕业设计(源码)✅
1、项目介绍
技术栈:
Flask框架、 snownlp情感分析、Echarts可视化、 NLP情感分析、 LDA算法、 Kmeans算法
新闻评论情感分析可视化系统
2、项目界面
(1)系统首页
(2)主题词汇分析
(3)热门新闻分析
(4)注册登录界面
3、项目说明
技术栈:
- Flask框架:用于搭建Web应用程序,提供后端支持和接口。
- snownlp情感分析:用于对新闻评论进行情感分析,判断评论的情感倾向(积极、消极、中性)。
- Echarts可视化:用于将情感分析结果以图表的形式展示,提供直观的数据可视化效果。
- NLP:自然语言处理技术,用于对新闻评论进行文本处理、分词、词性标注等操作。
- LDA算法:主题模型算法,用于从新闻评论中提取出潜在的主题信息。
- 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