标点恢复(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 report | The 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:SenseVoice · Fun-ASR · FunClip
相关文章
- FunASR vs Whisper 实测对比
- SenseVoice 部署指南
- Fun-ASR-Nano 使用指南
- 说话人分离:谁在何时说话
- 情感与语种检测
- 实时流式语音识别
- 转写超长音频(1小时一次搞定)
- 命令行转写(文本/JSON/SRT)
- 自托管 OpenAI Whisper API 替代
- 自动生成字幕(SRT / VTT)
- Python 语音转文字教程
- FunASR 跑进 llama.cpp(whisper.cpp 替代)
- FunASR vs faster-whisper(中文/粤语)
- 轻量语音识别(CPU 250MB)
- 自托管替代 Deepgram/AssemblyAI
- 选哪个 FunASR 模型
- 粤语语音识别(SenseVoice 原生粤语)
- 日语语音识别(SenseVoice 转写+标点+情感)
- Python 语音活动检测(VAD)
- 自托管替代 Google/AWS/Azure 云语音 API
- 中文语音识别(普通话)实战
- 语音识别带时间戳(字级)