语音转写稿、古籍扫描件的识别结果、抓取时丢失标点的网页正文,常常是一整段没有句读的连续汉字。它们能被词频工具统计,却进不了任何以句子为单位的分析:情感按句判定、共词按句开窗、句长按句计算,都要先知道一句话在哪里结束。文本结构还原(Punctuation Restoration)解决的正是这一步:在不改动任何一个字的前提下,把连续汉字切成带标点的句子。
TATOOLS 的【文本结构还原器】把这条链路做成一次任务:上传一份 TXT,得到一张带序号与字数的句表、一份可直接下载的整理文本,以及平均句长和短中长分布。本教程讲清它的研究对象与分析单位、标点还原的形式化定义与评价方式、TATOOLS 的处理流水线、一条可手算的核对准则、两个参数各自改变什么,以及报告怎样读。
01
句子是分析单位
文本结构还原的研究对象是缺少句读的连续文本,分析单位是句子。传统训诂学把断句当作读书的第一课,《礼记·学记》所说的【离经辨志】,郑玄注为断句绝也。今天的文本分析同样如此:多数以句为单位的方法,在没有句界的材料上无法运行。
| 后续分析 | 依赖句界的方式 |
|---|---|
| 句级情感分析 | 每句一个倾向判定,句界决定判定对象 |
| 共词与共现网络 | 常以句为共现窗口,句界决定哪些词算同现 |
| 句长与文体计量 | 平均句长、句长方差都以句为分母 |
| 中文分词 | 标点是分词的硬边界,无标点长串更容易切错 |
| 抽样与引用 | 论文引用、访谈编码都以句或句群为最小引文 |
句子在这里按句末标点定义:以句号、问号、感叹号或省略号结束的一段文字算一句,逗号、顿号、分号只划分句内停顿。TATOOLS 报告中的【输出句数】【平均句长】和逐句列表都采用这一口径。
02
标点还原的形式化定义
设一段连续文本经分词后得到词序列 w,其中第 i 个词记为 w_i,共 n 个词。标点还原为每个词位 i 预测一个标签 y_i,标签取自标点集合 L,其中 ∅ 表示该词后面不加标点。输出文本由词与标签交错拼接而成:
w = (w_1, w_2, …, w_n)
L = {∅, 逗号, 句号, 问号, 感叹号, 顿号, 分号, …}
输出 = w_1 y_1 w_2 y_2 … w_n y_n
目标 = argmax_y P(y | w)
这一定义带着两条硬约束:词序列 w 原样保留,只在词与词之间插入标点。用编辑距离的语言说,从输入到输出只允许插入操作,不允许替换和删除。文献中把它建模为序列标注问题,早期用条件随机场,此后用带注意力的双向循环网络与预训练语言模型;标签集合与标点规范则沿用各语言的国家标准,中文为 GB/T 15834—2011《标点符号用法》。
以一个 15 词的序列为例:
w = 今天 天气 很 好 我们 去 公园 散步 吧 那里 有 很多 花 开 了
y = ∅ ∅ ∅ 逗号 ∅ ∅ ∅ ∅ 句号 ∅ ∅ ∅ ∅ ∅ 句号
输出 = 今天天气很好,我们去公园散步吧。那里有很多花开了。
15 个词位中 12 个标 ∅,3 个标了标点,其中 2 个句末标点把序列切成两句。同一段话由不同人加标点,句读位置会有差异,但词序列相同,这正是约束保证的。
评价标点还原的通行做法是按标点类型分别计算精确率、召回率与 F1。设某类标点在参考答案中出现 R 次,系统预测 P 次,两者位置一致 C 次,则精确率为 C/P,召回率为 C/R。仍用上例:若系统在【好】后面标了句号而不是逗号,其余两处句号正确,则句号的精确率为 2/3、召回率为 2/2,逗号的召回率为 0。这套指标要求有人工标注的参考答案,适合方法研究;日常使用时,后文的字符守恒准则是更直接的核对手段。
TATOOLS 把上述约束落实为处理规则:分词后的词序列交给语言模型,模型只允许在词间插入标点、划分句界,不得调换词序,也不得增删词语。它返回的是句子列表,而不是改写后的段落。
03
从词序列到句子:TATOOLS 的流水线
TATOOLS 的【文本结构还原器】把一份 TXT 变成句表,经过四步。
分词。全文经通用中文分词得到词序列;用户在【自定义词典】中给出的词条先载入分词器,使专名和术语作为整体进入序列。换行与多余空白在这一步去掉,原文的段落划分不再保留。
还原。词序列连同前述约束交给语言模型,模型在词间补入句号、逗号、问号、感叹号、顿号、分号等标点并划分句界,按句返回。
分块与合并。超过固定词数的长文按固定词数切块,每块单独还原;后一块开头带上前一块末尾的少量词作为衔接上下文,合并时去掉因衔接而重复出现的短句,按块的先后顺序拼接句子列表。
统计。对全部输出句计算句数、平均句长和短中长三档计数,生成句表与两份下载文件。
第三步决定了一个值得知道的位置效应:一句话恰好跨在两块的边界上时,它可能被切成两句。衔接上下文缓解这一点,但长文的每个块边界都值得抽查。
材料中已有的标点会作为词序列的一部分一并交给模型,模型的任务仍是补入缺少的标点。已经带标点、只需修正错标漏标的材料,应交给 TATOOLS 的【标点纠正】,【与标点纠正的分工】一节说明两者的分工。
04
字符守恒:一条可手算的核对准则
由于只允许插入标点,输入与输出之间存在一条守恒关系:把输出中的标点和空白全部去掉,得到的字符串应与去掉空白后的输入逐字相同。
strip(输出) == strip(输入)
strip:删除全部标点符号与空白字符
这条准则不需要参考答案,任何人都能在下载的整理文本上执行。用形式化定义一节的例子核对:输出【今天天气很好,我们去公园散步吧。那里有很多花开了。】去掉 3 个标点后是 22 个汉字,与输入的 22 个汉字逐字相同,守恒成立。
它能发现两类问题。一是完整性:某个块未能还原时不会贡献句子,输出会比输入少一段字符,守恒立即失败,差异所在就是缺失的位置。二是改写:若输出出现了输入没有的字,说明该处没有遵守只插入的约束,需要以原文为准。两种情况都可以通过缩短材料、分次提交或调整词典后重新运行来处理。
TATOOLS 的整理文本以文件名行开头,其后每行一句,文件采用 Windows 记事本可直接打开的编码;完整结果另存为一份 JSON,包含每句文本、句数与句长汇总,便于用脚本执行这条核对。
05
句长偏好改变什么
【句长偏好】由【最短句长】与【最长句长】两个滑块组成,前者在 5 至 50 字之间取值,后者在 50 至 200 字之间取值,默认为 5 字与 100 字。它们作为软约束交给模型:明显超过最长值的句子,优先在语义完整的逗号或分号处拆成多句;明显不足最短值的短句,在语义连贯时与前后句合并。拆与合都只改动标点,不改动词序,也不增删词语。只有最短值小于最长值时这组偏好才生效。
以一个 42 字、中间有一处逗号的长句为例:把【最长句长】设为 30 字时,模型会在逗号处断开,把它改写成两句各约 21 字的句子;设为 100 字时它保持一句。同一份材料在不同句长偏好下得到的句数与平均句长都不同,比较两次任务时要保持这组设置一致。
平均句长(Mean Sentence Length)是文体计量中最常用的单位长度指标,定义为全部句子的字符数之和除以句数:
MSL = Σ len(s_i) / N
len:句子的字符数,含汉字、标点、数字与字母
N:输出句数
形式化定义一节例子的两句分别为 16 字与 9 字,MSL = 25 / 2 = 12.5 字。TATOOLS 报告在此基础上把句子分为三档:不足 10 字为短句,10 至 29 字为中句,30 字及以上为长句。例子中一句短句、一句中句。这是便于观察分布的粗分档,句法复杂度研究仍应使用以子句、T 单位为基础的指标。
06
自定义词典改变什么
【自定义词典】改变的是交给模型的词单元划分,而不是输出的字符。词典一行一个词,也可以写成【词 词频 词性】的空格分隔格式;逗号、顿号、分号或换行分隔均可。搜狗细胞词库的 SCEL 文件可先用 TATOOLS 的【搜狗输入法词库 SCEL 转 TXT 字典工具】转成文本再导入。
作用机制是这样的:分词器默认可能把【乡村振兴】切成【乡村】【振兴】两个词,模型看到的是两个可以在中间加标点的位置;加入词典后它成为一个词,词内不再存在候选断点。对人名、机构名、专业术语密集的材料,词典把这些整体交给模型,减少在专名中间断句的机会。守恒准则在有无词典时同样成立,词典不会让输出多出或少掉任何一个字。
07
报告怎样读
TATOOLS 报告从上到下依次是结论卡、逐句结果、方法说明与下一步建议。
【这份结果说明了什么】:源文件名、输出句数、平均句长、短中长三档的条数与占比、前两条样例句,以及报告页展示范围。结论卡按输出句数与平均句长给出分档标签。
【逐句结果】:每行一个序号、一句文本和这句的字数徽章。报告页收录前 100 条,每页 50 条翻页浏览。
【方法说明 / 数据口径】:折叠区,记录流水线与句长统计口径。
【下一步建议】:通往【文本清洗】【词频统计】【情感分析】的入口。
| 报告数字 | 统计对象 | 分母或口径 |
|---|---|---|
| 输出句数 | 全部输出句 | 以句末标点划分,与原文行数无关 |
| 平均句长 | 每句字符数的均值 | 分母为输出句数;字符含标点、数字与字母 |
| 短句、中句、长句 | 各档句子条数 | 阈值为 10 字与 30 字;占比的分母为输出句数 |
| 报告展示条数 | 报告页收录的句子 | 前 100 条;全量在下载文件中 |
| 句表中的字数徽章 | 单句字符数 | 与平均句长同一口径 |
输出句数与原文的行数、段落数没有对应关系:原文的换行在分词时已经去掉,句数完全由句末标点决定。句长统计以输出句为准,一份材料在不同句长偏好下会得到不同的平均句长,这一点在【句长偏好改变什么】一节已经说明。
下载文件有两份。整理文本以文件名行开头、每行一句,可直接作为后续任务的输入;完整结果 JSON 保存全部句子、句数与句长汇总,供脚本处理与守恒核对。
08
与标点纠正的分工
TATOOLS 有两件处理标点的工具,它们的输入假设不同。
| 工具 | 输入假设 | 保留什么 | 改变什么 |
|---|---|---|---|
| 文本结构还原器 | 材料缺少标点,句界未知 | 全部字与词序 | 补入标点,划分句界 |
| 标点纠正 | 材料已有标点,句界基本正确 | 原有断句结构 | 修正错用、重复与缺失的标点 |
语音转写稿、古籍识别结果、丢失标点的抓取文本用【文本结构还原器】;排版错乱、中英文标点混用、句末漏标的正常文稿用【标点纠正】。已经带完整标点的材料再经结构还原,原有标点会与补入的标点一同进入输出,此时应改用【标点纠正】。
09
适用材料与研究设计
| 材料 | 提交前的准备 | 还原后能做什么 |
|---|---|---|
| 访谈或会议的语音转写稿 | 删除时间戳与说话人标记以外的噪声,保留发言顺序 | 句级情感、按句编码、引文抽取 |
| 古籍或旧报刊的识别文本 | 修正明显的识别错字,术语与人名放入词典 | 按句检索、句长与文体计量 |
| 丢失标点的网页正文 | 去掉导航与页脚,保留正文 | 词频、共词网络、主题模型 |
| 合并后的短评论与弹幕 | 每条评论一行,不做拼接 | 句级情感、高频句式统计 |
TATOOLS 一次任务处理一份 TXT,单文件不超过 10 MB。材料越接近连续正文,句界判断越稳定;多条彼此无关的短句拼成一行时,模型只能按局部语义断开,这类材料保持一行一条更合适。需要比较两次任务的句数或平均句长时,保持句长偏好与词典一致,并各自执行一次守恒核对。
10
小结
文本结构还原以句子为分析单位,把连续汉字切成带标点的句子,服务于一切以句为单位的分析。
形式上它是词序列上的标注问题,标签取自标点集合,硬约束是词序不变、只插入不增删。
TATOOLS 的流水线是分词、还原、分块合并、统计四步,输出句表与两份下载文件。
字符守恒准则不需要参考答案,去掉标点与空白后输出应与输入逐字相同,可发现缺失与改写。
句长偏好是软约束,直接改变句数与平均句长;自定义词典改变词单元划分,不改变任何字。
报告中的句数、平均句长与三档计数都以输出句为对象,分母是输出句数。
缺少标点用文本结构还原器,已有标点需要修正用标点纠正。
整理后的文本可直接交给 TATOOLS 的【文本清洗】去除噪声,再进入【词频统计】或按句进行【情感分析】。
11
资料来源
GB/T 15834—2011《标点符号用法》,中华人民共和国国家标准,2011 年发布
END
