Oracle字符串拆分实战:INSTR、SUBSTR与REGEXP_SUBSTR函数详解
1. 项目概述字符串拆分的核心场景与价值在数据库开发与数据处理中我们经常会遇到一个经典且高频的需求如何将一个包含特定分隔符的字符串字段拆分成多行或多列的数据比如你手头有一张用户表其中有一个字段interests存储着用户爱好数据可能是“篮球,足球,音乐,阅读”这样的逗号分隔字符串。当业务需要统计每个爱好的用户数量或者需要将爱好与其他表进行关联查询时这种存储方式就带来了巨大的不便。直接对这个字段进行LIKE模糊查询不仅效率低下而且无法实现精确的关联和分析。这就是字符串拆分String Splitting要解决的核心问题。它不是一个炫技的功能而是数据清洗、报表生成、接口数据解析等实际工作中绕不开的基础操作。在 Oracle 数据库中虽然没有像其他一些数据库如 SQL Server 的STRING_SPLIT那样提供一个开箱即用的专用拆分函数但它提供了一套强大而灵活的基础字符串函数组合足以应对从简单到复杂的各种拆分场景。其中最核心的“三剑客”便是INSTR、SUBSTR和REGEXP_SUBSTR。掌握它们你就能将一团“糨糊”般的拼接字符串瞬间梳理成清晰规整的表格数据。我处理过太多因为历史设计或外部接口原因导致的这种“逗号分隔值”字段可以说熟练运用这几种方法是每个 Oracle 开发者必备的数据处理技能。接下来我们就深入拆解这几种方法从原理到实战让你彻底搞懂如何根据指定字符拆分字段。2. 核心函数深度解析INSTR、SUBSTR 与 REGEXP_SUBSTR在动手拆分之前我们必须先吃透手中的“工具”。Oracle 的字符串函数非常丰富但用于拆分这三者是基石。理解它们的运作机制和差异是写出高效、准确拆分逻辑的前提。2.1 INSTR定位分隔符的“指南针”INSTR函数的作用是返回一个字符串在另一个字符串中首次或指定第 N 次出现的位置。你可以把它想象成在一个长句子中寻找某个特定单词的位置索引器。它的基本语法是INSTR(string, substring [, start_position [, occurrence]])string被搜索的源字符串。substring要查找的子字符串即我们的分隔符如逗号,。start_position可选开始搜索的位置默认为 1字符串开头。occurrence可选指定要查找第几次出现的子串默认为 1第一次出现。关键点与实战心得INSTR返回的是数字位置。如果找不到子串则返回 0。这个特性在循环拆分时非常有用可以作为循环终止的判断条件。例如INSTR(‘A,B,C’, ‘,’, 1, 2)会返回 3因为在字符串 “A,B,C” 中从第1个字符开始找第2次出现的逗号在位置3“A,”之后。注意位置索引从 1 开始而不是 0。这是 Oracle 字符串函数的一个通用约定务必牢记否则在计算子串起止位置时极易出错。2.2 SUBSTR精准截取的“手术刀”SUBSTR函数用于从字符串中截取一部分。它根据你提供的开始位置和长度像手术刀一样精确地切出想要的片段。它的基本语法是SUBSTR(string, start_position [, length])string源字符串。start_position截取的开始位置。length可选要截取的长度。如果省略则截取从开始位置到字符串末尾的所有字符。关键点与实战心得SUBSTR是执行“切割”动作的核心。拆分的本质就是多次调用SUBSTR每次截取两个分隔符之间的部分。这里有一个极易踩坑的细节当start_position为 0 或负数时Oracle 会将其视为 1。而在拆分逻辑中我们经常需要计算“上一个逗号位置1”作为本次截取的开始如果上一个逗号不存在即第一次截取这个值可能是 0此时SUBSTR会从位置1开始截取这通常符合我们的预期但理解其行为很重要。2.3 REGEXP_SUBSTR正则表达式驱动的“智能切割机”REGEXP_SUBSTR是SUBSTR的超级增强版它使用正则表达式来定义匹配模式从而进行更复杂、更灵活的字符串提取。对于拆分来说它往往能一行代码解决INSTRSUBSTR需要多行循环才能处理的问题。它的基本语法简化版针对拆分场景是REGEXP_SUBSTR(string, pattern [, start_position [, occurrence [, match_parameter [, subexpression]]]])string源字符串。pattern正则表达式模式用于匹配你想要提取的部分。occurrence指定提取第几个匹配项这在拆分中至关重要。关键点与实战心得REGEXP_SUBSTR的强大在于pattern。例如要匹配非逗号的一个或多个字符模式可以写成‘[^,]’。其中[^,]表示“任何不是逗号的字符”表示“一次或多次”。这样它就能依次匹配出 “A”, “B”, “C”。它的occurrence参数让我们可以直接指定“给我第N个匹配项”无需自己写循环去计数极大地简化了代码。但需要注意的是正则表达式的功能强大也意味着开销相对较大在处理超大数据量时需要评估性能。3. 经典拆分方案实战从简单循环到一行搞定理解了工具我们就可以组合它们来构建解决方案。根据不同的场景和复杂度主要有两种经典的实现路径。3.1 方案一INSTR SUBSTR 递归/循环通用基础法这是最经典、最直观的方法尤其适合理解拆分过程的本质。其核心思想是利用INSTR动态找到第N个和第N1个分隔符的位置然后用SUBSTR截取它们之间的部分。我们通过一个示例来逐步拆解。假设有表TAGS数据如下IDTAG_LIST1篮球,足球,音乐2阅读,编程我们希望将TAG_LIST拆分成多行记录。步骤1构建递归查询CONNECT BY骨架在 Oracle 中生成序列数字最方便的方式是使用CONNECT BY子句。我们需要生成一个行号来表示要提取第几个元素。SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL 10 -- 假设最多不会超过10个标签这会产生数字1到10。我们将用它作为occurrence出现次数的参数。步骤2关联数据并计算截取位置将原始表与数字序列关联并为每一行计算关键的位置信息。SELECT t.id, t.tag_list, lv, -- 上一个分隔符的位置如果是第一个则为0 INSTR(t.tag_list, ,, 1, lv - 1) AS prev_pos, -- 当前分隔符的位置如果是最后一个则为0 INSTR(t.tag_list, ,, 1, lv) AS curr_pos, -- 字符串总长度 LENGTH(t.tag_list) AS str_len FROM tags t CROSS JOIN ( SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL 10 ) n WHERE lv (LENGTH(t.tag_list) - LENGTH(REPLACE(t.tag_list, ,, ))) 1这里WHERE子句是关键(LENGTH(str) - LENGTH(REPLACE(str, ,, ))) 1这个公式计算出了字符串中到底有多少个元素逗号数量1。它确保了不会生成多余的空行。步骤3应用SUBSTR完成截取有了prev_pos和curr_pos我们就可以确定每个子串的起止位置。开始位置prev_pos 1。如果prev_pos是0表示第一个元素则开始位置为1。截取长度如果curr_pos 0不是最后一个元素长度为curr_pos - prev_pos - 1如果curr_pos 0是最后一个元素则截取到字符串末尾。将逻辑整合进一个完整的查询SELECT t.id, SUBSTR( t.tag_list, DECODE(INSTR(t.tag_list, ,, 1, n.lv - 1), 0, 1, INSTR(t.tag_list, ,, 1, n.lv - 1) 1), DECODE(INSTR(t.tag_list, ,, 1, n.lv), 0, LENGTH(t.tag_list) 1, INSTR(t.tag_list, ,, 1, n.lv) ) - DECODE(INSTR(t.tag_list, ,, 1, n.lv - 1), 0, 1, INSTR(t.tag_list, ,, 1, n.lv - 1) 1) ) AS single_tag FROM tags t CROSS JOIN ( SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL 20 ) n WHERE n.lv (LENGTH(t.tag_list) - LENGTH(REPLACE(t.tag_list, ,, ))) 1 ORDER BY t.id, n.lv;这个查询看起来复杂但核心就是那三个位置的计算。DECODE函数用于处理边界情况第一个和最后一个元素。实操心得这种方法虽然步骤稍多但优势在于其原理清晰且不依赖于正则表达式在任何版本的 Oracle 中均可使用。它是理解字符串拆分逻辑的绝佳教材。在实际写完后你可以尝试用CASE WHEN替换DECODE逻辑会更易读一些。3.2 方案二REGEXP_SUBSTR CONNECT BY简洁高效法如果你使用的 Oracle 版本支持正则表达式通常是 10g 及以上那么REGEXP_SUBSTR无疑是更优雅的选择。它可以将上述繁琐的位置计算浓缩成一个函数调用。针对同一个TAGS表拆分查询可以写得非常简洁SELECT t.id, REGEXP_SUBSTR(t.tag_list, ‘[^,]’, 1, n.lv) AS single_tag FROM tags t CROSS JOIN ( SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL 20 ) n WHERE REGEXP_SUBSTR(t.tag_list, ‘[^,]’, 1, n.lv) IS NOT NULL ORDER BY t.id, n.lv;逐行解析REGEXP_SUBSTR(t.tag_list, ‘[^,]’, 1, n.lv)这是核心。模式‘[^,]’匹配一个或多个非逗号字符。1表示从字符串第一个字符开始搜索。n.lv表示取第lv个匹配项。CROSS JOIN ... CONNECT BY同样用于生成序列数字lv。WHERE ... IS NOT NULL这是终止条件。当lv超过实际存在的元素个数时REGEXP_SUBSTR会返回NULL从而过滤掉这些多余的行。方案对比与选型建议特性INSTRSUBSTR 方案REGEXP_SUBSTR 方案代码复杂度较高需手动计算位置极低一行核心函数可读性一般逻辑分散很好意图明确兼容性所有 Oracle 版本通常需 10g性能对于简单分隔符通常更快正则引擎有开销大数据量时可能稍慢灵活性固定分隔符处理能力强极强可处理复杂模式如多种分隔符个人经验在大多数现代开发环境中我优先推荐REGEXP_SUBSTR方案。它的代码简洁性带来的维护收益远超过其微小的性能差异。除非是处理海量数据且性能瓶颈确在此处或者环境版本受限否则REGEXP_SUBSTR是首选。4. 高级场景与边界情况处理真实世界的数据从来都不是完美的课本示例。空值、连续分隔符、结尾分隔符、长度不一致等问题层出不穷。一个健壮的拆分方案必须能妥善处理这些边界情况。4.1 处理空元素与连续分隔符假设你的数据是“篮球,,足球,”里面包含了连续逗号和结尾逗号。使用基础的[^,]模式它会匹配非逗号字符序列因此连续逗号之间“什么也没有”的空元素会被忽略。这有时是期望的行为有时却不是。如果需要保留空元素我们需要修改正则表达式模式。可以使用‘([^,]*)(,|$)’这种模式来匹配“零个或多个非逗号字符后跟一个逗号或字符串结束”然后通过子表达式提取第一部分。但更常用的技巧是利用REGEXP_COUNT预先计算元素总数并结合REGEXP_SUBSTR的NULL行为WITH data AS ( SELECT ‘篮球,,足球,’ AS str FROM dual ) SELECT LEVEL AS lv, -- 使用‘.*’匹配任何字符包括空但用‘?’非贪婪匹配并用‘|$’处理结尾 REGEXP_SUBSTR(str, ‘(.*?)(,|$)’, 1, LEVEL, NULL, 1) AS element FROM data CONNECT BY LEVEL REGEXP_COUNT(str, ‘,’) 1;这里模式‘(.*?)(,|$)’是一个非贪婪匹配.*?会匹配尽可能少的字符直到遇到逗号或字符串结束。1作为subexpression参数表示提取第一个括号分组(.*?)的内容。这样就能正确提取出 “篮球”, “”(空), “足球”, “”(空) 四个元素。4.2 处理多种或复杂分隔符当分隔符不是单一的逗号可能是分号、空格、甚至是组合如“,; ”时正则表达式的优势就彻底凸显了。示例拆分“苹果; 橙子,香蕉 葡萄”分隔符为分号、逗号或空格SELECT REGEXP_SUBSTR(‘苹果; 橙子,香蕉 葡萄’, ‘[^;,\s]’, 1, LEVEL) AS fruit FROM dual CONNECT BY REGEXP_SUBSTR(‘苹果; 橙子,香蕉 葡萄’, ‘[^;,\s]’, 1, LEVEL) IS NOT NULL;模式‘[^;,\s]’中的\s代表任何空白字符空格、制表符等。这个模式匹配一个或多个“既不是分号、逗号也不是空白”的字符从而完美拆分。4.3 性能优化与大数据量处理当需要对上百万行数据进行拆分时性能至关重要。以下是一些实测有效的优化技巧限制 CONNECT BY 的层级在生成数字序列的子查询中尽量使用一个贴近实际最大元素数量的上限而不是一个很大的数如CONNECT BY LEVEL 100。这能减少不必要的笛卡尔积生成。可以先通过SELECT MAX(REGEXP_COUNT(tag_list, ‘,’)1) FROM big_table估算出最大值。使用 REGEXP_COUNT 进行精确过滤在WHERE子句中使用REGEXP_COUNT或LENGTH-LENGTH(REPLACE)公式精确过滤避免连接后产生大量NULL行再过滤。这是提升性能最有效的一步。考虑使用 PL/SQL 或临时表对于极其复杂的拆分逻辑或海量数据有时将拆分逻辑写入 PL/SQL 过程利用集合类型如NESTED TABLE或全局临时表进行阶段性处理会比纯 SQL 单条语句更高效、更可控。为源表创建合适的索引如果拆分操作经常基于某个过滤条件如WHERE create_date …确保该条件字段有索引先快速缩小数据范围再进行拆分操作。5. 常见问题排查与实战技巧实录即使理解了原理和方案在实际编码和运行中你依然会遇到各种“坑”。下面是我在多年实践中总结的一些典型问题和解决技巧。5.1 问题一拆分结果出现多余的空行或 NULL 行现象查询结果比预期的元素多多出来的行其single_tag字段为NULL或空字符串。根因与排查CONNECT BY 层级过高数字序列生成的最大值如LEVEL 100远大于实际需要的元素个数。对于源字符串中不存在的lvREGEXP_SUBSTR会返回NULL但如果没有被WHERE子句过滤掉就会产生空行。WHERE 过滤条件不准确使用了错误的公式计算元素数量。例如用LENGTH(tag_list)而不是(LENGTH(tag_list) - LENGTH(REPLACE(tag_list, ‘,’, ‘’))) 1。解决方案 确保WHERE子句能精确匹配实际元素数量。对于REGEXP_SUBSTR方案使用WHERE REGEXP_SUBSTR(…) IS NOT NULL是最稳妥的。对于INSTRSUBSTR方案务必使用那个经典的“逗号数1”公式。5.2 问题二拆分后字符串首尾的空格问题现象拆分出的元素开头或结尾带有空格例如“ 篮球 ”。根因与排查源数据中分隔符前后本身就有空格。例如数据是“篮球, 足球 , 音乐”。解决方案在拆分后使用TRIM()函数去除首尾空格。SELECT TRIM(REGEXP_SUBSTR(tag_list, ‘[^,]’, 1, lv)) AS clean_tag FROM …或者在正则表达式中直接排除空格。但要注意如果元素内部允许有空格如“纽约 尼克斯队”就不能简单排除。-- 匹配非逗号且非空格的字符这会把“纽约 尼克斯”拆成“纽约”和“尼克斯” SELECT REGEXP_SUBSTR(tag_list, ‘[^,\s]’, 1, lv) AS tag FROM …更稳妥的做法是先拆分再对需要清理的字段使用TRIM。5.3 问题三ORA-01489: 字符串连接的结果过长现象在拆分非常长的字符串例如一个包含几千个字符的字段时可能会遇到这个错误。虽然拆分本身不涉及连接但在某些复杂查询或与LISTAGG反向操作时可能触发。排查与解决这个错误通常不是拆分步骤直接导致的而是后续处理的结果。检查是否在拆分后使用了GROUP BY并配合了类似WM_CONCAT或LISTAGG在没有设置ON OVERFLOW子句时的函数。确保对可能超长的聚合结果有处理策略例如使用SUBSTR截断或采用 CLOB 处理方式。5.4 实战技巧将拆分逻辑封装为视图或函数如果一个拆分逻辑需要在多个查询中重复使用将其封装起来是明智的选择。创建视图CREATE OR REPLACE VIEW vw_split_tags AS SELECT t.id, REGEXP_SUBSTR(t.tag_list, ‘[^,]’, 1, n.lv) AS single_tag, n.lv AS tag_order FROM tags t CROSS JOIN (SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL 50) n WHERE REGEXP_SUBSTR(t.tag_list, ‘[^,]’, 1, n.lv) IS NOT NULL;这样业务查询直接SELECT * FROM vw_split_tags即可逻辑清晰且易于维护。创建管道表函数Pipelined Table Function 对于更复杂、需要过程化逻辑处理的拆分例如根据不同的分隔符规则进行拆分可以创建一个返回集合的管道函数。这样可以在 PL/SQL 中实现复杂的拆分算法并以表的形式返回结果兼具灵活性和性能。CREATE TYPE tag_item_type AS OBJECT (id NUMBER, tag VARCHAR2(100)); CREATE TYPE tag_item_table AS TABLE OF tag_item_type; CREATE OR REPLACE FUNCTION split_tags_pipe(p_tag_list VARCHAR2) RETURN tag_item_table PIPELINED IS v_start_pos NUMBER : 1; v_end_pos NUMBER; v_delimiter CHAR(1) : ‘,’; BEGIN IF p_tag_list IS NULL THEN RETURN; END IF; LOOP v_end_pos : INSTR(p_tag_list, v_delimiter, v_start_pos); IF v_end_pos 0 THEN PIPE ROW (tag_item_type(NULL, SUBSTR(p_tag_list, v_start_pos))); EXIT; ELSE PIPE ROW (tag_item_type(NULL, SUBSTR(p_tag_list, v_start_pos, v_end_pos - v_start_pos))); v_start_pos : v_end_pos 1; END IF; END LOOP; RETURN; END; / -- 使用方式 SELECT * FROM TABLE(split_tags_pipe(‘篮球,足球,音乐’));这种方法将拆分逻辑完全黑盒化为调用者提供了最简洁的接口特别适合在复杂的数据处理流程中集成。选择哪种方案取决于你的具体需求是对 SQL 的掌控力还是对封装性和复用性的要求。

