Python NLP 从入门到实战.lower() 函数的正确用法与文本预处理全攻略1. 背景与核心概念1.1 为什么 NLP 需要 .lower()在做自然语言处理Natural Language ProcessingNLP任务时我们面对的第一道工序通常不是训练模型也不是加载词向量而是文本清洗。而文本清洗中最高频、最基础、也最容易被忽视的一个操作就是lower()——把字符串中的所有大写字母转换为小写字母。先来看一个非常直观的例子。假如我们要统计一段英文新闻中每个单词出现的次数text Python is a programming language. PYTHON is also popular in NLP. words text.split() print(words)输出结果[Python, is, a, programming, language., PYTHON, is, also, popular, in, NLP.]这里出现了两个问题Python和PYTHON本来指的是同一个词但因为大小写不同会被当成两个不同的词条NLP.和language.末尾的句点也会干扰分词结果。也就是说如果不做大小写归一化词频统计、关键词抽取、语义相似度计算等下游任务都会出现偏差。lower()函数要解决的问题就是大小写归一化Case Normalization。它把文本统一成小写形式让“Python”“PYTHON”“python”在后续处理中被识别为同一个 Token。这个过程在英文 NLP 项目中属于标准预处理步骤几乎所有主流 NLP 管道里都能看到它的身影。1.2 .lower() 与 NLP 的关系从专业角度定义str.lower()是 Python 字符串对象自带的一个实例方法它返回一个新的字符串其中的所有 Unicode 大写字符都被转换为对应的小写字符。原始字符串本身并不会被修改因为 Python 的字符串是不可变对象。在 NLP 预处理流程中lower()通常作为 Pipeline 的第一个环节出现。典型流程如下原始文本 - 大小写归一化(lower) - 去噪(去除URL/符号) - 分词 - 去停用词 - 词干提取/词形还原 - 向量化 - 模型输入对于英文文本lower()能有效缩小词表规模。例如“The”“THE”“the”三种形式统一为“the”词表大小下降模型训练参数减少训练效率也会相应提升。对于中文 NLP大小写问题主要体现在英文缩写词、数字、品牌名等场景比如“iPhone”“APPLE”“AI”等词汇的处理同样需要结合lower()做归一化。1.3 本文内容范围本文将围绕.lower()函数在 Python NLP 场景中的使用展开内容包括lower()函数的基本语法、返回值、底层行为在词频统计、文本匹配、搜索、新闻处理、情感分析中的完整实战与upper()、casefold()、capitalize()、title()的对比中英文混合文本、非英文字符、特殊场景下的注意事项高频报错和排查清单工程落地时的最佳实践建议。无论你是刚接触 NLP 的新手还是已经在做文本分析的开发者本文都提供了一套可以直接复用的思路和代码。2. 环境准备与版本说明2.1 运行环境本文所有示例基于以下环境版本需要根据你的项目实际情况调整采用常见稳定环境演示操作系统Windows 10 / macOS / Linux 均可Python 版本3.8 及以上推荐 3.9开发工具VS Code、PyCharm 或命令行第三方库jieba中文分词、nltk英文 NLP 工具包、pandas数据处理、scikit-learn文本向量化非必需但实战部分会用到。版本验证命令python --version pip --version如果你是第一次安装 Python可以到 Python 官网下载对应操作系统的安装包。安装过程中务必勾选“Add Python to PATH”否则命令行中无法直接执行python命令。2.2 安装第三方依赖后续实战中需要使用的中文分词和停用词处理库可以用 pip 安装pip install jieba pip install nltk pip install pandas pip install scikit-learn如果你使用的是国内网络环境可以临时指定镜像源加速pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple2.3 验证基础能力打开 Python 交互式环境输入以下命令验证环境是否正常 Hello NLP.lower() hello nlp如果能看到小写输出说明环境没问题。接下来我们开始系统学习lower()的用法。3. 核心语法与函数行为拆解3.1 基本语法lower()的语法非常简单str.lower()它不接受任何额外参数返回一个新字符串。调用方式如下text I LOVE Python NLP result text.lower() print(result) # i love python nlp这里需要强调一个新手容易犯的错误lower()不会修改原字符串而是返回一个新的字符串。如果你不接收返回值原字符串不会发生任何变化text I LOVE Python NLP text.lower() print(text) # 输出仍是 I LOVE Python NLP正确的做法是重新赋值text I LOVE Python NLP text text.lower() print(text) # i love python nlp3.2 lower() 与 upper()、casefold() 的对比学习lower()时最好顺便把相关的大小写转换方法梳理清楚。它们的区别如下方法作用典型场景示例lower()全部转小写文本归一化、搜索匹配Hello.lower()-helloupper()全部转大写强调性输出、枚举标准化Hello.upper()-HELLOcasefold()更激进的转小写德语、土耳其语等特殊字符归一化Straße.casefold()-strassecapitalize()首字母大写其余小写标题规范化hello WORLD.capitalize()-Hello worldtitle()每个单词首字母大写标题生成hello world.title()-Hello Worldswapcase()大小写互换数据清洗特殊场景Hello.swapcase()-hELLOcasefold()是比lower()更彻底的归一化方案。对于德语中的ßlower()不会做任何转换而casefold()会将其转换为ss。在处理多语言文本时如果希望做更激进的匹配可以考虑casefold()但在英文 NLP 任务中lower()通常已经足够。3.3 lower() 的返回值和不可变性Python 字符串是不可变对象Immutable这意味着所有字符串方法都不会修改原字符串而是返回一个新字符串。lower()同样遵循这一规则。s Data Science s_lower s.lower() print(s) # Data Science print(s_lower) # data science print(id(s)) # 原对象内存地址 print(id(s_lower)) # 新对象内存地址运行结果中两个对象的内存地址不同说明lower()创建了一个全新的字符串对象。3.4 对 Unicodde 字符的支持Python 的字符串基于 Unicode 编码因此lower()对 Unicode 字符同样有效。比如希腊字母、拉丁字母扩展、带重音符号的字符只要存在小写形式都会被转换print(Ä.lower()) # ä print(İ.lower()) # i̇ print(Α.lower()) # α这个特性在 NLP 的国际语料处理中非常有用。例如处理法语语料时ÉCOLE.lower()会得到école从而与école匹配。3.5 常见误区误区一认为lower()是原地修改。这是最大的误区前面已经用代码验证过了。所有需要保留小写结果的场景都必须用返回值覆盖原变量或存入新变量。误区二认为lower()对所有语言都安全。土耳其语中的问题就是一个经典反例。土耳其语有带点的İ和不带点的I它们在大小写映射上和英语并不一致。I.lower()在英语中返回i但土耳其语环境中却应返回ı。Python 的lower()采用 Unicode 默认映射普通场景没问题但如果你正在做方言非常敏感的检索任务需要额外设计大小写映射逻辑。误区三在中文分词之前用lower()处理整段中文文本。中文文本本身没有大小写lower()处理中文不会报错但它对中文分词结果没有任何帮助。真正需要处理的是中英混合文本中的英文部分这一点在后面的实战中会展示。4. NLP 实战一基于 .lower() 的英文新闻文本预处理4.1 需求分析假设我们要处理一批英文新闻标题任务是统计每个单词的出现频率并找出新闻中最受关注的“关键词”。原始新闻标题中存在各种大小写形式例如“NLP”“Nlp”“nlp”如果不做归一化这些会被统计成三个不同的词显然不符合实际需求。需求拆解读入多条新闻标题对每条文本进行大小写归一化去除标点符号和数字噪声分词去除停用词统计词频并输出 Top N 关键词。4.2 创建项目结构为了方便管理我们创建一个简单的项目目录news_nlp_demo/ ├── data/ │ └── headlines.txt └── process_news.py4.3 准备测试数据在data/headlines.txt中放入以下内容Python is a powerful language for NLP NLP helps computers understand human language Deep Learning and NLP are changing the world Python and NLP make great tools for Data Science Learning NLP with Python is fun NLP APPLICATIONS ARE GROWING FAST注意最后一行是大写形式这正是为了保证演示效果而设计的。4.4 编写核心代码创建process_news.py完整代码如下# -*- coding: utf-8 -*- # 文件路径news_nlp_demo/process_news.py import re import string from collections import Counter # 常见的英文停用词仅演示用实际项目可以加载完整停用词表 STOP_WORDS { a, an, the, and, or, but, for, of, with, are, is, in, on, at, to, as, by, it } def read_headlines(file_path): 读取新闻标题文件返回标题列表 with open(file_path, r, encodingutf-8) as f: headlines [line.strip() for line in f if line.strip()] return headlines def clean_text(text): 文本清洗 1. 统一转小写核心 2. 去除标点符号 3. 去除数字 4. 合并多余空格 # 核心步骤大小写归一化 text text.lower() # 去除标点符号 text text.translate(str.maketrans(, , string.punctuation)) # 去除数字保留字母和空格 text re.sub(r\d, , text) # 合并多余空格 text re.sub(r\s, , text).strip() return text def tokenize(text): 将清洗后的文本切分为单词列表 return text.split( ) def remove_stopwords(tokens): 去除停用词 return [token for token in tokens if token not in STOP_WORDS and len(token) 1] def count_words(all_tokens): 统计词频 return Counter(all_tokens) def main(): headlines read_headlines(data/headlines.txt) print( 原始标题预览 ) for line in headlines: print(line) all_tokens [] for headline in headlines: cleaned clean_text(headline) tokens tokenize(cleaned) filtered_tokens remove_stopwords(tokens) all_tokens.extend(filtered_tokens) print(\n 清洗后的标题 ) for headline in headlines: print(clean_text(headline)) word_counter count_words(all_tokens) print(\n 词频统计 Top 10 ) for word, count in word_counter.most_common(10): print(f{word}: {count}) if __name__ __main__: main()4.5 运行与验证在项目目录下执行python process_news.py预期输出 原始标题预览 Python is a powerful language for NLP NLP helps computers understand human language Deep Learning and NLP are changing the world Python and NLP make great tools for Data Science Learning NLP with Python is fun NLP APPLICATIONS ARE GROWING FAST 清洗后的标题 python is a powerful language for nlp nlp helps computers understand human language deep learning and nlp are changing the world python and nlp make great tools for data science learning nlp with python is fun nlp applications are growing fast 词频统计 Top 10 nlp: 6 python: 4 language: 2 learning: 2 computers: 1 understand: 1 human: 1 deep: 1 world: 1 changing: 14.6 结果说明对比清洗前后的标题可以发现NLP和nlp在清洗后统一为nlp词频统计不再分裂PYTHON与Python统一为python标点符号被移除分词结果更干净停用词如is、the、and被过滤留下的基本都是实义词。这就是lower()在 NLP 词频统计中的核心价值让同一个词的不同形态聚合到同一个 Token 上从而避免下游统计、检索、匹配结果失真。5. NLP 实战二搜索匹配与相似度计算中的 .lower()5.1 搜索场景中的大小写问题搜索引擎和文档检索系统中大小写不敏感是基本要求。用户在搜索框输入python应该能搜到标题为Python和PYTHON的文档。实现这个需求有两种常见方式查询时统一调用lower()建立索引时统一存储为小写。下面用代码演示一个极简的文档搜索示例# 文件路径search_demo.py documents [ Python is the best language for data analysis, NLP is a subfield of artificial intelligence, Machine Learning helps computers learn from data, PYTHON AND NLP ARE POPULAR TOGETHER, ] def search_documents(query, docs): 大小写不敏感搜索 将 query 和文档都统一转为小写再判断是否存在 query_lower query.lower() results [] for idx, doc in enumerate(docs): doc_lower doc.lower() if query_lower in doc_lower: results.append((idx, doc)) return results if __name__ __main__: query python results search_documents(query, documents) print(f查询关键词: {query}) for idx, doc in results: print(f匹配文档 {idx}: {doc})输出结果查询关键词: python 匹配文档 0: Python is the best language for data analysis 匹配文档 3: PYTHON AND NLP ARE POPULAR TOGETHER如果不用lower()query python就匹配不到第 0 条文档中的Python也匹配不到第 3 条文档中的PYTHON搜索结果会严重缺失。5.2 文本相似度计算中的归一化在 NLP 中计算两个句子的相似度之前通常也需要先做大小写归一化。以 Jaccard 相似度为例公式为两个集合交集大小除以并集大小def jaccard_similarity(text1, text2): 计算两个文本的 Jaccard 相似度 使用 lower() 实现大小写不敏感比较 # 大小写归一化 text1 text1.lower() text2 text2.lower() # 分词并转为集合 set1 set(text1.split()) set2 set(text2.split()) # 计算交集和并集 intersection set1 set2 union set1 | set2 if not union: return 0.0 return len(intersection) / len(union) if __name__ __main__: # 大小写不同但语义相同的句子 s1 Python NLP Tutorial s2 python nlp tutorial print(相似度:, jaccard_similarity(s1, s2)) # 1.0 # 完全不同的句子 s3 Python NLP Tutorial s4 Java Web Development print(相似度:, jaccard_similarity(s3, s4)) # 0.0输出相似度: 1.0 相似度: 0.0如果不在计算前使用lower()第一组“看起来一样”的句子相似度会变成 0这显然不符合直觉。5.3 在 TF-IDF 向量化前使用 lower()使用scikit-learn做文本向量化时TfidfVectorizer自带lowercaseTrue参数默认就会把所有文本转成小写from sklearn.feature_extraction.text import TfidfVectorizer corpus [ Python is a language, PYTHON is used in NLP, python and NLP are related, ] # lowercaseTrue 是默认值等价于手动调用 lower() vectorizer TfidfVectorizer(lowercaseTrue) X vectorizer.fit_transform(corpus) # 查看词表可以看到所有词都是小写形式 print(词表:, vectorizer.get_feature_names_out())输出词表: [and are in is language nlp python related used]python和PYTHON在向量化后都对应同一个特征维度这正是lowercaseTrue参数在内部调用了lower()的结果。如果你自己实现向量化流程也需要在分词前手动完成这一步。6. NLP 实战三中文新闻处理中的 .lower()6.1 中英混合场景的挑战中文 NLP 处理和英文有个很大区别中文句子没有天然的空格分隔需要依赖分词工具。而中英混合文本中英文单词往往带有大小写例如iPhone 15 发布Apple 公司股价上涨 AI 正在改变 NLP 领域 Python 是数据分析的首选语言如果不做处理iPhone和apple在后续匹配中可能出现大小写不一致的问题。此时可以在分词之后对英文部分单独调用lower()。6.2 基于 jieba 的中文新闻预处理我们先安装jiebapip install jieba然后编写一个混合文本预处理脚本# -*- coding: utf-8 -*- # 文件路径chinese_news_demo.py import re import jieba # 中文停用词示例 CHINESE_STOP_WORDS { 的, 了, 在, 是, 和, 与, 及, 或, 一个, 正在, 已经, 将会, 也, 都, 被, 把 } def preprocess_mixed_text(text): 中英混合文本预处理 1. 统一英文大小写转小写 2. 分词 3. 过滤停用词和单字噪声 # 核心步骤整段文本调用 lower()对所有英文字母生效 # 注意中文汉字不受影响 text text.lower() # jieba 分词 words jieba.lcut(text) # 过滤停用词、空白、纯符号 filtered [] for word in words: word word.strip() if not word: continue if word in CHINESE_STOP_WORDS: continue # 过滤纯符号 if re.fullmatch(r[^\w\u4e00-\u9fff], word): continue filtered.append(word) return filtered if __name__ __main__: news_list [ iPhone 15 发布Apple 公司股价上涨, AI 正在改变 NLP 领域, Python 是数据分析的首选语言, IPHONE 15 大受欢迎, ] print( 预处理结果 ) for news in news_list: words preprocess_mixed_text(news) print(f原文: {news}) print(f分词: {words}) print(- * 40)运行输出 预处理结果 原文: iPhone 15 发布Apple 公司股价上涨 分词: [iphone, 15, 发布, apple, 公司, 股价, 上涨] 原文: AI 正在改变 NLP 领域 分词: [ai, 改变, nlp, 领域] 原文: Python 是数据分析的首选语言 分词: [python, 数据分析, 首选, 语言] 原文: IPHONE 15 大受欢迎 分词: [iphone, 15, 受欢迎]6.3 结果说明可以看到iPhone和IPHONE被统一转换为iphone在下游统计中可以正确合并Apple转为apple中文分词正常工作汉字不受lower()影响停用词被过滤剩下了有实际语义的词。这种做法在新闻关键词抽取、商品评论分析、热点话题聚类等场景中非常实用。7. NLP 实战四情感分析前的文本归一化7.1 为什么情感分析也需要 lower()情感分析任务中文本通常来自社交媒体、评论区、用户反馈大小写形式非常混乱。网络文本经常出现“AMAZING”“Great”“good”等混合写法。如果模型或规则没有做大小写归一化同一情感词会被切分成多个不同的 Token导致情感词典匹配失效。7.2 基于情感词典的简单分析下面用一个简单的规则示例来说明lower()如何提高情感判断准确性# -*- coding: utf-8 -*- # 文件路径sentiment_demo.py import re import string # 简单情感词典 POSITIVE_WORDS {good, great, amazing, excellent, happy, love, best} NEGATIVE_WORDS {bad, terrible, awful, hate, worst, poor} def analyze_sentiment(text): 基于词典的情感分析 先将文本统一转小写再计算情感得分 # 大小写归一化 text text.lower() # 去除标点 text text.translate(str.maketrans(, , string.punctuation)) # 分词 tokens text.split() positive_count 0 negative_count 0 for token in tokens: if token in POSITIVE_WORDS: positive_count 1 elif token in NEGATIVE_WORDS: negative_count 1 score positive_count - negative_count if score 0: label 正面 elif score 0: label 负面 else: label 中性 return { text: text, score: score, label: label, positive_count: positive_count, negative_count: negative_count, } if __name__ __main__: comments [ This product is AMAZING!, I really LOVE this app, The service was TERRIBLE, GOOD quality, BEST price, ] for comment in comments: result analyze_sentiment(comment) print(f原文: {comment}) print(f归一化后: {result[text]}) print(f情感得分: {result[score]}判定结果: {result[label]}) print(- * 50)运行输出原文: This product is AMAZING! 归一化后: this product is amazing 情感得分: 1判定结果: 正面 原文: I really LOVE this app 归一化后: i really love this app 情感得分: 1判定结果: 正面 原文: The service was TERRIBLE 归一化后: the service was terrible 情感得分: -1判定结果: 负面 原文: GOOD quality, BEST price 归一化后: good quality, best price 情感得分: 2判定结果: 正面如果去掉text.lower()这一行AMAZING就匹配不到词典里的amazingLOVE匹配不到loveTERRIBLE匹配不到terrible整段逻辑的准确率会大幅下降。这也是为什么在一切基于词典、规则、词向量匹配的 NLP 任务中大小写归一化都要放在最前面。8. 常见问题与排查思路在实际使用.lower()的过程中开发者会遇到一些高频问题。下面整理成排查表格并给出具体解决方案。问题现象常见原因解决思路调用lower()后原字符串没有变化忘记把返回值赋给新变量或原变量使用text text.lower()对字符串列表整体调用lower()报错list没有lower()方法用列表推导式[s.lower() for s in lst]报错AttributeError: NoneType object has no attribute lower数据中存在None空值先做None判断if text is None: text 或使用or 报错AttributeError: int object has no attribute lower数据中存在数字类型先转为字符串str(text).lower()中文文本分词后英文词仍不统一只在分词后处理漏掉了整段文本中的英文分词前先对整个文本调用lower()lower()后单词出现多余空格或空字符串原始数据有多个连续空格用re.sub(r\s, , text).strip()清理德语ß等特殊字符无法归一化lower()不够激进多语言场景改用casefold()停用词过滤后仍有大写单词过滤逻辑写在lower()之前调整顺序先lower()再去停用词pandas DataFrame 中调用报错对整列 Series 直接调用字符串方法使用df[col].str.lower()8.1 None 空值处理示例真实业务数据中经常出现None比如爬虫抓取字段缺失、数据库查询结果为空。下面给出安全处理方式# 安全版本兼容 None 和数字 def safe_lower(value): 安全地将任意值转为小写字符串 if value is None: return if not isinstance(value, str): value str(value) return value.lower() print(safe_lower(None)) # 输出空字符串 print(safe_lower(12345)) # 12345 print(safe_lower(Hello NLP)) # hello nlp8.2 DataFrame 列处理示例使用 pandas 处理 DataFrame 时可以直接用.str.lower()import pandas as pd df pd.DataFrame({ title: [Python NLP, PYTHON TUTORIAL, None, Data Science] }) # 处理前 print(df) # 统一转小写None 保留为 None df[title_lower] df[title].str.lower() print(df)输出title 0 Python NLP 1 PYTHON TUTORIAL 2 None 3 Data Science title title_lower 0 Python NLP python nlp 1 PYTHON TUTORIAL python tutorial 2 None None 3 Data Science data science注意如果用.str.lower()None值不会被转换而是保留为None。如果希望空值也变成空字符串可以先fillna()df[title_lower] df[title].fillna().str.lower()9. 最佳实践与工程建议9.1 把 lower() 封装成预处理函数不要在业务代码中到处写text.lower()更合理的做法是封装成统一函数方便后续扩展。推荐结构class TextPreprocessor: 文本预处理类统一管理清洗规则 def __init__(self, lowerTrue, remove_punctTrue, remove_digitsTrue): self.lower lower self.remove_punct remove_punct self.remove_digits remove_digits def process(self, text): if text is None: return text str(text) if self.lower: text text.lower() if self.remove_punct: text text.translate(str.maketrans(, , string.punctuation)) if self.remove_digits: text re.sub(r\d, , text) text re.sub(r\s, , text).strip() return text # 使用示例 preprocessor TextPreprocessor(lowerTrue, remove_punctTrue) clean_title preprocessor.process(Python NLP! 2024) print(clean_title) # python nlp这样一来后续新增清洗规则时只需要在process方法中扩展而不用逐个调用点修改。9.2 结合分词函数组成完整 Pipeline工程化 NLP 项目中建议将预处理拆成多个阶段用管道模式串联def build_pipeline(text): 标准的文本预处理管道 return ( text .lower() # 1. 大小写归一化 .replace(\n, ) # 2. 去除换行 .strip() # 3. 去除首尾空白 )使用管道式写法时要注意每一步都必须返回字符串否则下一步调用会报错。如果某个步骤返回None需要先处理空值。9.3 停用词表放在 lower() 之后工程中经常遇到这样的 bug停用词表是小写的比如{the, is, and}但原始文本中的词是大写The结果The没有进入停用词表统计时被当作有效词。正确的处理顺序是lower() - 去停用词 - 词干提取 - 统计无论用什么库都要保证停用词集合和文本都在同一大小写基准上。9.4 数据清洗顺序建议完整的文本清洗建议按照下面的顺序执行空值处理None、NaN统一替换大小写归一化lower()或casefold()去除 HTML 标签、URL、邮箱去除标点和数字按业务决定是否保留数字分词去停用词词干提取 / 词形还原向量化。顺序很重要。比如去 HTML 标签时标签属性中有可能存在大写字母先做lower()会让后续正则更简单。另一方面如果先去标点再去lower()则需要对每个分词后的 token 单独处理效率明显更低。9.5 性能与批量处理建议处理大规模语料时可以考虑以下优化方案向量化操作pandas Series.str代替 Python 循环多进程处理大规模语料比如用multiprocessing.Pool预先把全量文本转为小写并写入中间文件避免重复计算在实时检索场景中查询端和索引端都要做lower()且要保证规则一致。下面是一个多进程示例的简单思路from multiprocessing import Pool def process_one_text(text): 单条文本处理函数可被多进程调用 return text.lower().strip() if __name__ __main__: corpus [Hello NLP, PYTHON Tutorial, Data Science] # 使用进程池并行处理 with Pool(processes4) as pool: results pool.map(process_one_text, corpus) print(results)9.6 生产环境注意事项在生产环境中使用lower()相关的文本预处理时还需要注意保持预处理逻辑版本化。同一份语料不同版本预处理可能得到不同结果影响模型上线对比日志记录清洗前后文本样例方便排查数据异常对于需要区分大小写的业务场景比如代码关键词、用户名不要盲目使用lower()涉及多语言文本时先确定lower()和casefold()的选择策略不要修改原始数据清洗结果保存在新的字段或文件中便于回溯。10. 总结与下一步学习方向10.1 本文核心要点回顾.lower()是 Python 字符串对象的方法返回全小写的新字符串不修改原字符串在 NLP 中lower()的核心作用是大小写归一化让同一个词的不同大小写形式聚合为同一个 Token它在词频统计、搜索匹配、相似度计算、情感分析、中文混合文本处理中都会用到注意它与upper()、casefold()、capitalize()的区别处理None、数字类型、pandas 列时需要使用安全转换方式工程化项目中建议把lower()封装为预处理函数并按照统一顺序执行清洗流程。10.2 可以继续探索的方向如果你对文本预处理和 NLP 感兴趣下一步可以学习中文分词jieba的精确模式和搜索引擎模式停用词表构建如何根据业务定制专属停用词表词干提取与词形还原PorterStemmer、WordNetLemmatizer文本向量化TF-IDF、Word2Vec、BERT Embedding文本相似度与检索BM25、向量数据库大规模语料处理Spark、Dask 等分布式计算框架。文本预处理是整个 NLP 流程的地基lower()又是地基中最不起眼却最常用的一个砖块。把这块砖放稳了后面的模型训练和结果分析才会更可靠。建议你亲手运行一遍文中的代码把每一段输出都看一遍再结合自己的业务数据做一些扩展实验。这样学到的远比只看不练要扎实。