解析 (Parsing)
按照语法规则对文本数据进行分析,将其转换为结构化数据的处理过程。是 HTML、JSON、CSV、正则表达式等所有文本格式处理的基础技术。
解析 (parse,语法分析) 是将以字符串形式给出的文本数据转换为程序可处理的结构化数据的过程。浏览器将 HTML 字符串转换为 DOM 树、JSON.parse() 将 JSON 字符串转换为对象、将 CSV 文件分解为行和列 - 这些都是解析的具体实例。
解析的基本流程分为两个阶段。第一阶段是词法分析 (lexical analysis),将字符串分割为 token (有意义的最小单位)。以 HTML 为例,会将其分为"<p>"、"文本"、"</p>"等标签和文本。第二阶段是语法分析 (syntactic analysis),验证 token 序列是否符合语法规则,并构建树形结构 (解析树)。
中文文本的解析有其特殊难度。英文单词之间有空格分隔,词的边界清晰明确;而中文没有空格分词。"南京市长江大桥"可以分为"南京市/长江大桥"或"南京/市长/江大桥",正确的分词取决于上下文语境。解决这一问题需要借助分词工具 (如 jieba、HanLP、THULAC 等),它们利用词典和统计模型来推断最合理的分词方案。这与日语的形态素分析 (MeCab 等) 面临类似的挑战。
解析错误有时与字符数相关。JSON 字符串字面量中包含未转义的换行符会导致解析错误。CSV 中如果值包含逗号但未用双引号括起来,会导致字段边界误判。HTML 中如果 < 或 & 未经转义,会被误认为标签开始,导致解析结构崩溃。
从性能角度看,解析是计算成本较高的操作。对巨大的 JSON 文件 (数十 MB) 使用 JSON.parse() 一次性解析,会阻塞主线程导致 UI 冻结。使用流式解析器 (streaming parser) 可以边读取数据边逐步解析,同时控制内存使用量。
字符计数工具的内部也大量使用解析技术。从输入文本中去除 HTML 标签、识别 Markdown 语法元素、检测 URL 和电子邮件地址 - 这些都是解析的应用。准确的字符计数,必须建立在正确解析文本结构的基础之上。