汽车网站设计模板,苏州外贸网站建设优化推广,wordpress用户管理解决方案,网站建设专员求职简历文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言
#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕… 文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目今天要分享的是 基于大数据的社交平台数据爬虫舆情分析可视化系统
学长这里给一个题目综合评分(每项满分5分)
难度系数3分工作量3分创新点4分
1 课题背景
基于Python的社交平台大数据挖掘及其可视化。
2 实现效果
实现功能
实时热点话题检测情感分析结果可视化Twitter数据挖掘平台的设计与实现
可视化统计
Hashtag统计 地理位置信息的可视化 话题结果可视化
矩阵图 旭日图 情感分析的可视化 web模块界面展示 3 LDA模型
2003年D.Blei等人提出了广受欢迎的LDALatentdirichlet allocation主题模型[8]。LDA除了进行主题的分析外还可以运用于文本分类、推荐系统等方面。
LDA模型可以描述为一个“上帝掷骰子”的过程首先从主题库中随机抽取一个主题该主题编号为K接着从骰子库中拿出编号为K的骰子X进行投掷每投掷一次就得到了一个词。不断的投掷它直到到达预计的文本长度为止。简单的说这一过程就是“随机的选择某个主题然后从该主题中随机的选择词语”。按照之前的描述一篇文档中词语生成的概率为 可以用矩阵的乘法来表示上述的过程
回到LDA模型来说LDA模型的输入是一篇一篇用BOW(bag of words)表示的文档,即用该文档中无序的单词序列来表示该文档忽略文档中的语法和词语的先后关系。LDA的输出是每篇文档的主题分布矩阵和每个主题下的单词分布矩阵。简而言之LDA主题模型的任务就是已知左边的矩阵通过一些方法得到右边两个小矩阵。这里的“一些方法”即为LDA采样的方法目前最主要的有两种一种是变分贝叶斯推断(variationalBayes, VB),另一种叫做吉布斯采样(Gibbs Sampling)其中吉布斯采样也被称为蒙特卡洛马尔可夫 (Markov Chain Monte CarloMCMC)采样方法。
总的来说MCMC实现起来更加简单方便而VB的速度比MCMC来得快研究表明他们具有差不多相同的效果。所以对于大量的数据采用VB是更为明智的选择。
4 情感分析方法
本文采用的情感分析可以说是一个标准的机器学习的分类问题。目标是给定一条推文将其分为正向情感、负向情感、中性情感。
预处理
POS标注CMU ArkTweetNLP字母连续三个相同替换 “coooooooool”“coool”删除非英文单词删除URL删除删除用户的提及username删除介词、停止词否定展开将以n’t结尾的单词进行拆分如don’t 拆分为do not,这里需要注意对一些词进行特殊处理如can’t拆分完之后的结果为can not而不是ca not。否定处理从否定词如shouldn’t开始到这个否定词后的第一个标点.,?!之间的单词均加入_NEG后缀。如perfect_NEG。 “NEG”后缀
特征提取
文本特征 N-grams 1~3元模型使用出现的次数而非频率来表示。不仅是因为使用是否出现来表示特征有更好的效果[16]还因为Twitter的文本本身较短一个短语不太可能在一条推文中重复出现。 感叹号问号个数 在句子中的感叹号和问号往往含有一定的情感。为此将它作为特征。 字母重复的单词个数 这是在预处理中对字母重复三次以上单词进行的计数。字母重复往往表达了一定的情感。 否定的个数 否定词出现后句子的极性可能会发生翻转。为此把整个句子否定的个数作为一个特征 缩写词个数等 POS 标注为[‘N’, ‘V’, ‘R’, ‘O’, ‘A’] 个数名词、动词、副词、代词、形容词) 词典特征本文使用的情感词典有Bing Lius词库[39]、MPQA词库[40]、NRC Hashtag词库和Sentiment140词库[42]、以及相应的经过否定处理的词库[45] 推文中的单词在情感字典个数 即有极性的单词个数推文的 总情感得分把每个存在于当前字典单词数相加到推文的 总情感得分把每个存在于当前 - 字典单词数相加到推文的 总情感得分把每个存在于当前字典单词数相加到推文总分这个数作为一特征。推文中单词最大的正向情感得分和负。推文中所有正向情感的单词分数 和以及 所有负向情感单词的分数和。最后一个词的分数 表情特征 推文中正向 情感 和负向的表情个数最后一个表情的极性是 否为正向
特征选择
本文 特征选择主要是针对于 N-grams 特征 的采用方法如下
设定min_dfmin_df0以及threshold0 threshold 1
对于每个在N-grams的词:
统计其出现于正向、负向、中性的次数得到pos_cnt, neg_cnt, neu_cnt以及出现总数N,然后分别计算
pos pos_cnt / N
neg neg_cnt / N
neu neu_cnt / N
对于 pos,neg,neu中任一一个大于阈值threshold 并且N min_df的保留该词否则进行删除。上述算法中滤除了低频的词因为这可能是一些拼写错误的词语并且删除了一些极性不那么明显的词有效的降低了维度。
分类器选择
在本文中使用两个分类器进行对比他们均使用sklearn提供的接口 。第一个分类器选用SVM线性核分类器参数设置方面C 0.0021其余均为默认值。第二个分类器是Logistic Regression分类器其中设置参数C0.01105。
在特征选择上min_df5, threshold0.6。
实验
SemEval国际上的一个情感分析比赛训练数据和测试数据评价方法采用F-score对比SemEval2016结果如下
测试集名 5 部分核心代码
import json
from django.http import HttpResponse
from django.shortcuts import render
from topic.models.TopicTrendsManager import TopicTrendsManager
from topic.models.TopicParameterManager import TopicParameterManagerdef index(request):return render(request, topic/index.html)# TODO 检查参数的合法性, and change to post method
def stream_trends(request):param_manager TopicParameterManager(request.GET.items())topic_trends TopicTrendsManager(param_manager)res topic_trends.get_result(param_manager)return HttpResponse(json.dumps(res), content_typeapplication/json)def stop_trends(request):topic_trends TopicTrendsManager(None)topic_trends.stop()res {stop: stop success}return HttpResponse(json.dumps(res), content_typeapplication/json)def text(request):return render(request, topic/visualization/result_text.html)def bubble(request):return render(request, topic/visualization/result_bubble.html)def treemap(request):return render(request, topic/visualization/result_treemap.html)def sunburst(request):return render(request, topic/visualization/result_sunburst.html)def funnel(request):return render(request, topic/visualization/result_funnel.html)def heatmap(request):return render(request, topic/visualization/result_heatmap.html)def hashtags_pie(request):return render(request, topic/visualization/result_hashtags_pie.html)def hashtags_histogram(request):return render(request, topic/visualization/result_hashtags_histogram.html)def hashtags_timeline(request):return render(request, topic/visualization/result_hashtags_timeline.html)6 最后