悦省yueser.com

← 全部指南

怎么去掉文本里的标点?哪些会删、哪些不会

做词频统计、生成标签、比较两段文字是否只差标点,先把标点清掉往往更省事。但「标点」不是一个统一集合,删哪些、留哪些,结果差别很大。

打开工具:去除标点

什么时候需要先清标点

统计词频之前,如果 dog 和 dog. 被算成两个词,结果就没法看。把标点去掉,同一个词才能合并计数。做标签、关键词、索引时也一样,带标点的条目会分裂成多个变体,导入系统后很难再合并。

还有一种用法是比较:两段文字看起来只差标点,想知道内容是否完全一致。去掉标点后逐行对比,比人眼在句子里找差异可靠得多,尤其在几十行的稿子里,人很容易看漏一个逗号或一个句号。

实际会删掉哪些,哪些保留

删除范围是一份固定清单:英文标点里包括引号、括号、逗号、句号、冒号、问号、叹号、斜杠、下划线等,中文标点包括顿号、句号、分号、冒号、问号、叹号、省略号、破折号、弯引号、圆括号和方头括号。字母、数字和空格保留。

三个例外值得记住:连字符不在清单里,well-known 会原样保留;全角逗号不在清单里,中文句子里的逗号会留下来;日文的直角引号「」、书名号《》和全角百分号、美元符同样会保留。删除时不会补空格,所以逗号两侧没有空格的地方会粘连。

局限与更彻底的做法

清单是固定的,不能自己增删;emoji、数学符号、全角字母都不在处理范围内,中文标点的覆盖也不完整。所以它适合当清洗的第一步,不适合当唯一一步,后面还要人工抽查一遍。

需要更彻底时,可以按 Unicode 类别删除:Python 里 unicodedata.category 返回以 P 开头的字符都是标点,按这个规则过滤能覆盖全角半角和各国标点。也可以用一条自定义正则替换掉所有非字母数字字符,代价是连字符、撇号这些有意义的符号也会一起丢掉。

常见问题

中文逗号为什么没被删掉?

因为全角逗号不在删除清单里。工具删除的是英文标点和一组指定的中文标点,全角逗号、日文直角引号、书名号都不在其中。需要一并删掉时,先手动替换成半角逗号再处理一遍。

删除后英文单词粘在一起怎么办?

因为删除标点时不会自动补空格,逗号两侧没有空格就会出现 Hello,world 变成 Helloworld。处理前先把标点替换成空格再删除,或者删除后用正则把词与词之间补上空格。

删除标点会改变句子意思吗?

会。问号、叹号、引号本身承载语气和边界,删掉之后句子可能变得含糊,引用的范围也不再清楚。用于分析可以,用于发布请保留原文,处理结果只作为中间稿。

相关工具:去除标点