百度AI情感倾向分析实战:微博评论批量处理与避坑指南
简介调用百度云API并用Python对微博评论进行情感偏向分析是一套面向数据分析入门者与开发者的完整参考资源。资源内含可直接演练的微博评论数据文件并配有调用百度API获取情感得分的程序代码以及将原始得分标准化、映射到统一区间后判断实际倾向的处理逻辑覆盖从数据准备到结论输出的核心流程。压缩包共计15个文件主要涉及Python脚本、CSV与Excel数据文件、项目配置文件等整体仅421KB体量轻巧下载后可按目录快速定位到数据和代码便于逐项阅读。已有202人学习该资源适用于舆情监测、品牌反馈分析、社交媒体情绪探索等场景既可作为情感计算入门实践也能作为二次开发的基础模板整套流程清晰完整、易于复现。1. 把微博评论交给百度云AI这件事比你想的更简单也更容易翻车调用百度云API做微博评论情感偏向分析核心价值是把十几万条“爱了爱了”“气死我了”这种口语化短文本批量换算成可以统计的负向、中性、正向概率。我在模拟项目X里用这套方案处理过约八万条评论数据整个过程拆开看就三块拿腾讯微博此处以新浪微博数据为例的评论做清洗调百度AI开放平台的情感倾向分析接口再把返回的sentiment结果按天、按话题聚合。适合手里有评论数据但没精力训练模型的Python开发者或者是需要给运营看结论但不想黑匣子出报告的从业者。这个方案真正动手时坑全在接口鉴权、并发控制和长文本截断上这篇笔记会把关键细节和踩过的坑逐条写清楚。2. 接口选型与鉴权机制为什么推荐情感倾向分析而不是评论观点抽取2.1 两个接口的差别按句打分与按词取观点百度AI开放平台的NLP里和情感相关的接口有过两个容易混淆的方向一个叫情感倾向分析输入是一段文本输出是整体情感类别0负向、1中性、2正向以及对应的置信度和概率分布另一个叫评论观点抽取输出的是评论里的观点词和情感极性属于细粒度的属性级情感分析。从“这条微博评论是夸还是骂”这个诉求来看情感倾向分析显然是更匹配的选型它直接把整句映射到三分类概率上返回结构固定聚合统计非常友好。评论观点抽取虽然信息更丰富但返回结构是列表嵌套还需要自己处理观点词和情感标签的映射适合后续要做差评归因的场景。我一般会这样判断如果你的下游任务是“给运营一张趋势图”选倾向分析如果下游任务是“找出用户骂得最多的功能点”再升级到观点抽取也不迟。同一个账号下两个接口的调用方式完全一致只是接口名和参数不同后期切换成本很低。2.2 鉴权流程access_token的获取与缓存百度云的NLP接口走的是OAuth 2.0的client credentials流程先用API Key和Secret Key换access_token然后用这个token调用业务接口token有效期默认30天。这里最常见的问题不是不会调而是每次业务请求都去重新换取token——这会让鉴权服务器成为瓶颈而且完全没有必要。import time import requests def get_access_token(api_key: str, secret_key: str) - str: 获取并缓存百度AI平台access_token cache_key fbaidu_token_{api_key} cached token_cache.get(cache_key) if cached and cached[expire_at] time.time() 3600: return cached[token] url https://aip.baidubce.com/oauth/2.0/token params { grant_type: client_credentials, client_id: api_key, client_secret: secret_key, } resp requests.post(url, paramsparams, timeout10) resp.raise_for_status() data resp.json() token data[access_token] # 留一小时余量避免边界时间网络抖动导致token过期 token_cache[cache_key] {token: token, expire_at: time.time() data[expires_in]} return token这段代码的逻辑分三层先查内存缓存命中且剩余有效期大于一小时就直接返回未命中则请求token接口拿到token后把过期时间记录进全局字典。参数说明里值得注意的有两个expires_in是百度返回的秒数通常2592000秒即30天缓存留3600秒余量是血泪经验我有一次在到期前5分钟带着老token批量跑任务跑到一半全部返回110错误码排查了半天才发现是token过期。后续所有业务调用都从get_access_token拿token每台机器只需要一次网络请求。2.3 鉴权失败的三种状态码特征第一次接入时鉴权失败的表现千奇百怪但归纳起来就三种。110是token过期现象是批量任务跑到一半开始抛错111是access_token无效通常是复制key时混入了空格14是IAM鉴权失败表示该账号没有开通NLP服务权限。前两种属于调用侧配置问题第三种需要去控制台确认是否完成了实名认证和接口开通。我的习惯是写一个纯鉴权的自测脚本先把这三个状态码单独测通再进业务代码这样不会把鉴权问题和业务问题混在一起排查。3. 评论数据清洗与批量调用把文本处理成接口能吃的格式3.1 从原始评论到干净文本的四道工序微博评论的真实状态远比你想象的脏包含HTML实体、URL、用户名、话题标签、表情符号、连续空格还有大量的转发标记。直接把这些原样塞给情感分析接口会出现两个问题URL和用户名这类无意义字符会稀释情感词权重而话题标签里的文字本身带有情绪倾向处理不当会影响判断。我拿到原始数据后固定执行四道清洗工序。import re import pandas as pd def clean_weibo_comment(text: str) - str: 微博评论文本清洗返回接口可接受的字符串 if not isinstance(text, str): return # 去除html实体和url片段 text re.sub(rhttps?://\S|www\.\S|#\w;, , text) # 去除用户名 和 话题标签内部的#号 text re.sub(r[\w\u4e00-\u9fa5\-], , text) text re.sub(r#([^#])#, r\1, text) # 连续空白压缩为单个空格 text re.sub(r\s, , text) # 去除表情符号占位符 如[哈哈] [泪] text re.sub(r\[[^\]]{1,4}\], , text) return text.strip()[:500] df pd.read_csv(weibo_comments.csv, encodingutf-8) df[clean_text] df[comment].apply(clean_weibo_comment) df df[df[clean_text].str.len() 2] # 丢弃过短无意义内容清洗参数值得展开说两点re.sub(r#([^#])#, r\1, text)这一步是保留话题关键词而去掉#号因为“#iPhone16发布#”去掉#后保留“iPhone16发布”有助于接口捕捉正向情绪表情符号占位符用[^\]]{1,4}限制长度是因为微博表情基本是两到四个中文字符避免误删较长的方括号内容。清洗后我还会检查一遍长度分布如果大量文本超过400字说明数据源可能混入了文章正文而非评论这种是脏样本。3.2 单条调用的完整实现与返回解析清洗完之后单体调用是整个批量任务的调试单元。先把单条跑通再去谈并发这是避免“批量翻车但不知道是单点问题”的基本功。import json from typing import Dict, Any import requests def sentiment_analyze(text: str, access_token: str) - Dict[str, Any]: 调用百度情感倾向分析接口返回结构化结果 url fhttps://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify payload json.dumps({text: text}).encode(utf-8) headers {Content-Type: application/json} query {access_token: access_token} resp requests.post(url, paramsquery, datapayload, headersheaders, timeout15) result resp.json() # 处理业务错误码如文本长度超限等 if error_code in result: raise RuntimeError(fAPI error: {result[error_code]} - {result.get(error_msg)}) items result[items][0] return { sentiment: items[sentiment], # 0负向 1中性 2正向 confidence: items[confidence], positive_prob: items[positive_prob], negative_prob: items[negative_prob], } # 使用示例 token get_access_token(API_KEY, SECRET_KEY) result sentiment_analyze(这个手机电池太差了冬天掉电飞快, token) print(result) # {sentiment: 0, confidence: 0.87, positive_prob: 0.02, negative_prob: 0.98}这里有个容易踩的细节百度情感倾向分析接口的body必须用json.dumps手动序列化用params传text的话中文会被urlencode部分接口会解析失败。timeout15不是随手写的——这个接口在高峰期响应需要8秒左右给足余量但也不建议超过30秒否则批量任务会无限堆积。返回结果里sentiment是三级离散类别positive_prob和negative_prob是模型给出的概率值置信度低的结果我一般会在后续聚合时做降权处理。3.3 批量主流程串行版先跑通再谈效率拿到单条返回结构后批量逻辑就清晰了遍历DataFrame逐条调用把结果写回原表。串行版虽然慢但它是你能最快定位问题的版本。等确认没有字段错误和断言错误之后再替换成后面的并发版本。def batch_sentiment_serial(df: pd.DataFrame, token: str) - pd.DataFrame: 串行批量情感分析每100条打印一次进度 sentiment_list [] total len(df) for idx, row in df.iterrows(): try: r sentiment_analyze(row[clean_text], token) sentiment_list.append(r[sentiment]) except Exception as e: # 单条失败不能炸掉全流程 sentiment_list.append(-1) # -1标记分析失败 if idx % 100 0 and idx 0: print(fprocessed {idx}/{total}) df[sentiment] sentiment_list return df失败处理采用哨兵值-1而不是抛异常这是批量任务的常用策略宁可标记失败样本后续统一补跑也不要让一条脏数据中断整个批次。串行版跑一万条大概要25分钟速度不算快但能让你观察哪些文本触发错误码我一般用它在小样本集上验证清洗流程是否合理。4. 批量场景的效率改造与结果聚合从几小时压缩到几分钟4.1 线程池并发调用与QPS自控串行版确认没问题之后并发改造是提升效率的关键。百度免费版对情感倾向分析的QPS限制通常不高一般在2到10之间并发开太大反而会被限流。我实践下来稳妥的做法是线程池设5个worker每次请求之间保持100毫秒以上的间隔既跑得动又不会触顶。from concurrent.futures import ThreadPoolExecutor, as_completed import time def batch_sentiment_concurrent(df: pd.DataFrame, token: str, max_workers: int 5, qps_limit: float 8) - pd.DataFrame: 带QPS控制的并发批量情感分析 results {} # 控制请求间隔避免超限导致大量110错误 last_request_time {t: 0} lock threading.Lock() def safe_call(idx, text): with lock: elapsed time.time() - last_request_time[t] min_interval 1.0 / qps_limit if elapsed min_interval: time.sleep(min_interval - elapsed) last_request_time[t] time.time() try: r sentiment_analyze(text, token) return idx, r[sentiment] except Exception: return idx, -1 with ThreadPoolExecutor(max_workersmax_workers) as executor: futures [executor.submit(safe_call, idx, row[clean_text]) for idx, row in df.iterrows()] for future in as_completed(futures): idx, sentiment future.result() results[idx] sentiment df[sentiment] df.index.map(lambda i: results.get(i, -1)) return df这里的线程锁做了两件事一是保证全局的请求间隔不低于1.0/qps_limit二是让多个worker安全共享token缓存。限速参数放在调用侧而不是依赖服务端限流好处是失败率明显下降。我实测过一组对比数据同样的五万条评论串行跑约2小时线程池5并发加QPS限制后缩短到18分钟且没有触发一次限流错误码。4.2 增量保存断电断网后不用从头再来批量调用的另一个大坑是任务跑到60%时进程崩了已分析完的结果全丢。解决这个问题有两种常规做法边跑边写文件或者用库表做断点记录。我推荐边跑边写CSV简单且不依赖数据库环境。改造思路是在as_completed的循环里每拿到一个结果就追加写入一行到sentiment_results.csv文件里留有clean_text和sentiment两列。重启任务时用pd.read_csv读取已有的clean_text集合把剩余部分拎出来继续跑。4.3 从情感得分到偏向指标给运营看得懂的聚合分析结果如果不做聚合就是一堆零散的0、1、2没有决策价值。我习惯把情感结果分成三个层次呈现整体分布占比、按时间维度的趋势变化、按话题维度的差异对比。def aggregate_sentiment(df: pd.DataFrame) - pd.DataFrame: 按日期聚合情感偏向指标 df[date] pd.to_datetime(df[created_at]).dt.date grouped df.groupby([date, sentiment]).size().unstack(fill_value0) # 归一化列名避免缺列 for col in [0, 1, 2]: if col not in grouped.columns: grouped[col] 0 grouped[total] grouped[0] grouped[1] grouped[2] grouped[pos_ratio] grouped[2] / grouped[total] grouped[neg_ratio] grouped[0] / grouped[total] # 情感偏向指数正向占比减去负向占比区间[-1,1] grouped[bias_score] grouped[pos_ratio] - grouped[neg_ratio] return groupedbias_score这个指标是我比较推荐的单值偏向指标它把三分类压缩成一维接近-1说明一边倒负面接近1说明普遍正面0附近是争议型内容。与只看负向占比相比它同时考虑了正向反馈能够识别出“又爱又恨”的产品评论区。5. 避坑现场情感分析接口落地最常见的五个问题5.1 文本长度超限导致大量返回错误码现象批量任务跑到一半突然集中报错错误信息提示文本超长。原因百度情感倾向分析接口单条text限制为2048字节中文字符按UTF-8编码每个占3字节也就是说约682个汉字是极限。我早期清洗时保留500字以内没考虑到emoji和标点占字节更多有些含大量表情的文本就超了。解决清洗函数的末尾加上截断逻辑用文本的字节数而不是字符数来控制长度。具体做法是把text.strip()[:500]改成先按字符截断再检查len(text.encode(utf-8))超了继续二分截断直到符合限制。5.2 并发过高触发QPS限流错误码堆成山现象线程池设20个worker之后前两分钟跑得飞快随后大量请求返回错误码处理速度反而降到串行水平。原因免费版接口的QPS配额是个黑匣子短时间内请求过于密集服务端直接拒绝服务。我当时没有在本地做任何限速以为线程越多越好。解决引入我4.1节里写的lock加min_interval控制把QPS限定在配对额度的一半以内。如果对配额不确定先从1并发开始逐步加压每档跑一千条观察错误率超过1%就退回上一档。5.3 token过期不是报token错误而是报文本相关错误现象批量任务凌晨跑批日志里偶尔出现参数格式错误的信息但单条调试时接口完全正常。原因access_token在请求URL的query参数里依赖方在接口端可能优先校验参数格式token过期时给出的错误码是参数错误而不是鉴权错误导致排查方向跑偏。解决把所有异常响应体完整记录到日志文件有一条不落的error_code和error_msg。收到任何非200响应时第一件事是确认token是否仍然有效再去看文本格式。我在这个坑上耗了整整一个下午。5.4 空值和缺失值让DataFrame索引错位现象并发函数返回的结果列表长度和原DataFrame不一致下游聚合时错位严重。原因原始评论里有大量空值清洗函数返回空字符串后被过滤掉一部分行但并发循环用的还是过滤前的索引结果映射时出现gap。解决过滤空值之后务必执行df df.reset_index(dropTrue)让索引重新连续。所有并发函数返回的idx以新索引为准聚合时再用df[clean_text]对齐文本内容不能依赖原CSV里的行号。5.5 接口响应时间不稳定导致超时误判现象单条测试稳定在2秒内返回批量跑到后半段频繁抛出超时异常。原因接口服务端在高负载时段响应会突破10秒客户端超时设置过短直接掐断请求。这不是本身不可用而是网络链路的抖动。解决把timeout从10秒放宽到15秒增加一次失败重试机制最多3次退避时间递增。我在生产代码里用tenacity库的retry装饰器管理重试比手写重试循环干净得多。6. 结果可视化验证与置信度筛选让报告经得起追问情感分析的结果不能只给一张表就交差运营侧一定会追问“这个负向比例是真实的吗”。我的习惯是输出结果前先做两个验证动作。第一个是置信度过滤。接口返回的confidence字段表示模型对分类结果的把握程度我一般会在聚合时加权计算把置信度低于0.5的样本视为不确定样本单独拎出来标注成“待人工复核”不直接计入偏向指数。实现上只是聚合前加一行筛选逻辑df_confident df[df[confidence] 0.5]第二个验证是抽样对比。每批次随机抽100条评论把原始文本、预测情感、人工标注三列并列打印算一个粗粒度的一致率。我在模拟项目X里做过一次抽样模型对短句“笑死”判断为负向讽刺语境但人工阅读时认为这是正向表达这个偏差在涉事话题的聚合中会被放大。从那以后我每次跑批量任务都会强制要求抽样50条人工复核再交付报告置信度阈值也根据这个复核结果动态调整——如果一致率低于80%我就把confidence阈值往上抬宁缺毋滥。这个小习惯帮我避开了很多次“报告结论被当场推翻”的尴尬局面希望也能帮到你。本文还有配套的精品资源点击获取