相关新闻

Spring Boot 3.2 集成 Claude 3.5 Sonnet 生产环境超时与上下文...

Spring Boot 3.2 集成 Claude 3.5 Sonnet 生产环境超时与上下文...

Spring Boot 3.2 集成 Claude 3.5 Sonnet 生产环境超时与上下文截断问题排查实录问题现象上周二凌晨三点,线上订单智能审核服务突然告警。监控面板显示Claude API调用成功率从99.2%暴跌至67%,P99延迟从320ms飙升到8.7s。错误日志集中出现两类异常&#x…

2026/10/18 17:59:35 阅读更多 →
OLTP与OLAP核心差异解析及StarRocks与TiDB选型实战指南

OLTP与OLAP核心差异解析及StarRocks与TiDB选型实战指南

1. 从“交易”到“分析”:OLTP与OLAP的本质分野在数据库领域,OLTP和OLAP是两个最核心、也最常被混淆的概念。我见过不少项目,初期为了省事,试图用一个数据库系统去包打天下,结果在业务发展到一定阶段后,无论…

2026/10/18 9:48:30 阅读更多 →
O1-preview 推理模型的后端架构适配:从“补全“到“思考“的范式迁移

O1-preview 推理模型的后端架构适配:从“补全“到“思考“的范式迁移

