在文本分析、日志处理、搜索系统以及自然语言处理(Natural Language Processing,NLP)中,词频统计(frequency counting)通常不仅依赖字符串方法和字典结构,也经常需要借助标准库中的一些辅助常量与工具。

Python 的 string 模块虽然不像 re、collections 那样直接承担“统计”任务,但它提供了一组与字符分类、字符集合、模板替换相关的工具,尤其适合用于:

• 构造文本清洗规则

• 统一字符处理范围

• 快速构造标点符号处理规则

• 辅助英文文本的基础预处理

一、string 模块概述

string 是 Python 的标准库模块之一,主要提供:

• 一组常用字符常量

• 一个格式化辅助类 Formatter

• 一个模板字符串类 Template

在词频统计任务中,最有价值的内容主要集中在字符常量部分。

导入方式:

import string

常见用法示例:

import string
print(string.punctuation)print(string.ascii_lowercase)

输出:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~abcdefghijklmnopqrstuvwxyz

二、常用字符常量

词频统计前,常需要先判断“哪些字符应保留,哪些字符应删除”。

string 模块提供的字符常量,正好可以作为这类规则的基础材料。

string.punctuation

表示常见 ASCII 标点字符组成的字符串。

典型内容为:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

说明:string.punctuation 包含的是 ASCII 标点,适合用于英文文本清洗。不包含中文标点。

示例 1:删除英文标点

import string
text = "Hello, world! Python is great."table = str.maketrans("", "", string.punctuation)clean_text = text.translate(table)
print(clean_text)

输出:

Hello world Python is great

说明:

在英文词频统计中,string.punctuation 是最常用的字符集合之一,通常与 translate() 联合使用,用于快速删除标点。

示例 2:删除英文标点和指定的中文标点

text = "人工智能,正在改变世界。机器学习、深度学习迅速发展!"table = str.maketrans("", "", string.punctuation + ",。!?、")print(text.translate(table))

输出:

人工智能正在改变世界机器学习深度学习迅速发展

string.whitespace

表示所有 ASCII 空白字符组成的字符串。

通常包含:

' \t\n\r\x0b\x0c'

其中包括:

• 空格

• 制表符 \t

• 换行符 \n

• 回车符 \r

• 垂直制表符 \x0b

• 换页符 \x0c

示例:

print(repr(string.whitespace))# ' \t\n\r\x0b\x0c'

说明:

在词频统计中,string.whitespace 常用于:

• 判断某些字符是否属于空白字符

• 构造清洗规则

• 与 text.strip()、text.split() 等方法配合使用

不过要注意,实际做文本切分时,通常直接使用 text.split() 往往更简洁,因为 text.split() 在 sep=None 时会自动按任意连续空白字符进行切分。

string.ascii_lowercase

表示小写英文字母。

内容为:

abcdefghijklmnopqrstuvwxyz

示例:

print(string.ascii_lowercase)# abcdefghijklmnopqrstuvwxyz

说明:

可用于构造“仅保留英文小写字母”的筛选逻辑,也可用于字符映射、字母表检查等任务。

string.ascii_uppercase

表示大写英文字母。

内容为:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

说明:

在日志分析、代码文本处理或缩写识别中,有时需要区分大小写字母范围。

string.ascii_letters

表示所有 ASCII 英文字母,即小写字母与大写字母的组合。

内容为:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

示例:保留英文字母和空格

text = "Python 3.15 is great!"result = "".join(ch for ch in text if ch in string.ascii_letters + " ")print(result)# Python  is great

说明:

该常量适合用于英文文本的基础过滤,但要注意它只包含 ASCII 字母,不包含重音字符、希腊字母、汉字等 Unicode 字符。

string.digits

表示十进制数字字符。

内容为:

0123456789

示例:

print(string.digits)# 0123456789

说明:

在文本清洗中,常用于

• 删除数字

• 判断字符是否属于数字范围

• 构造“字母 + 数字”白名单

string.hexdigits

表示十六进制数字字符。

内容通常为:

0123456789abcdefABCDEF

说明:

这个常量在普通词频统计中并不常用,但在日志分析、十六进制文本处理、程序输出分析中可能有用。

string.octdigits

表示八进制数字字符。

内容为:

01234567

说明:

在一般文本词频统计中使用较少,更多见于特定格式解析。

string.printable

表示一组常见 ASCII 字符的组合,包括数字、字母、标点以及部分空白字符。即:

digits + ascii_letters + punctuation + whitespace

说明:

在需要过滤控制字符、判断字符是否属于“可打印范围”时,可以作为辅助集合使用。

示例:

text = "Hello\nWorld\t!"result = "".join(ch for ch in text if ch in string.printable)
print(repr(result))# 'Hello\nWorld\t!'

