Python:string 模块在词频统计任务中的应用
在词频统计任务中,string 模块最重要的作用,是提供 string.punctuation、string.whitespace、string.ascii_letters、string.digits 等字符常量,用于构造文本清洗与筛选规则。在英文词频统计中,string.punctuation 是最常用的字符集合之一,通常与 translate() 联合使用,用于快速删除标点。string 模块
在文本分析、日志处理、搜索系统以及自然语言处理(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() 等方法配合使用。虽然它本身不负责词频统计,但却是构建清洗流程的重要辅助工具。

“点赞有美意,赞赏是鼓励”
更多推荐



所有评论(0)