O1-preview 推理模型的后端架构适配:从"补全"到"思考"的范式迁移项目背景上周我们在重构内部数据分析平台的智能问答模块时,发现基于 GPT-4o 的问答链路在处理多步骤推理任务时,P99 延迟飙升至 8.4 秒,且答案…

2026/10/18 18:00:07 阅读更多 →

最新新闻

VLAN划分与配置实战:从广播域到Trunk排障

VLAN划分与配置实战:从广播域到Trunk排障

做了几年网络相关项目,我最大的感觉是:很多听起来不复杂的问题,最后都卡在“VLAN划分与配置”上。办公楼上不了网、会议室网络忽快忽慢、跨楼层访问服务器超时,十有八九都跟广播域没拆干净、标签没配对、trunk没放通有关系。VLAN这…

2026/10/19 3:43:17 阅读更多 →
AI Agent在智能农业监测中的应用:架构、数据流与落地避坑指南

AI Agent在智能农业监测中的应用:架构、数据流与落地避坑指南

AI Agent在智能农业监测中的应用,这两年听起来越来越热,但真正落到地里、能持续跑起来的项目其实不多。我前阵子花了一个多月时间做了一个模拟项目——用Agent作为决策中枢的温室监测系统,从传感器数据接入、数据清洗、Agent推理到设备联动控…