要注意 string.printable 中包含空白字符,因此它并不等于“可见字符集合”。

三、在词频统计中的典型应用

string 模块在词频统计中最常见的用途,不是单独使用,而是与字符串方法、字典统计、列表推导式联合使用。

1、删除英文标点

这是 string 模块最典型、最常见的应用场景。

import string
text = "Hello, world! Python, Java, and C++."table = str.maketrans("", "", string.punctuation)clean_text = text.translate(table)
print(clean_text)

输出:

Hello world Python Java and C

说明:

这种方法适合基础英文文本清洗。

但要注意:像 C++ 这样的词项,在删除标点后会变成 C。这说明“删除标点”虽然方便,但也可能破坏某些具有特殊符号的术语。

2、构造字符白名单

有时不是“删除某些字符”,而是“只保留某些字符”。

例如:只保留字母、数字和空格。

import string
text = "Python 3.15 is great! #AI"allowed = string.ascii_letters + string.digits + " "result = "".join(ch for ch in text if ch in allowed)
print(result)

输出:

Python 315 is great AI

说明:

这种方式适合构造简单的白名单过滤规则。

不过它本质上是逐字符判断,在文本很大时未必是最高效方案;若规则更复杂,通常会转向 re 模块。

3、判断字符类别

在逐字符扫描文本时,string 模块提供的字符常量可作为分类依据。

示例:统计文本中字母和数字字符的数量

import string
text = "Python 3.15"
letter_count = 0digit_count = 0
for ch in text:    if ch in string.ascii_letters:        letter_count += 1    elif ch in string.digits:        digit_count += 1
print(letter_count)print(digit_count)

输出:

63

说明:

这种做法更适合教学展示或简单文本分析。

若只是判断某个完整字符串是否由字母或数字组成,通常直接用字符串方法 isalpha()、isdigit()、isalnum() 更自然。

4、与 split()、lower() 配合构造基础词频流程

示例:英文基础词频统计

import string
text = """Python is powerful. Python is easy to learn.Many developers use Python for data analysis."""
text = text.lower()
table = str.maketrans("", "", string.punctuation)text = text.translate(table)
words = text.split()
freq = {}
for w in words:    freq[w] = freq.get(w, 0) + 1
print(freq)

输出:

{'python': 3, 'is': 2, 'powerful': 1, 'easy': 1, 'to': 1, 'learn': 1, 'many': 1, 'developers': 1, 'use': 1, 'for': 1, 'data': 1, 'analysis': 1}

四、string 模块其它相关对象简介

除了字符常量外,string 模块中还有两个对象值得简单了解。

string.Template

用于基于占位符的字符串替换。

导入方式:

from string import Template

基本形式:

Template("$name likes $lang")

示例:

from string import Template
tpl = Template("$word appears $count times")print(tpl.substitute(word="python", count=3))

输出:

python appears 3 times

说明:

在词频统计中,string.Template 一般不参与统计本身,但可用于生成统计结果报告或文本输出模板。

string.Formatter

这是 Python 格式化系统底层的一个辅助类。

一般语法:

string.Formatter()

说明:

在普通词频统计任务中,string.Formatter 很少直接使用。通常更常见的是:

• str.format()

• f-string

因此,在词频统计学习阶段,只需知道它的存在即可,此处不再展开。

五、综合示例:英文文本的基础清洗与词频统计

下面给出一个较完整的英文词频统计示例,用于展示 string 模块在实际流程中的位置。

import string
text = """Python is powerful, flexible, and easy to learn.Python is widely used in data analysis, web development, and AI."""
# 1. 统一小写text = text.lower()
# 2. 删除英文标点table = str.maketrans("", "", string.punctuation)text = text.translate(table)
# 3. 切分为词words = text.split()
# 4. 去除简单停用词stopwords = {"is", "and", "to", "in"}
filtered_words = [w for w in words if w not in stopwords]
# 5. 统计词频freq = {}
for w in filtered_words:    freq[w] = freq.get(w, 0) + 1
# 6. 按频次降序输出for word, count in sorted(freq.items(), key=lambda item: item[1], reverse=True):    print(word, count)

说明:

在这个流程中,string 模块承担的核心任务主要是提供 string.punctuation,为 translate() 提供清洗依据。

也就是说,它本身不做“统计”,但它为“统计前的文本整理”提供了非常方便的基础工具。

📘 小结

在词频统计任务中,string 模块最重要的作用,是提供 string.punctuation、string.whitespace、string.ascii_letters、string.digits 等字符常量,用于构造文本清洗与筛选规则。它尤其适合英文文本的基础预处理,常与 translate()、split()、lower() 等方法配合使用。虽然它本身不负责词频统计,但却是构建清洗流程的重要辅助工具。

图片

“点赞有美意,赞赏是鼓励”

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