相关新闻

Sentinel-3 OLCI数据下载、解析与批量预处理全流程实战

Sentinel-3 OLCI数据下载、解析与批量预处理全流程实战

前两周我帮一个做内陆水体遥感的朋友处理了一批 Sentinel-3 影像,他前面折腾了两天,卡在“数据下不下来”和“下下来不知道怎么打开”这两个环节上,最后我也跟着踩了一遍坑,才发现这套数据跟常用的哨兵2号在结构、格式、处理思路上…

2026/10/11 2:46:14 阅读更多 →
Moltbot/Clawdbot双助手架构:从零部署可扩展的AI智能助理系统

Moltbot/Clawdbot双助手架构:从零部署可扩展的AI智能助理系统

1. 方案整体拆解:双助手架构为什么是这个形态直接说结论:2026 年你还在用一个单体聊天机器人跑所谓的“智能助手”,天花板已经到头了。我这次构建的 Moltbot / Clawdbot 部署方案,核心思路是拆成两个角色——Moltbot 作为中枢大脑…

2026/10/11 2:46:14 阅读更多 →
2026年最新6款AI编程工具实测:个人开发者如何用AI独立完成项目

2026年最新6款AI编程工具实测:个人开发者如何用AI独立完成项目

去年底,我接了一个副业项目——帮一家线下工作室做预约管理后台。需求不算复杂:客户能在线选时间、提交预约,管理员能看到排期并导出。甲方预算有限,我一个人全栈扛下,从后端API到前端页面都得自己写。当时正好想深度体…