2026/10/19 3:43:16 阅读更多 →
从“临时提示词”到“能力包”:AI Skills 编写实战指南

从“临时提示词”到“能力包”:AI Skills 编写实战指南

有段时间我特别头疼一件事:让 AI 帮忙处理邮件、整理会议记录、生成项目周报,结果今天好用明天翻车,同一个需求换个说法执行,质量就完全不一样。后来我意识到,问题不在模型笨,而在我每次都在"临时教它…

2026/10/19 3:43:16 阅读更多 →
给AI派活,到底该交代什么?一百五十多年前的普鲁士军队,早把答案想明白了

给AI派活,到底该交代什么?一百五十多年前的普鲁士军队,早把答案想明白了

1806年,耶拿—奥尔施泰特战役,等上级命令行事的普鲁士军队被拿破仑击溃。 普军的军官不缺勇敢,士兵不缺训练,输在一个习惯上:等命令。战场形势一变,第一线不敢自己拿主意,要派人回后方请示&…

2026/10/19 3:43:16 阅读更多 →
VMware Ubuntu虚拟机鼠标滚轮不流畅?从驱动到imwheel的完整修复指南

VMware Ubuntu虚拟机鼠标滚轮不流畅?从驱动到imwheel的完整修复指南

用了 VMware 跑 Ubuntu 桌面版当开发环境,时间长了基本都会碰到同一个挠头问题:物理机上的鼠标滚轮丝般顺滑,进到虚拟机里就变成薛定谔的滚轮——有时候滚一格跳整整一屏,有时候连续滚好几下没反应,有时候滚到一半突然…

2026/10/19 3:43:16 阅读更多 →
开箱即用的 diff 级代码审查 CLI 工具设计与实践

开箱即用的 diff 级代码审查 CLI 工具设计与实践

1. 项目概述:一个真正“开箱即用”的代码审查 CLI 工具,不是概念演示,而是每天能塞进你 Git 提交流程里的硬核助手“open-code-review”这个名字乍看平平无奇,但拆开来看,每个词都踩在当下工程效能的痛点上。“open”不…

2026/10/19 3:42:16 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54: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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →