Matlab实现吉布斯采样LDA主题模型:从原理到工程实践
简介吉布斯采样是一种经典MCMC方法适用于高维概率分布采样与LDA主题模型结合常被用于文本主题推断。这份开源代码面向机器学习、文本挖掘研究者和相关开发者给出了一套MATLAB下的GibbsLDA实现框架包含主流程、单词更新、数据预处理与结果解析等模块可直接用于小型语料的主题建模实验。资源共15个文件以C头文件和源文件为主.h/.cpp另附Makefile、CMakeLists编译配置、README说明及使用手册代码结构清晰、便于二次开发。整体仅55KB轻量易用目前已有604人学习下载。阅读源码可深入理解吉布斯采样的迭代更新细节以及LDA中主题分布和词分布的计算过程对从事文本挖掘和NLP的开发者有直接参考价值。1. 项目定位一份能直接跑起来的吉布斯LDA主题模型如果你的文本挖掘任务卡在想用LDA却没有趁手的实现这份代码正好补上这一环。它用纯Matlab脚本实现了吉布斯采样方式的LDA主题模型训练不需要额外工具箱从语料读取、参数初始化到采样迭代、主题词输出整条管线在一个系统开源工程里闭环。它不追求分布式大语料性能但上千篇文档量级的主题建模和教学实验非常合适你既能把它当黑盒跑出主题词表也能逐行对照采样公式。对还在用Matlab做实验、被Python环境折腾半天的开发者来说这是成本最低的一条路。2. 目录与输入约定语料如何组织才能喂进采样器先给整体定位这是一个分层清晰的Matlab工程不做花哨封装所有脚本平铺在根目录数据集中在data目录。它的价值在于采样循环写得很直白每一行都能和公式对上。下面按目录、数据格式、加载逻辑三块讲。2.1 目录结构脚本分层与职责划分工程文件布局大致是这样GibbsLDA/ ├── main.m # 主入口设置超参数并触发整个训练流程 ├── load_corpus.m # 读取语料文本做格式校验返回文档词ID数组 ├── gibbs_sampler.m # 吉布斯采样主循环训练的核心 ├── compute_phi.m # 采样结束后由词-主题计数计算主题-词分布 ├── compute_theta.m # 由文档-主题计数计算文档-主题分布 ├── show_topics.m # 打印每个主题概率最高的N个词便于人工验收 ├── data/ │ ├── train.txt # 训练语料每行一篇文档词ID用空格分隔 │ └── vocab.txt # 词表每行一个词行号即该词的ID └── results/ # 输出的phi.mat、theta.mat保存位置文件职责划分上main.m只做参数装配和调用编排不写具体算法load_corpus.m只负责把磁盘文件变成内存里的cell数组真正费时间的采样循环全部在gibbs_sampler.m里compute_phi和compute_theta是采样结束后的收尾动作把计数矩阵归一化成可解释的概率分布。这样分层的好处是改造时可以单点替换想换数据格式只动load_corpus想改成块吉布斯采样只动gibbs_sampler其他文件完全不用碰。我在实际使用中通常还会加一个preprocess.m放在data下专门负责把原始文本转成train.txt和vocab.txt这份代码把这一步留给用户自己处理所以语料准备是第一个要注意的环节。2.2 输入数据格式为什么用整数ID而不是原始字符串很多第一次上手的人会卡在数据结构上。这个工程默认的语料格式是文档-词ID的稀疏表示train.txt每一行是一篇文档行内多个词的ID用空格分隔每个ID是不小于1的整数vocab.txt每行一个词行号就是这个词的ID两者靠行号对齐。选整数ID而不是直接存字符串原因很实际Matlab处理字符串数组远远慢于数值矩阵而吉布斯采样的核心是nw(w,k)这种按下标累加的操作整数ID可以直接当矩阵索引用一个赋值语句就完成计数更新。如果语料是英文单词或中文正确做法是先在外面做一遍分词和词典映射把所有词转成从1开始的连续ID再落成train.txt。这里有个常见误用是直接把单词当ID存进train.txtstr2num解析会得到空矩阵加载函数会直接报非法词ID。我在改造时一般会保留这个整数ID约定因为后续十几次采样迭代都要靠这个下标加速。另外词表构建阶段最容易忽略的是停用词和低频词的过滤。不做停用词过滤出来的主题词表会被的、了、是这类词占满不过滤低频词词表会膨胀到几万nw矩阵随之变稀疏采样时很多词只有一两次计数噪声很大。常见做法是对词频设上下限比如去掉出现次数小于5的词再去掉一个预设的高频停用词表最后对剩余词重新编号。2.3 加载函数的实现与边界检查load_corpus.m的实现很简短但边界处理值得说function [docs, W] load_corpus(filename) fid fopen(filename, r); C textscan(fid, %s, Delimiter, \n); fclose(fid); lines C{1}; docs cell(length(lines), 1); for d 1:length(lines) line strtrim(lines{d}); if isempty(line) docs{d} []; continue; end nums str2num(line); if isempty(nums) || any(nums 1) || any(nums ~ fix(nums)) error(第 %d 行包含非法词ID请检查语料格式, d); end docs{d} nums; end W 0; for d 1:length(docs) if ~isempty(docs{d}) W max(W, max(docs{d})); end end end逻辑说明逐行读取后用strtrim去掉首尾空白空行直接存成空向量跳过str2num把空格分隔的文本字符串转成数值行向量接着做三道边界检查——解析结果为空、ID小于1、ID不是整数任何一个不满足就直接抛错把问题挡在训练之前。W由遍历所有文档取最大ID得到自动推导词表大小省掉一个容易对不齐的词表长度参数。参数说明filename是train.txt的路径返回docs是D×1的cell数组每个元素是一个文档的词ID行向量W是自动推导出的词表大小后面给nw矩阵开空间时会用到。采样器拿到docs和W这两个量就齐了文档数D由length(docs)得到不需要额外传。加载完成后还有个细节是词表和ID的映射关系。vocab.txt的读取更简单用textscan按行读成字符串cell行号就是ID只在最后show_topics打印词表时用。如果训练阶段内存紧张可以完全不读vocab.txt等结果输出阶段再加载。3. 采样核心拆解从计数矩阵到条件概率的代码路径LDA的吉布斯采样不优化任何目标函数它的思路是反复按条件概率重新给每个词分配主题让整个分配逐步逼近真实的后验分布。这章把代码路径完整走一遍。3.1 四个计数矩阵采样状态的唯一载体整个训练过程维护的隐状态就是每个词当前被分到哪个主题再把它浓缩成可增量更新的计数。核心是四个矩阵矩阵尺寸含义nwW×Knw(w,k)词w被分配到主题k的次数ndD×Knd(d,k)文档d中被分配到主题k的词数nwsum1×K主题k的总词数等于sum(nw(:,k))ndsumD×1文档d的单词总数等于sum(nd(d,:))nw和nd是主计数nwsum和ndsum是派生的行/列和。保留这两个冗余量的原因很直接采样时计算条件概率的分母需要当前主题总词数常数如果每次都去对nw做sum一趟迭代要额外扫描K×W次而维护nwsum只需要在增删计数时同步加减O(1)搞定。3.2 初始化随机分配主题并同步计数采样开始前要给每个词一个随机的主题分配并立刻把这些分配反映到四个矩阵里。常见写法如下function [Z, nw, nd, nwsum, ndsum] init_assign(docs, W, K) D length(docs); nw zeros(W, K); nd zeros(D, K); nwsum zeros(1, K); ndsum zeros(D, 1); Z cell(D, 1); for d 1:D len length(docs{d}); Z{d} zeros(1, len); for i 1:len w docs{d}(i); k randi(K); Z{d}(i) k; nw(w, k) nw(w, k) 1; nd(d, k) nd(d, k) 1; nwsum(k) nwsum(k) 1; end ndsum(d) len; end end逻辑说明Z是一个D×1的cellZ{d}(i)记录第d篇文档第i个词当前被分配的主题。初始化阶段对每个词随机取一个1到K之间的主题同时更新nw、nd、nwsumndsum直接等于文档长度因为文档里每个词都有且只有一个主题分配。参数说明docs和W来自load_corpusK是外部传入的主题数。这里有个容易踩的点如果K明显大于文档平均长度很多比如100篇短文档配50个主题初始随机分配会让很多主题几乎分不到词后续采样也比较难转回来所以K不能脱离语料规模乱填后文参数实验会展开。3.3 采样迭代先减后增的三段式主循环每次都遍历一遍所有文档的所有词对当前词做一次重新采样。单个词的处理是固定三段式先减去旧主题贡献再算条件概率最后按概率采样新主题并加回计数。function [Z, nw, nd, nwsum, ndsum] run_sampler(docs, W, K, alpha, beta, maxIter) [Z, nw, nd, nwsum, ndsum] init_assign(docs, W, K); for iter 1:maxIter if mod(iter, 100) 0 fprintf(Iteration %d / %d ...\n, iter, maxIter); end for d 1:length(docs) ids docs{d}; for i 1:length(ids) w ids(i); oldk Z{d}(i); % 第一段先减去当前词对旧主题的贡献 nw(w, oldk) nw(w, oldk) - 1; nd(d, oldk) nd(d, oldk) - 1; nwsum(oldk) nwsum(oldk) - 1; ndsum(d) ndsum(d) - 1; % 第二段计算该词属于每个主题的条件概率 p (nw(w, :) beta) ./ (nwsum W * beta) ... .* (nd(d, :) alpha); p p / sum(p); % 第三段按概率采样一个新主题 r rand; acc 0; newk K; for k 1:K acc acc p(k); if acc r newk k; break; end end Z{d}(i) newk; % 加回新主题的贡献 nw(w, newk) nw(w, newk) 1; nd(d, newk) nd(d, newk) 1; nwsum(newk) nwsum(newk) 1; ndsum(d) ndsum(d) 1; end end end end逻辑说明第一段把当前词从旧主题的计数里摘掉这样剩下的计数都是不包含当前词的状态对应条件概率公式里的下标−i。第二段算每个主题的条件概率p的分子是词-主题平滑项乘以文档-主题平滑项分母是主题总词数加W×beta乘完后归一化。第三段用随机数按累积概率抽样把新主题写回Z再更新四个计数。参数说明alpha是文档-主题Dirichlet超参数值越大每篇文档的主题分布越均匀beta是主题-词Dirichlet超参数值越大每个主题的词分布越均匀。两者都直接影响采样概率的形状经验区间在参数实验章单独讲。这里p的计算就是LDA吉布斯采样公式的实现每个分量都能对应到论文里的表达式。3.4 从计数到分布phi和theta的计算采样收敛后nw和nd还只是计数需要归一化成概率分布才能输出。compute_phi和compute_theta完成这一步function phi compute_phi(nw, nwsum, W, beta) K size(nw, 2); phi (nw beta) ./ (repmat(nwsum, W, 1) W * beta); end逻辑说明这里用到了拉普拉斯平滑加beta是为了避免零概率分母是每个主题的总词数加所有词的平滑项保证每一列的和为1。完整的phi是W×Kphi(w,k)表示词w在主题k中的生成概率。theta同理形状是D×K由nd和ndsum按同样的方式归一化得到。这个分布就是最终产物。show_topics按列排序取出每列概率最高的词配合vocab.txt打印出来主题质量一眼可见。4. 避坑与排查五个常见问题与处理训练这个项目的过程中有几个问题出现频率极高按实际使用频次排个序每一条都给出现象、原因和解决思路。4.1 索引越界train和vocab没有对齐现象训练跑了一小半报错索引超出数组边界。原因最常见的是语料里的某个词ID超过了加载函数算出的W通常来自train.txt和vocab.txt不对齐——比如删过vocab里的词但没同步改train或者词ID从0开始编号而代码要求不小于1。解决先检查vocab.txt行数与train.txt里最大ID是否一致。我一般会在load_corpus的返回里多带一个maxID用于断言然后在init_assign前比对如果max_ID大于W直接定位到具体是哪个文档哪一行超了。4.2 所有主题长得一模一样现象输出的10个主题每个主题的高频词几乎相同。原因两个常见来源。一是alpha设得太大比如直接设10文档-主题分布趋向均匀采样器没有动力把主题分开二是迭代次数太少只跑了50轮马尔可夫链还没收敛到分离状态。解决alpha按50/K的经验值设置K20时alpha2.5同时把maxIter提到1000以上并且取后一半迭代的结果做统计前一半作为burn-in丢弃。4.3 主题词表被停用词占领现象每个主题前10个词都是的、了、在、是这类虚词真正有区分度的词排在后面。原因词表构建环节没有过滤停用词和高频噪声词。这不是采样器的问题是预处理的问题。解决建vocab时用一个停用词表把高频虚词过滤掉同时对词频设下限。我自己的习惯是低频阈值取5高频阈值取语料词数的2%两侧一起过滤后再重新编号。4.4 每次跑结果都不一样现象同一份语料、同样的参数两次运行输出的主题词排序差异明显。原因随机的初始化和采样过程没有固定随机种子。这不是bug吉布斯采样本身带随机性但它会让实验不可复现。解决在main.m开头加rng(42)固定随机数生成器。做完这步同样的语料和参数每次训练结果完全一致复现问题、调参对比都方便很多。4.5 训练完没法预测新文档现象想用训练好的模型给一篇新文档分配主题发现代码里根本没有预测函数。原因这个工程定位是训练器它产出的phi矩阵是主题-词分布但没有把新文档跑进采样链的推理模块。这不算缺陷是范围边界。解决要预测新文档常规做法是复用phi固定它不变把新文档的词按相同词典映射成ID然后用固定phi做有限迭代采样只更新这篇新文档的nd计数nw和nwsum不动最后对nd归一化得到文档-主题分布。这个改造不复杂但它是推理的一部分训练代码本身不包含。5. 参数实验与结果解读把主题词表从随机调到可解释这一章聊怎么调参数。LDA最让人不适的地方是参数一多就容易变成玄学但有几个经验区间是经过大量实验验证的。5.1 主题数K困惑度和人工判断的平衡K是最影响结果形态的参数。K太小会把不同话题的词挤进一个主题K太大则一个真实话题被拆成好几个近似主题。困惑度可以辅助选K但Matlab版代码通常没实现困惑度计算我一般会手工加一个function ppl perplexity(docs, phi, theta, K) % 累加每个词的log概率再按总词数求指数 logLik 0; totalWords 0; for d 1:length(docs) for i 1:length(docs{d}) w docs{d}(i); p 0; for k 1:K p p theta(d, k) * phi(w, k); end logLik logLik - log(p 1e-10); totalWords totalWords 1; end end ppl exp(logLik / totalWords); end逻辑说明遍历所有词把该词在每个主题下的生成概率用theta加权求和得到这个词的边际概率再累加负对数最后按总词数取指数。perplexity越低说明模型的生成能力越好。实际操作是K从5到50每隔5跑一次选拐点处对应的K。但注意困惑度在大语料上会和人工判断打架所以最终K还是看主题词表是否可解释。5.2 超参数经验区间alpha直接设一个数并不合适因为LDA的惯例是alpha50/K随K缩放。beta则通常取0.01到0.1之间的小值语料越大beta可以越小。参数经验区间说明K550按语料主题数估计宁少勿多alpha50/K 附近让文档主题分布有稀疏性beta0.010.1控制主题词分布的平滑程度maxIter5002000至少要看到计数矩阵变化平缓迭代次数方面1000轮是多数语料的常用档位对短文本可以降到500。判断是否收敛的一个便宜办法是每隔100轮记录一次nwsum的变化量连续两轮变化小于阈值就提前停止。注意这套经验区间只适用于单机千篇级别的语料。语料规模差一个数量级时beta的合理值通常要往小调alpha受K的影响比受语料规模的影响更大。5.3 一组可照抄的小规模实验我用一个600篇新闻短文本语料做过对比三种参数组合的效果差异非常直观。组合AK10, alpha5, beta0.1, iter200结果主题混叠严重两个主题都围绕体育比赛区分度差。组合BK10, alpha2.5, beta0.01, iter500主题边界清晰出现足球俱乐部金融市场科技产品等可命名主题。组合CK30, alpha1.67, beta0.01, iter500部分主题变成细分子话题但另一些主题几乎是空壳核心词概率很平均。从A到B改进的关键是beta调小让主题词分布更尖同时burn-in多跑300轮。从B到C则是K过大造成的过拟合——主题多了真实话题被拆散这组对比可以作为你调参时的参照先固定K单独扫beta确定beta后再动K最后看alpha。短文本场景下还有一个容易被忽略的细节文档词数少nd矩阵极其稀疏采样时文档-主题项的影响偏弱alpha可以适当调小来放大主题间的区分度长文档则相反alpha稍大反而能让每篇文档内部的主题更集中。6. 二次开发思路接入中文语料与模型持久化的两个小改造如果要把这份代码真正用在自己的中文项目里有两个改造性价比最高。6.1 中文语料接入的三步走train.txt只接受整数ID所以前置要做三步先用分词器把每篇中文文档切成词序列再建一个从词到ID的词典注意保留停用词过滤和低频词过滤最后把分词结果按词典映射成ID行写入train.txt。这三步可以落成一个preprocess.m脚本输出train.txt和vocab.txt之后训练流程完全不用改。6.2 模型持久化与热启动训练结束后phi和theta在内存里但下回启动Matlab就丢了。给它加两行保存逻辑save(fullfile(results, phi.mat), phi); save(fullfile(results, theta.mat), theta); save(fullfile(results, vocab.mat), vocab);再次使用的时候用load直接读进来配合show_topics就能做主题词可视化不需要重新训练几百轮。如果你的场景是长期增量更新语料还可以把save的内容作为下一轮训练的初始化先load旧计数再在gibbs_sampler里接着迭代。我在改造时会给run_sampler加一个可选参数init_state传入已有的nw和nd矩阵跳过init_assign这样新增文档时固定旧语料的主题分配不动只对新文档做随机初始化再全体跑几轮采样完成增量更新。这种热启动在短文本下能省掉不少收敛时间。我自己的血泪教训是第一次在没固定随机种子、没过滤停用词的情况下直接跑长文本结果迭代到800轮主题还是很散排查半天才意识到是alpha设成10导致所有主题均匀化。从那以后我每次新语料进管线都强制走一遍同样的检查固定rng、过滤停用词、确认alpha按50/K取值。希望这些步骤也能帮你避开同样的坑。本文还有配套的精品资源点击获取

相关新闻

工位级IO与总线规划手册:点位分级、分区布线与周期实测

工位级IO与总线规划手册:点位分级、分区布线与周期实测

工位级IO与总线规划的核心,是在图纸阶段就把"每个工位要接多少点、这些点怎么分布、走哪张网"定下来。定得好,现场是照着图接线、逐点复测;定得不好,现场就是边接边改、边改边猜,最后靠试错收尾。本篇按工程…

2026/10/17 10:52:11 阅读更多 →
SNMP测试工具实战指南:从命令行操作到批量验证

SNMP测试工具实战指南:从命令行操作到批量验证

简介:这是面向网络管理员与运维人员的SNMP测试工具包,用于对路由器、交换机、服务器等设备的SNMP代理进行连通性验证、MIB读写、Trap收发与故障排查,覆盖SNMPv1、v2c、v3等版本的安全与功能差异,可直接解决日常网络监控和配置校验…

2026/10/17 10:52:11 阅读更多 →
JavaWeb图书馆管理系统实战:Servlet+JSP+MySQL三层架构全解析

JavaWeb图书馆管理系统实战:Servlet+JSP+MySQL三层架构全解析

简介:基于JavaWeb构建的图书馆管理系统项目源码,适合Java Web初学者、在校学生以及毕业设计开发者参考与二次学习。系统覆盖图书借阅、归还、查询、用户管理等核心业务模块,采用Servlet与JSP处理请求和页面展示,结合JDBC完成数据库…