2026/10/11 2:45:13 阅读更多 →

最新新闻

多语言微服务消息可靠性:幂等设计与重试机制实战

多语言微服务消息可靠性:幂等设计与重试机制实战

晚上十点,我盯着监控面板上那个不断攀升的重复消费指标,用户已经反馈“支付成功但订单状态未更新”,而日志里分明看到回调消息被消费了三次。这不是孤立事件。在多语言微服务架构里,消息重复、消息丢失、消费失败几乎是每个团队都…

2026/10/11 3:25:35 阅读更多 →
微服务拆分实战:从限界上下文到订单模块改造

微服务拆分实战:从限界上下文到订单模块改造

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:25:35 阅读更多 →
Python代码风格统一利器:Black格式化工具落地与避坑指南

Python代码风格统一利器:Black格式化工具落地与避坑指南

Black 这个工具,这几年在 Python 圈子里基本成了“格式化”的代名词。它解决的是一个特别老、特别烦的问题:代码风格。你缩进用几个空格、字符串用单引号还是双引号、一行写多长、函数参数怎么换行……这些问题每个项目都能吵上半天,而且吵完…

2026/10/11 3:25:35 阅读更多 →
【计算机毕业设计选题】基于Hadoop+Spark的乳腺癌数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习

【计算机毕业设计选题】基于Hadoop+Spark的乳腺癌数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习

计算机毕设指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!也可以在主页上或文末下与…

2026/10/11 3:25:35 阅读更多 →
从差评到自研:手把手教你打造低延迟IP-KVM远程管理设备

从差评到自研:手把手教你打造低延迟IP-KVM远程管理设备

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:25:35 阅读更多 →
Doris重复查询优化:基于Redis的结果缓存架构与实战

Doris重复查询优化:基于Redis的结果缓存架构与实战

大多数人说 Doris 查询已经够快了,为什么还要折腾 Redis?这个问题的答案往往不在 Doris 身上,而在“重复查询”这四个字上。我见过太多 BI 看板、定时报表、接口轮询,把同样一条 SQL 在 Doris 上反复执行,一分钟几十次…

2026/10/11 3:24:35 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →