标点恢复(Punctuation Restoration)Python 实战:给无标点文本/ASR 结果自动加标点

很多语音识别(ASR)模型输出的是没有标点的纯文本——一长串字读起来很费劲。标点恢复就是把"。"",""?"这些标点自动补回去,让转写结果可读。FunASR 的 ct-punc 是一个开源的标点恢复模型,中英文都支持,3 行 Python 就能给任意文本加标点。下面全是真实实测输出。

3 行代码做标点恢复(实测输出)

pip install funasr

from funasr import AutoModel

model = AutoModel(model="ct-punc", disable_update=True)
print(model.generate(input="我们都是木头人不许说话不许动")[0]["text"])
# 我们都是木头人,不许说话,不许动。

输入是没有标点的连续文本,输出自动补上了逗号和句号。

中英文真实示例

输入(无标点)输出(ct-punc 加标点)
我们都是木头人不许说话不许动我们都是木头人,不许说话,不许动。
今天天气怎么样我想出去走走你要一起吗今天天气怎么样,我想出去走走,你要一起吗?
the meeting is at 3 pm please bring your laptop and the reportThe meeting is at 3 pm, please bring your laptop and the report.

可以看到:中文补「,。?」(问句还会自动判断用问号);英文补逗号、句号,还会把句首字母大写。同一个模型双语通吃。

最常见用法:给 ASR 结果加标点

标点恢复最大的用处是清洗语音识别的输出。FunASR 的 ASR 模型可以一行挂载 ct-punc,识别完直接带标点:

from funasr import AutoModel

# ASR + VAD + 标点,一次完成(以中文 Paraformer 为例)
model = AutoModel(model="paraformer-zh", vad_model="fsmn-vad", punc_model="ct-punc")
result = model.generate(input="audio.wav")
print(result[0]["text"])   # 输出已带标点

当然你也可以像最上面那样单独用 ct-punc 处理任意文本——不限于语音,任何无标点文本(老字幕、OCR 结果、聊天记录)都能加标点。

为什么用 ct-punc

ct-punc(FunASR)
语言中文 + 英文(单模型双语)
用法3 行 Python,输入文本即可;也能一行挂到 ASR 上
标点,。?等;英文还做句首大写
许可证开源,可商用

想要完整的语音流程,看 中文语音识别实战VAD/去静音说话人分离;不确定选哪个 ASR 模型看 模型选型指南(默认推荐旗舰 Fun-ASR-Nano)。

FunASR 全家桶开源(MIT)——标点恢复、ASR、VAD、说话人、情感、LLM-ASR(旗舰 Fun-ASR-Nano),拿来即用。觉得有用就点个 Star 👇

⭐ Star FunASR

也欢迎 Star:SenseVoice · Fun-ASR · FunClip

相关文章