2026/10/17 10:52:11 阅读更多 →

最新新闻

ChatGPT Linux 原生桌面端发布 + GPT-5.6 Luna 免费文本不限条:开发者该看什么

ChatGPT Linux 原生桌面端发布 + GPT-5.6 Luna 免费文本不限条:开发者该看什么

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

2026/10/17 11:48:34 阅读更多 →
Kafka集群自动负载均衡:Cruise Control原理与生产实践

Kafka集群自动负载均衡:Cruise Control原理与生产实践

1. 为什么Kafka运维团队总在凌晨三点被告警叫醒?上周五凌晨两点四十七分,某公司消息平台值班群弹出第7条红色告警:“topic-warehouse-events 分区延迟突破阈值,P99消费延迟达42秒”。值班的A同学一边灌下第三杯冷掉的美式&#xf…

2026/10/17 11:48:34 阅读更多 →
提升AI模型跨领域迁移学习表现的关键策略与实战洞察

提升AI模型跨领域迁移学习表现的关键策略与实战洞察

直接把项目标题摆在桌面:“提升AI模型在跨领域迁移学习任务中的表现”。这个题目看着简单,但真正做过几次跨领域任务的人都知道,里面坑多到能把你埋了。迁移学习听起来就是“拿别人训练好的模型改一改”,可真做起来,从…

