Python|Jupyter Notebook中NLTK words函数校验单词速度过慢如何优化
优化方案
- 核心性能瓶颈修复:将NLTK词表转为集合预加载
原代码每次判断x in words.words()时,都会重新生成一次完整的单词列表,且列表的成员查询时间复杂度为O(n),2万行数据叠加后耗时会指数级上升。提前把词表转成集合,查询复杂度可降到O(1),且词表仅需加载一次。 - 替换Python原生for循环,用Pandas向量化操作
Pandas内置的isin()方法是底层C实现的矢量运算,比手动遍历Series的效率高几十到上百倍。 - 移除重复的NLTK下载逻辑
nltk.download('words')只需要在首次运行时执行一次,后续运行可以直接注释掉,避免重复请求校验耗时。
优化后代码
import nltk from nltk.corpus import words import pandas as pd # 首次运行后可注释掉下行 # nltk.download('words') # 预加载词表转集合,仅执行一次 word_set = set(words.words()) # 直接用pandas isin矢量筛选,无需手动循环 gibberishBody = bodyStopWords[bodyStopWords.isin(word_set)].tolist() print(gibberishBody)
以上优化落地后,2万行规模的数据处理耗时可降到秒级甚至毫秒级。
内容的提问来源于stack exchange,提问作者MuchoFunk
相关产品推荐
相关产品推荐

