使用PyMuPDF提取PDF文本时出现乱码的解决方法咨询
PyMuPDF提取PDF文本时出现乱码的解决方法咨询
嘿,我来帮你看看这个问题!你遇到的这些奇怪的编码字符(比如\xc2\x91\xc2\x99\x03这类),大概率是几个小细节没处理好导致的,咱们一步步来解决:
别手动对
get_text()的结果做encode操作:PyMuPDF的get_text()方法默认返回的就是Unicode字符串,你额外调用.encode('utf-8')反而可能把原本正常的字符搞乱。先把代码改成这样试试:import PyMuPDF doc = PyMuPDF.open('uber-report.pdf') text = doc[1].get_text() print(text)调整文本提取的参数:如果还是有乱码,可以给
get_text()加上提取标志,过滤掉控制字符和非标准格式代码。比如使用TEXTFLAGS_TEXT标志,只保留纯文本内容:text = doc[1].get_text(flags=PyMuPDF.TEXTFLAGS_TEXT)另外,也可以尝试用块模式提取(
get_text("blocks")),它会返回页面上的文本块列表,你可以从中筛选出干净的文本内容。手动清理残留乱码:要是上面的方法后还有少量奇怪字符,可以用正则表达式过滤掉非打印的控制字符:
import re clean_text = re.sub(r'[\x00-\x1F\x7F-\x9F]', '', text) print(clean_text)这个正则会去掉所有ASCII控制字符和一些非标准的扩展字符。
排查PDF字体问题:如果PDF本身的字体嵌入不完整,PyMuPDF可能无法正确解析某些字符。这种情况下可以试试OCR识别(需要提前安装Tesseract OCR和
pytesseract库):import pytesseract from PIL import Image page = doc[1] pix = page.get_pixmap() img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) ocr_text = pytesseract.image_to_string(img) print(ocr_text)
备注:内容来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