2026/10/17 11:48:34 阅读更多 →
MFC滤波器实战:滑动平均、中值、巴特沃斯三种算法对比与避坑指南

MFC滤波器实战:滑动平均、中值、巴特沃斯三种算法对比与避坑指南

简介:本资源面向具备C与Windows开发基础、希望学习图像与信号滤波实现的开发者,基于MFC框架分别实现平均值滤波、中值滤波和惯性滤波三种方法,可用于图像去噪、趋势平滑等场景的入门实践与课程参考。压缩包共49个文件,约3.5MB&…

2026/10/17 11:48:34 阅读更多 →
混合型AI智能体管理平台:编排、治理与可观测实践

混合型AI智能体管理平台:编排、治理与可观测实践

我们团队前阵子做了一件很多人都在犹豫要不要做的事:把散落在各业务线的十几个AI智能体,统一收编到一个自研的“混合型 AI 智能体 管理平台”里。之所以用“混合型”这个词,是因为平台里既有纯粹基于规则引擎的自动化流程,也有基于…

2026/10/17 11:48:34 阅读更多 →
FPGA新手必学:IP核调用与计数器工程实践

FPGA新手必学:IP核调用与计数器工程实践

1. 为什么新手一上来就该学IP核——不是写代码,而是“搭电路”刚接触FPGA的开发者,常被一句“FPGA是硬件编程”带进误区:以为得从Verilog里一行行敲出触发器、进位链、状态机才算入门。我带过十几期FPGA实训班,发现80%的初学者卡在…

2026/10/17 11:47:34 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →