You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyPDF2 extract_text()提取PDF文本乱码,该如何解决?

解决PDF文本提取乱码及按最后单词裁剪问题

一、换用更可靠的文本提取工具

  • 弃用默认的extract_text(),改用PyMuPDF(fitz)的文本提取方法,它对非拉丁字符的编码兼容性更好:
    import fitz
    doc = fitz.open("目标文件.pdf")
    target_page = doc[页码]
    # 提取纯文本,也可用"blocks"获取带位置的结构化文本
    raw_text = target_page.get_text("text")
    
  • 若仍有异常,尝试get_text("raw")获取更底层的文本数据,再做编码修正。

二、手动清理异常字符

针对提取出的乱码(比如示例中的á),可通过正则过滤或字符映射修正:

  • 保留目标字符集(以你示例中的梵语系字符为例),过滤无关字符:
    import re
    # 仅保留梵语字符、空格和/符号,移除其他异常字符
    cleaned_text = re.sub(r'[^\u0900-\u097F\s/]', '', raw_text)
    
  • 若已知错误字符的对应关系,可直接批量替换,比如cleaned_text = raw_text.replace("á", "")。

三、用OCR提取视觉文本(针对字体编码损坏的PDF)

如果PDF内嵌字体编码有问题,直接通过视觉识别提取准确文本:

import pytesseract
from PIL import Image
import fitz

doc = fitz.open("目标文件.pdf")
target_page = doc[页码]
# 将PDF页面转为图片
pix = target_page.get_pixmap()
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
# 指定对应语言包(梵语为"san",需提前安装tesseract对应语言包)
accurate_text = pytesseract.image_to_string(img, lang="san")

四、提取正确文本后裁剪PDF

确认最后一个单词所在的页面或位置后,用PyMuPDF裁剪PDF:

output_doc = fitz.open()
# 假设需要保留到第n页(从0开始计数)
for page_idx in range(n + 1):
    output_doc.insert_pdf(doc, from_page=page_idx, to_page=page_idx)
output_doc.save("裁剪后的文件.pdf")
# 关闭文档释放资源
output_doc.close()
doc.close()

内容的提问来源于stack exchange,提问作者AmanKP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:14:58