ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

字符串处理——f-string、切片与正则,清洗文本的第一把刀

字符串处理——f-string、切片与正则,清洗文本的第一把刀 个人主页 for_ever_love__ 欢迎各位大佬莅临其他栏目: 我想学python了 其他栏目: iOS项目总结大全 其他栏目: iOS UI 文章目录字符串处理——f-string、切片与正则清洗文本的第一把刀一、字符串是什么一段不可变的字符序列二、f-string最干净的格式化方式三、切片像切黄瓜一样切字符串四、常用方法清洗文本的几把快刀五、正则批量提取与替换的瑞士军刀六、编码字符串与字节的桥梁七、常见坑与注意事项八、本篇小结字符串处理——f-string、切片与正则清洗文本的第一把刀上一篇讲了变量与数据类型这一篇专门攻克字符串。为什么把它单独拎出来因为大模型的世界里文本就是一切你给模型的 prompt 是字符串模型吐出来的回答是字符串训练语料是成千上万字符串连分词本质也是把字符串切成小块再变成数字。可以说字符串处理是做大模型开发的第一道 preprocessing 工序。这一篇把 f-string、切片、常用方法和正则一次讲透。一、字符串是什么一段不可变的字符序列Python 的字符串用单引号、双引号或三引号包裹s1hellos2你好s3这是一段 可以换行的多行文本三引号特别适合写多行 prompt 模板——后面做 RAG、Agent 时经常要把一整段指令模板原样保留。字符串是不可变的你不能修改其中某个字符任何修改其实都生成了新字符串。这个特性后面会反复遇到。还有原始字符串r...里面的反斜杠不当作转义pathrC:\Users\name\data# 反斜杠原样保留不转义写正则时几乎必用原始字符串否则一个\d会被 Python 先转义掉。二、f-string最干净的格式化方式把变量塞进字符串有三种老法子但只推荐 f-stringname大模型score0.923# 老写法不推荐old模型%s得分%.3f%(name,score)old2模型{}得分{:.3f}.format(name,score)# f-string推荐newf模型{name}得分{score:.3f}print(new)# 模型大模型得分0.923f-string 用f...大括号{}里直接写变量或表达式还能用:.3f这类格式说明符控制小数位。大模型的输出经常要拼成固定格式比如问题{q}\n答案{a}f-string 是最顺手的选择。三、切片像切黄瓜一样切字符串字符串是序列支持切片s[start:end:step]左闭右开下标从 0 开始textHello, 大模型print(text[0:5])# Helloprint(text[7:])# 大模型从第7个到末尾print(text[::-1])# 型模大 ,olleH整个反转# 取前 10 个字符避免超长文本炸掉模型上下文truncatedtext[:10]切片和大模型的序列概念是一脉相承的后面你学 Transformer会发现一句话被切成 token 序列取第 1 到第 K 个 token、反转、截断用的就是同一套切片思维。这里先建立直觉。四、常用方法清洗文本的几把快刀raw 【重要】请删除 这段 多余的空格和符号 \nprint(raw.strip())# 去掉首尾空白print(raw.lower())# 转小写归一化便于匹配print(raw.replace(,))# 替换掉感叹号print(raw.split())# 按空白切词[【重要】请删除, 这段, 多余的空格和符号]print(raw.startswith( 【))# True这些方法组合使用就能把脏文本洗干净。比如做数据清洗时常先strip()再去重再lower()。五、正则批量提取与替换的瑞士军刀当规则稍微复杂提取邮箱、URL、只留中文、去掉所有标点字符串方法就不够用了上re模块importre messy联系方式aliceexample.com官网 https://ai.com电话 13800000000。备注#测试## 1. 提取所有邮箱emailsre.findall(r[a-zA-Z0-9_.][a-zA-Z0-9.],messy)print(emails)# [aliceexample.com]# 2. 只保留中文字符清洗噪声chinese_onlyre.sub(r[^\u4e00-\u9fa5],,messy)print(chinese_only)# 联系方式官网电话备注测试# 3. 把多个空白压缩成一个cleanre.sub(r\s, ,messy)print(clean)re.findall(pattern, text)返回所有匹配适合提取re.sub(pattern, repl, text)替换适合清洗\s匹配空白\u4e00-\u9fa5是中文 Unicode 区间。这正是大模型语料清洗的核心动作原始网页/文档充满 HTML 标签、广告、乱码用正则批量剔除才能得到干净的训练文本。后面学 tokenizer把字符串变 token id之前这步少不了。六、编码字符串与字节的桥梁字符串在内存里是 Unicode但要存盘或网络传输得变成字节这一步叫编码text大模型开发btext.encode(utf-8)# 变成字节b\xe5\xa4\xa7...print(len(b))# 18每个汉字约 3 字节backb.decode(utf-8)# 再解码回字符串print(back)# 大模型开发encode把字符串 → 字节decode反过来。读文件/接口数据时常见UnicodeDecodeError多半是编码对不上中文几乎都用utf-8。和大模型的关系tokenizer 做的事本质上比这更进一层——它把字符串按子词BPE/WordPiece切成片段再映射成整数 id。你现在理解的字符串 ↔ 字节 ↔ 数字正是 tokenizer 把文本变模型能吃的数字的思想地基。七、常见坑与注意事项坑现象解决办法字符串不可变s[0] x报 TypeError用切片/替换生成新字符串用大量拼接循环里s x很慢用list收集后.join()忘记原始字符串正则里\d被转义用r...包裹正则正则贪婪匹配a.*b吞掉中间所有内容用非贪婪a.*?b编码不一致读文件报 UnicodeDecodeError指定encodingutf-8两个重点拼接性能陷阱字符串不可变每次都生成新对象。在循环里拼几千次会非常慢。正确做法是用列表收集片段最后.join(parts)一次性合并。正则贪婪 vs 非贪婪默认.*是贪婪的会尽可能多吃字符。要少吃就在后面加?变成.*?。比如从 HTML 里提取标签内容几乎都用非贪婪。八、本篇小结这一篇我们掌握了大模型文本处理的第一把刀字符串是不可变的字符序列三引号写多行模板、原始字符串r...写正则。f-string是最干净的格式化方式拼 prompt 首选。切片s[start:end:step]用于截断、反转——和后面 token 序列的思维一致。strip/lower/replace/split等方法快速清洗re模块做复杂提取与替换。encode/decode连接字符串与字节是 tokenizer 思想的前奏。下一篇进入容器类型全家桶——list、tuple、dict、set 与推导式。你马上会看到模型的 batch 数据是 list配置是 dict去重用 set而推导式能一行写出高效转换。字符串讲完我们离能处理真实数据又近了一步。本篇是《大模型开发从 0 到 1》专栏第 3 篇。专栏文章按「分类专栏」归类顺序学习体验最佳。
返回列表