ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python构建微博舆情分析可视化系统:从爬虫到ECharts大屏全解析

Python构建微博舆情分析可视化系统:从爬虫到ECharts大屏全解析 你打开微博热搜看到某个话题从早到晚挂在榜上阅读量破亿、讨论量几万条。普通人看到的是热闹做舆情分析的人看到的是另一层东西谁在讨论、情绪是正还是负、哪些词被反复提起、热度在哪个时段集中爆发。很多人以为做一套微博舆情分析可视化系统就是写个爬虫抓数据再用词云库画张图。真正上手之后才知道采集、清洗、NLP情感判断、数据库落库、图表联动每一个环节都能让人折腾到半夜。这篇文章想完整拆解一套基于 Python 的微博舆情分析可视化系统。它不是一个只有 Flask 脚手架和几张静态图表的 Demo而是包含爬虫采集、中文 NLP 分析、MySQL 数据存储、ECharts 可视化大屏的完整闭环项目附带可直接部署的源码和数据库脚本。无论你是做课程设计还是想给自己的简历加一个有说服力的项目这套系统都值得完整过一遍。我会把模块划分、技术选型理由、关键代码、部署过程中的坑以及我踩过之后才想明白的细节全部写出来。1. 微博舆情分析系统的定位它到底解决什么问题在动手敲代码之前想清楚系统边界比选什么框架重要得多。我见过太多人一上来就写爬虫抓了三五千条数据之后才发愁怎么分析最后硬塞到一个管理系统里效果非常尴尬。这套舆情系统能跑通关键在于先把输入、处理、输出这条链路理清楚。1.1 从一则热搜说起舆情分析的工作流假设现在要分析某个品牌词、某部电影或某个社会话题在微博上的舆论表现。我们关心的问题往往是这几类这个话题讨论量是多少参与账号是什么类型的整体情绪是正面、负面还是中性集中讨论哪些细分关键词热度随时间怎么变化。对应到系统上就是一条清晰的工作流爬虫采集微博搜索页或话题页的博文数据把文本交给 NLP 模块做分词和情感分析同时用 TF-IDF 提取热点关键词分析结果连同原始博文一起写入 MySQL最后由 Flask 提供接口ECharts 把统计结果渲染成饼图、折线图、柱状图和词云。这个流程看起来简单但每一步的数据形态都不一样设计的时候必须提前想好每个模块输出的字段否则后面对接全是漏洞。1.2 技术选型为什么是这个组合这套系统用的组合是 Python jieba Flask MySQL ECharts。有人会问为什么不用 Django、不用 Elasticsearch、不用更复杂的深度学习情感模型先说说 Python这个没有争议NLP 生态最成熟的就是 Pythonjieba、snownlp、scikit-learn 这些库直接可用爬虫和数据处理也顺手。Web 框架选 Flask 而不是 Django是因为这个项目的后端职责非常简单只需要提供几个 JSON 接口和一个页面入口Flask 的轻量正好合适学习成本也低。数据库选 MySQL而不是 SQLite 或 MongoDB。微博舆情分析天然是关系型数据用户、博文、话题、统计数据之间有明确的关联关系需要按时间、按情感类型做分组统计MySQL 的 SQL 聚合能力比文档数据库顺手得多。后面我会详细展开表结构设计。可视化选 ECharts 是经验之谈。它图表类型丰富中文支持好社区案例多最关键是前后端分离的对接方式非常标准后端给 JSON前端配置 option完全不需要服务端渲染图表部署压力小。1.3 项目模块划分我给这个系统的模块划分是五大块数据采集模块、数据清洗模块、NLP 分析模块、存储访问模块、可视化展示模块。数据采集模块负责从微博获取原始内容输出标准格式的博文数据数据清洗模块负责把文本里的 URL、提及、话题标签、emoji 处理掉因为这些东西会干扰分词和情感判断NLP 分析模块负责分词、情感评分、热点词提取存储访问模块负责所有数据库读写操作可视化模块负责接口和前端图表。模块边界清晰之后最直接的好处是排错方便。比如情感结果明显不对可以直接定位到 NLP 模块单独调试不用把整个链路翻一遍。新手项目最容易犯的错就是把所有代码堆在一个文件里看着是省事后面加需求、查 bug 都想骂人。2. 数据采集落地方案爬虫设计、文本清洗与增量更新数据是整套系统的燃料。采集这块如果只准备跑一次 Demo随便抓个几百条就够但要作为完整项目交付必须考虑采集策略、字段丰富度、清洗规则和增量更新。2.1 采集入口选择与请求策略微博数据采集有两个入口官方 API 和网页爬虫。官方 API 限制比较多个人开发者能拿到的权限很有限申请流程也麻烦所以绝大多数项目选网页爬虫方案。实用的做法是请求微博搜索页按关键词搜索解析返回的 HTML 里的博文信息。请求的时候必须带上完整的请求头尤其是 User-Agent 和 Cookie否则很容易被反爬。Base 代码大致是这样import requests from bs4 import BeautifulSoup headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, Cookie: 你的登录Cookie } def fetch_weibo(keyword, page): url https://s.weibo.com/weibo params {q: keyword, page: page} resp requests.get(url, headersheaders, paramsparams, timeout10) resp.encoding utf-8 return resp.text这里有一个关键细节搜索结果页面是动态加载的直接 requests 拿到的 HTML 里不一定包含全部博文需要观察页面结构找到真实的数据节点。早期版本我用 BeautifulSoup 选择.card-wrap这层容器来定位单条博文后来微博页面改版过几次选择器也得跟着调整。这个维护成本没办法避免需要看你部署的时间节点去适配。再说说反爬应对。正常的做法是控制请求频率每次请求之间 sleep 2 到 5 秒设置重试机制遇到 403 或验证码时暂停一段时间。采集不是打仗不用追求速度稳定才是第一位。尤其是课程设计或演示场景被抓封了 IP 反而更难收场。2.2 关键字段解析与存储前的预处理博文解析需要拿到的字段包括微博 ID、博主昵称、博主主页链接、发布时间、点赞数、评论数、转发数、博文正文内容。这些字段后面做统计都会用到比如分析参与账号类型需要博主信息分析热度曲线需要发布时间。解析时间字段要特别注意。搜索结果页里的时间有三种情况刚刚、5分钟前、昨天、具体日期2024-01-15。存储之前必须统一转成标准时间格式我建议直接转成YYYY-MM-DD HH:MM:SS字符串方便后面按日期分组。处理这种相对时间我写了一个小工具函数把所有情况都映射成 datetime 对象from datetime import datetime, timedelta import re def parse_time(text): now datetime.now() if 刚刚 in text: return now.strftime(%Y-%m-%d %H:%M:%S) m re.match(r(\d)分钟前, text) if m: return (now - timedelta(minutesint(m.group(1)))).strftime(%Y-%m-%d %H:%M:%S) m re.match(r昨天(\d):(\d), text) if m: hour, minute int(m.group(1)), int(m.group(2)) return (now - timedelta(days1)).replace(hourhour, minuteminute, second0).strftime(%Y-%m-%d %H:%M:%S) ...点赞数、评论数、转发数在页面里经常显示成1.2万这样的缩写格式存储前要转成整数。这个很容易漏漏了之后统计排序全是错的。2.3 清洗规则细节URL、用户、话题与emoji清洗是很多人最不重视但实际影响最大的环节。微博文本里充满了 URL、用户名、#话题标签#、emoji 表情这些内容如果不处理分词结果会变得非常杂乱情感判断也会被带着跑偏。我的清洗规则是按照这几步依次处理先用正则去掉 http/https 链接然后去掉 开头的用户名再把 #话题# 标签提取出来单独保存原文里也去掉最后把 emoji 和特殊符号过滤掉。清洗完的干净文本才是后续 NLP 分析的输入。import re def clean_text(text): text re.sub(rhttp\S|https\S, , text) text re.sub(r[\u4e00-\u9fa5\w][:,]?, , text) topic_list re.findall(r#([^#])#, text) text re.sub(r#([^#])#, , text) text re.sub(r\[[^\]]*\], , text) # 表情 return text.strip(), topic_list这里我强调一个坑话题标签不要简单丢弃。#某个话题#本身是很有价值的分类信息它反映了博文参与的具体议程。我会把提取出来的话题单独存到关联表里后面可以统计哪些子话题讨论量最高。如果你直接把话题标签从文本里删掉就丢失了一层信息。2.4 增量采集与去重策略整个系统不能每次跑都是全量重来。我在采集表里加了一个created_at字段每次启动采集任务时可以传入起始时间和结束时间实现按时间段增量抓取。去重是另一个必须处理的点。微博搜索页翻页时偶尔会出现重复博文重复抓取同一关键词的不同时间批次也可能撞到同一条微博。我的做法是在爬虫入库前先查一下微博 ID 是否已经存在存在就跳过。数据库层面给weibo_id字段建唯一索引双保险。这样即使爬虫逻辑写漏了数据库也能挡住重复数据。3. NLP 分析核心中文分词、情感评分与热词提取数据清洗完之后真正体现NLP价值的部分来了。这套系统的 NLP 分析模块做了三件事中文分词、情感判断、热点关键词提取。每一个都不算高深但组合起来要让结果看着靠谱需要不少细节打磨。3.1 中文分词与停用词表中文 NLP 第一步永远是分词。Python 生态里 jieba 是使用率最高的库它支持精确模式、全模式和搜索引擎模式。舆情分析我用的是精确模式配合自定义词典和停用词过滤。import jieba def seg_words(text): words jieba.lcut(text) stopwords load_stopwords(stopwords.txt) result [w.strip() for w in words if w.strip() and w not in stopwords and len(w.strip()) 1] return result停用词表我维护了一份几百词的列表包括我们你们这个那个因为所以这类无实际意义的高频虚词还有标点符号和语气词。如果不加停用词后续 TF-IDF 提取出来的关键词会大量被这类无意义词占据图表效果非常难看。还有个实用技巧项目里可以维护一份自定义词典user_dict.txt把这次分析涉及的专业术语、品牌名、人名加进去。比如分析某品牌舆情时把品牌名和产品系列名称加进去jieba 分词时通过jieba.load_userdict()加载能明显提高分词准确性比默认词典切得准得多。3.2 情感分析情感词典法实现与局限情感分析是这个系统里最容易被人质疑的部分。常见的方案有三类基于情感词典、基于传统机器学习、基于深度学习。我最终用的是情感词典方案原因很实际部署简单、解释性强、不需要标注数据、中小量文本下速度很快。深度学习模型虽然精度上限更高但要准备标注数据集、要训练、要调参部署也重对课程设计和轻量级舆情系统来说性价比不高。情感词典方案的核心思路是准备一个包含正面词、负面词、否定词、程度副词的词典对分词后的文本逐词计算情感得分。正面词加 1 分负面词减 1 分碰到否定词取反碰到程度副词按权重放大或缩小。一条文本的总分如果大于 0 判为正面小于 0 判为负面等于 0 判为中性。pos_words set([好评, 优秀, 满意, 喜欢, 推荐, 给力]) neg_words set([差评, 垃圾, 失望, 难用, 后悔, 投诉]) negate_words set([不, 无, 没有, 别, 莫]) degree_words {非常: 2.0, 很: 1.5, 太: 1.8, 稍微: 0.8, 有点: 0.6} def sentiment_score(words): score 0 negate False degree 1.0 for w in words: if w in negate_words: negate True elif w in degree_words: degree degree_words[w] elif w in pos_words: score degree if not negate else -degree degree, negate 1.0, False elif w in neg_words: score - degree if not negate else degree degree, negate 1.0, False return score这段逻辑是情感词典法的标准骨架。实际项目里词典规模直接影响效果好还行不错这类词都要尽量覆盖全。这里必须坦白说一句情感词典法在遇到反讽、玩梗、谐音梗的时候基本无能为力。比如这个价格真是良心到爆炸这种反讽表达词典法会把它判成正面。解决思路是持续扩充情感词典把常见微博网络用语加进去同时可以把分析结果导出成 csv人工标注一部分后重新调整词典权重。这不是一个完美的方案但在可控成本下它是最适合课程设计和 Demo 项目的。3.3 热点关键词提取TF-IDF 计算过程拆解热点关键词提取我用了 TF-IDF。它不是最前沿的算法却是性价比最高的不需要训练计算快结果可解释。TF-IDF 的思路是给每个词算两个值。TF 是词频衡量这个词在当前文本中出现的频繁程度IDF 是逆文档频率衡量这个词在多少篇文档里出现过出现越多越普通权重越低。两者相乘就是这个词对于当前文本的重要性。import math from collections import Counter def compute_tf(words, total_words): counter Counter(words) return {w: c / total_words for w, c in counter.items()} def compute_idf(docs, all_texts): total_docs len(all_texts) doc_freq {} for doc in all_texts: for w in set(doc): doc_freq[w] doc_freq.get(w, 0) 1 return {w: math.log(total_docs / (freq 1)) for w, freq in doc_freq.items()}集成的时候我把每天的微博文本合并成若干文档再对整体语料计算 IDF然后用 TF-IDF 值排序取 TopN 作为当天热点词。这个结果可以直接喂给词云图或条形图。实际操作中我会做两个后处理一是过滤掉纯数字词和过于通用的词二是在提取热点词时结合自定义词典把品牌词、产品名的 TF-IDF 单独捞出来展示。很多舆情系统只做高频词提取结果词云里全是我们一个真的这种词TF-IDF 因为引入了 IDF 惩罚高频但不具区分度的词会被压下去效果会好很多。3.4 分析字段设计与结果入库NLP 分析结果不能只在内存里打转最终要落到数据库里供可视化接口读取。我给分析结果设计了几个字段weibo_id关联原始博文sentiment_label存情感类别正面/中性/负面sentiment_score存具体分数keywords存提取出的热点词列表按逗号拼接。同时每天的热点词统计单独存一张聚合表包含日期、关键词、TF-IDF 值、出现次数。落库时有一个常见问题一条博文可能同时被多次采集和分析产生重复的分析记录。我在分析入库前先判断该weibo_id是否已有分析记录有则更新、无则插入避免重复统计导致图表数据虚高。这种细节不处理最后看折线图的时候就会发现某天数据突然飙升但怎么查都查不出原因。4. 数据库设计舆情数据表结构、索引与查询优化数据库设计直接决定了统计查询能不能写得顺畅。很多课程设计的做法是建一张超大表所有字段堆在一起够用但很难扩展。这套系统我拆成了三张核心表加一张关系表结构化程度更高后面做筛选和聚合也顺手。4.1 核心表结构设计第一张表是微博信息表存原始博文数据。字段包括自增主键、微博 ID、关键词、博主名、发布时间、点赞数、评论数、转发数、正文内容。第二张表是情感分析结果表存 NLP 模块的输出。第三张表是每日热点词统计表按日期汇总。第四张是话题标签表存从博文里提取的话题信息。建表语句大致如下CREATE TABLE weibo_posts ( id INT AUTO_INCREMENT PRIMARY KEY, weibo_id VARCHAR(64) UNIQUE NOT NULL, keyword VARCHAR(100) NOT NULL, blogger_name VARCHAR(100), published_at DATETIME NOT NULL, likes INT DEFAULT 0, comments INT DEFAULT 0, reposts INT DEFAULT 0, content TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;注意两点。第一weibo_id加了唯一索引这是去重最关键的一层保障。第二表字符集用了utf8mb4不是utf8。这一点特别重要因为微博正文里经常出现 emoji而 emoji 是四字节字符MySQL 的utf8只能存三字节存 emoji 会直接报错或变成乱码。用utf8mb4才能完整保存。情感分析结果表的设计会用weibo_id和微博信息表关联而不是再用一个自增 ID 对应全部内容。这样做的原因是同一个weibo_id在理论上只应有一条分析结果关联关系清晰查询效率也高。热点统计表则用来存储每天的关键词 TopN这个表是可视化折线图和词云图的数据来源。4.2 为什么选 MySQL简单来说这个项目的查询模式是典型的关系型聚合。要统计某天内正面/中性/负面各有多少条一条 SQL 就搞定但如果是 MongoDB这个聚合得写复杂的 pipeline。系统还要按关键词筛选、按时间范围筛选这些 SQL 写起来都很自然。MySQL 同时还是市面上部署资料最全的数据库遇到问题排查成本低对新手最友好。如果你本地没有 MySQL 环境也可以先用 SQLite 开发调试部署时再切 MySQL。但我实际建议一步到位直接上 MySQL因为 SQLite 和 MySQL 在类型处理、并发控制、字符集方面有差异切换的时候容易踩坑。4.3 索引与常用统计查询数据库表建好只是第一步索引设计直接决定查询效率。我在published_at上建了索引因为热度曲线、按时间分组都是高频查询在keyword字段上也建了普通索引因为系统几乎总是按关键词筛选数据。可视化模块最常用的查询就是这几个按天统计博文数量按情感类别分组统计数量统计热词出现次数 TopN。对应 SQL 大概是SELECT DATE(published_at) AS day, COUNT(*) AS cnt FROM weibo_posts WHERE keyword 某关键词 GROUP BY DATE(published_at) ORDER BY day; SELECT sentiment_label, COUNT(*) AS cnt FROM sentiment_results WHERE weibo_id IN (SELECT weibo_id FROM weibo_posts WHERE keyword 某关键词) GROUP BY sentiment_label;这里要说明一个经验不要在content这种大文本字段上建索引没有任何意义还会拖慢写入速度。按日期分组时如果数据量上万建议用DATE(published_at)分组否则会用到不必要的秒级精度白白增加计算量。5. 可视化大屏实现Flask 接口与 ECharts 图表的完整链路可视化是整套系统最直观的成果也是最容易让人觉得这是个完整系统的部分。但可视化不是简单地堆图表而是要让数据经过接口、图表、页面三个环节最终呈现成一个能讲故事的页面。5.1 后端接口设计后端我用的 Flask总共规划了四个接口首页渲染、情感分布统计、热度趋势统计、热门关键词统计。每个接口返回结构化 JSON前端拿到数据直接填充图表。这种设计的好处是前后端可以独立调试也方便以后替换前端框架。from flask import Flask, jsonify import pymysql app Flask(__name__) app.route(/api/sentiment) def sentiment_stats(): keyword request.args.get(keyword, ) conn get_db_conn() cursor conn.cursor(pymysql.cursors.DictCursor) sql SELECT sentiment_label AS name, COUNT(*) AS value FROM sentiment_results JOIN weibo_posts ON weibo_posts.weibo_id sentiment_results.weibo_id WHERE weibo_posts.keyword %s GROUP BY sentiment_label cursor.execute(sql, (keyword,)) result cursor.fetchall() cursor.close() conn.close() return jsonify({code: 200, data: result})接口路径和返回结构一定要在设计时就固定下来最后整套系统才会协调。我早期吃过亏前后端同时开发接口字段一天改三次最后对不上排查半天发现只是字段名大小写不一致。建议先定义好 JSON 返回的 schema再动手写代码。5.2 图表选择与数据组装ECharts 图表类型很多但舆情大屏只用最合适的几种情感分布用饼图或环形图一眼能看出正负比例热度趋势用折线图X 轴是日期Y 轴是博文数量热门关键词用横向条形图或词云图博主互动情况可以用柱状图展示点赞评论转发量 TopN。ECharts 的配置结构是统一的比如词云图需要准备wordcloud组件需要单独引入echarts-wordcloud插件数据格式是[{name: 关键词, value: 权重}]后端接口返回的数据几乎可以直接映射。折线图的数据组装稍微需要处理一下把接口返回的按日统计结果转成两个数组一个日期数组一个数量数组再塞进xAxis和series里。div idtrendChart stylewidth: 100%; height: 400px;/div script fetch(/api/trend?keyword某关键词) .then(res res.json()) .then(rs { const dates rs.data.map(item item.day); const counts rs.data.map(item item.cnt); const chart echarts.init(document.getElementById(trendChart)); chart.setOption({ xAxis: { type: category, data: dates }, yAxis: { type: value }, series: [{ type: line, data: counts, smooth: true }] }); }); /script这里的重点是图表数据千万不要在后端拼 HTML 或拼图表配置后端只管返回 JSON配置逻辑全放前端。这样职责清晰也方便后期换图表库。5.3 前端刷新与展示细节大屏页面需要定时刷新。舆情数据是动态变化的我在前端用setInterval每隔 30 秒重新请求一次接口更新所有图表。实际部署中要注意刷新频率的合理性30 秒一次对数据库压力很小但如果并发访问多还是建议把周期放到 1 分钟以上。还有一个细节我之前忽略了空数据处理。当某个关键词还没有采集数据时接口返回空数组ECharts 会显示空白甚至报错。我在前端加了判断数据为空时显示暂无数据避免页面白屏。类似的还有时间字段排序SQL 里排序没问题但如果前端拿到数据后改变了顺序折线图就会乱。建议在前端也做一次按日期升序排序双重保险。6. 部署过程中踩过的坑与排查实录这套系统部署过程最大的问题不在业务代码而在环境、数据库和中文编码这些看起来低级的问题。我整理了几个自己踩过的坑每一个都浪费过我不少时间。6.1 环境与依赖问题Python 版本是第一个坑。系统开发时用 Python 3.8但部署机器上装的是 Python 3.11几个依赖库的版本要重新确认。特别是jieba和pymysql在 3.11 下要装较新版本才能正常运行。我建议部署前统一用requirements.txt固定版本避免在我电脑上是好的这种经典问题。pip install flask pymysql jieba requests beautifulsoup4如果使用的是虚拟环境这一步能避免很多系统级 Python 目录的权限问题。如果机器上有多个 Python 版本建议用python3 -m venv venv创建独立环境。6.2 数据库初始化的坑数据库初始化最容易出问题的就是字符集。创建数据库时如果没有显式指定utf8mb4MySQL 默认可能使用latin1或utf8中文存进去直接变问号。我建库时用的语句是CREATE DATABASE weibo_analysis DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;另一个坑是密码和权限问题。pymysql连接数据库时Host、端口、用户、密码、库名五个参数任何一个不对都会报连接错误。我在配置文件里单独维护这些参数连接失败时先检查这几个值比看堆栈日志更快定位问题。6.3 中文乱码问题中文乱码坑是分层的。数据库层解决了utf8mb4之后还要确认连接层也用了 UTF-8。pymysql.connect()时我会加上charsetutf8mb4参数否则即使数据库表是utf8mb4连接默认的字符集也可能导致中文显示乱码。conn pymysql.connect( hostlocalhost, userroot, password你的密码, databaseweibo_analysis, charsetutf8mb4 )爬虫请求的resp.encoding也要设置为utf-8。微博页面本身是 UTF-8但如果不显式设置requests 可能按别的方式猜测编码抓回来的文本在打印时看着正常一存库就乱。这种问题最坑的地方在于它不在报错信息里显示要等到前端展示才暴露排查链路特别长。6.4 定时任务与异常兜底的实践经验舆情分析系统讲究时效性部署完不能只手动跑一次就完事得考虑让采集和分析定时执行。我在部署环境里用了任务计划程序每天定时触发采集脚本、分析脚本。这里有几个基于实操的提醒采集脚本执行时间不要和任务计划触发时间精确重叠最好脚本之间留出充足间隔。比如采集跑了 20 分钟分析脚本至少要在采集结束后再启动否则分析脚本读到的数是半成品。另外脚本执行要有日志。我在代码里加了 logging 配置每条执行记录、每次异常都写到日志文件。没有日志定时任务半夜跑了三小时你完全不知道它成功没有。有了异常日志早上起来看一眼就能判断是否需要重新跑。任何网络爬虫脚本都必须考虑异常重试。我封装了一个safe_request函数遇到超时就重试三次重试间隔逐次拉长。同时给整个采集循环套了 try-except单条博文解析失败就跳过并记录日志不会因为一条脏数据导致整个任务崩溃。最后再说一个部署阶段最容易被忽视的点防火墙和端口。Flask 默认跑在 5000 端口外网访问需要在系统防火墙放行。如果是云服务器还要检查安全组的入站规则。这个坑不在代码层面但我见过太多人部署完本地访问没问题换到云端就访问不了查半天发现是端口没开。整个项目跑下来我的感受是微博舆情分析系统真正考验人的不是某个高深算法而是把采集、清洗、NLP、存储、可视化这条链路完整打通的能力。每个模块单独拿出来都不难但拼在一起能稳定运行、数据不出错、展示不空洞需要大量的细节考量。如果你也想做这个方向建议按我这篇文章的模块顺序逐块实现每完成一块就验证一块最后你会得到一套能讲清楚、能演示、能扩展的完整系统。后面有空的话我还想聊聊怎么把情感分析从词典法升级到深度学习方案以及如何把系统扩展成多平台舆情监测。
返回列表