Python中如何清洗嵌套列表文本并做文本挖掘,排查特殊字符移除失效问题
问题排查及修复方案
现有代码存在的问题
- 遍历逻辑错误:
for i in len(pages_text)会直接触发类型错误,整数不可迭代,需用range(len(pages_text))生成可迭代的索引序列。 - 嵌套结构处理缺失:你明确说明
pages_text是列表的列表结构,直接取pages_text[i]得到的是子列表而非字符串,无法直接调用字符串方法或正则替换。 - 正则替换结果未保存:Python中字符串是不可变类型,
re.sub()会返回替换后的新字符串,不对返回值赋值的话,替换操作不会生效,原字符串不会改变。 - 冗余重复逻辑:相同的特殊字符替换(如
™、换行符)写了多次,无意义且浪费性能。 - 无效代码:
re.findall(r"\s+", pages_text[i])仅匹配空白字符但未做任何处理或赋值,对清洗逻辑无帮助。
修复后的代码
import re # 遍历外层列表(对应每个PDF文件) for pdf_idx in range(len(pages_text)): # 遍历内层列表(对应单个PDF的每页文本) for page_idx in range(len(pages_text[pdf_idx])): # 先统一转小写 cleaned_text = pages_text[pdf_idx][page_idx].lower() # 合并所有替换规则,一次性完成特殊字符清理 cleaned_text = re.sub(r'[™flŒ\n]', '', cleaned_text) # 可选:如果需要将连续空白替换为单个空格,放开下面一行注释即可 # cleaned_text = re.sub(r'\s+', ' ', cleaned_text).strip() # 将清洗后的文本赋值回原结构 pages_text[pdf_idx][page_idx] = cleaned_text # 打印最终清洗结果 print(pages_text)
补充说明
后续需要新增要移除的特殊字符,直接往正则的[]字符组里添加即可,无需重复写re.sub()语句。
内容的提问来源于stack exchange,提问作者scotiaboy
相关产品推荐
相关产品推荐

