首页 > 编程问答 >使用Python读取PDF文件,部分内容显示为一串乱码。我应该如何恢复它?

使用Python读取PDF文件,部分内容显示为一串乱码。我应该如何恢复它?

时间:2024-07-21 10:12:43浏览次数:12  
标签:python pdf pymupdf

使用Python读取PDF文件,部分内容显示为一串乱码。我该如何恢复它?

import fitz
doc = fitz.open("2303.11366v4.pdf")# download from https://arxiv.org/pdf/2303.11366
print(doc[2].get_text().split('Figure 1')[0])

我得到了这样的文字:

<RXDUHLQWKHPLGGOHRIDURRP 
>@7DVNFOHDQVRPHSDQDQGSXW 
LWLQFRXQWHUWRS
'HFLVLRQPDNLQJ
7DVN<RXDUHJLYHQDOLVWRIWZR 
VWULQJV>@RIRSHQ

RUFORVH 


SDUHQWKHVHVRQO\>@
3URJUDPPLQJ
7DVN:KDWSURIHVVLRQGRHV-RKQ 
/DQFKHVWHUDQG$ODQ'HDQ)RVWHU 
KDYHLQFRPPRQ"
5HDVRQLQJ
>@
$FWLRQWDNHSDQIURPVWRYHEXUQHU
2EV1RWKLQJKDSSHQV>@
$FWLRQFOHDQSDQZLWKVLQNEDVLQ
2EV1RWKLQJKDSSHQV>@
7KLQN>@QRYHOLVWMRXUQDOLVW 
FULWLF>@QRYHOLVW 
VFUHHQZULWHU>@FRPPRQLV 
QRYHOLVWDQGVFUHHQZULWHU
$FWLRQ²QRYHOLVWVFUHHQZULWHU³
GHIPDWFKBSDUHQVOVW
LIVFRXQW

 
VFRXQW

  VFRXQW

 
VFRXQW

>@
UHWXUQ
1R
6HOIJHQHUDWHGXQLWWHVWVIDLO
DVVHUWPDWFKBSDUHQV
(QYLURQPHQW%LQDU\5HZDUG

5XOH/0+HXULVWLF
+DOOXFLQDWLRQ
>@IDLOHGEHFDXVH,LQFRUUHFWO\ 
DVVXPHGWKDWWKH\ERWKKDGWKH 
VDPHPXOWLSOHSURIHVVLRQV>@ 
DFFXUDWHO\LGHQWLI\LQJWKHLU 
SURIHVVLRQV
>@ZURQJEHFDXVHLWRQO\FKHFNV 
LIWKHWRWDOFRXQWRIRSHQDQG 
FORVHSDUHQWKHVHVLVHTXDO>@ 
RUGHURIWKHSDUHQWKHVHV>@
>@WULHGWRSLFNXSWKHSDQLQ 
VWRYHEXUQHU>@EXWWKHSDQ 
ZDVQRWLQVWRYHEXUQHU>@
>@
UHWXUQ
<HV
LIFKHFN6RU 
FKHFN6HOVH
1R
7KLQN>@6RWKHSURIHVVLRQ 
-RKQ/DQFKHVWHUDQG$ODQ'HDQ 
)RVWHUKDYHLQFRPPRQLVQRYHOLVW
$FWLRQ²QRYHOLVW³
>@$FWLRQWDNHSDQIURP
VWRYHEXUQHU
>@2EV<RXSXWWKHSDQLQ 
FRXQWHUWRS
F
(YDOXDWLRQ
G
5HIOHFWLRQ
H1H[W
7UDMHFWRU\
E
7UDMHFWRU\
D7DVN
LQWHUQDOH[WHUQDO

the source in the pdf file is like this

我尝试了各种不同的Python包,但所有这些都导致了乱码。

似乎AI可以识别出这段文字说的是什么。

1. <RXAREINTHEEMIDDLEOFAROOM> - You are in the middle of a room.

2. [TASKCLEANSOMEDANANDPUTITINCOUNTERTOP] - The task is to clean a pan and put it on the countertop.

3. [DECISIONMAKING] - This section is about decision making.

4. [TASKYOUAREGIVENALISTOFTWOSTRINGSOFOPEN ORCLOSEPARENTHESESONLY[]] - The task is to work with a list of two strings of open or close parentheses.

5. [PROGRAMMING] - This section is about programming.

6. [TASKWHATPROFESSIONDOESJOHNLANCHESTERANDALANDEANFOSTERHAVEINCOMMON?] - The task is to determine what profession John Lanchesterand Alan Dean Foster have in common.
.....

这篇文章来自claude haiku。

但是我需要用python 将文本翻译成人类语言。


你遇到的问题是 PDF 文件中使用的字体可能没有被你的 Python 库正确解析,导致字符被错误地映射。这通常发生在使用非标准字体或嵌入式子集字体的 PDF 文件中。

以下是一些可以尝试的解决方法:

1. 使用其他PDF解析库

  • PyMuPDF (fitz) 的其他选项: 虽然你已经在使用 PyMuPDF,但可以尝试以下选项:
    • 使用 get_text("text") 而不是 get_text() get_text("text") 模式通常更准确,但可能丢失一些格式信息。
    • 使用 get_text("words") 获取单词列表,然后根据需要进行处理。
  • 其他库:
    • PDFMiner.six: 这是一个强大的 PDF 解析库,可以尝试使用它的 extract_text() 函数。
    • Tika: Apache Tika 是一个内容分析工具包,可以处理各种文档格式,包括 PDF。 它可以使用 OCR 来提取文本,这在处理扫描文档时非常有用。

2. 安装缺少的字体

  • 如果 PDF 文件使用了非标准字体,你需要在你的系统中安装这些字体才能正确显示。 你可以使用以下工具来检查 PDF 文件中使用的字体:
    • PDFtk: 这是一个命令行工具,可以用来检查 PDF 文件的信息,包括使用的字体。
    • Adobe Acrobat Reader: 你可以打开 PDF 文件,然后在文件属性中查看使用的字体。

3. 使用 OCR (光学字符识别)

  • 如果以上方法都无法解决问题,你可以尝试使用 OCR 软件将 PDF 文件转换为图像,然后使用 OCR 引擎识别文本。 这通常是最后的手段,因为它可能会导致一些格式错误。
    • Tesseract OCR: 这是一个开源的 OCR 引擎,可以与 Python 集成。
    • PyOCR: 这是一个 Python 库,可以作为 Tesseract OCR 的包装器。

以下是一些示例代码:

# 使用 PyMuPDF 的 get_text("text") 模式
import fitz

doc = fitz.open("2303.11366v4.pdf")
text = doc[2].get_text("text").split('Figure 1')[0]
print(text)

# 使用 PDFMiner.six
from pdfminer.high_level import extract_text

text = extract_text("2303.11366v4.pdf")
print(text)

# 使用 Tika
from tika import parser

raw = parser.from_file("2303.11366v4.pdf")
text = raw['content']
print(text)

如果这些方法仍然无法解决问题,你可以尝试提供更详细的信息,例如 PDF 文件的来源,使用的 Python 库版本以及你尝试过的具体代码,以便我提供更具体的帮助。

标签:python,pdf,pymupdf
From: 78746890

相关文章

  • Python 迭代列表
    分配sum_extra给定列表test_grades收到的额外学分总额。满分是100分,所以超过100分都是额外分。对于给定程序,sum_extra是8,因为1+0+7+0是8。给定程序的示例输出:额外总和:8请原谅我,我是编码新手,而且真的很糟糕!这是我的代码(不起作用)请......
  • 计算机毕业设计Python+Spark新能源汽车推荐系统 汽车大数据 汽车数据分析 汽车可视化
    表2黄河交通学院本科毕业设计(论文)开题报告学生姓名刘丹杰专业班级20本大数据一班学号2080910T01521设计(论文)题目基于Hadoop的新能源汽车销售数据分析系统的设计与实现选题的目的和意义:选题目的:新能源汽车销售数据分析系统的设计与实现旨在利用Hadoop等大数......
  • 为什么我的 python 程序一直说没有名为“PIL”的模块?
    我正在pythonIDLEshell中工作,由于某种原因pyautogui.locateOnScreen将无法工作。这是我的代码:frompyautoguiimport*importpyscreezeimportpyautoguiimporttimeimportkeyboardimportrandomimportwin32api,win32conwhile1:ifpyautogui.locateOnS......
  • 我在 Python 时间格式化函数中遇到代码问题
    我一直在研究一个Python函数,将给定的秒数转换为可读的时间格式(HH:MM:SS)。该函数对于大多数测试用例都能正常工作,但对于一些特定的输入会失败。这是我编写的函数:defmake_readable(seconds):ifseconds<60:s1=secondsh1,m1=(0,0)return......
  • 《流畅的Python》第二版 第11章
     fromarrayimportarrayimportmathclassVector2d:__match_args__=('x','y')typecode='d'def__init__(self,x,y):self.__x=float(x)self.__y=float(y)@propertydefx(self)......
  • 《流畅的Python》第二版 第12章
       fromarrayimportarrayimportmathimportfunctoolsimportitertoolsimportoperatorimportreprlibclassVector:typecode='d'def__init__(self,components):self._components=array(self.typecode,components)......
  • 如何在Python中给jupyter单元标准输入?
    我正在尝试在接受用户输入的jupyter笔记本上运行一个程序,但我不知道如何让它读取标准输入。例如,如果我使用shift-enter:a=input()print(a)运行代码,则单元格指示它正在运行,但不接受我的输入。我如何让它接受输入?你遇到的问题是Jupyternotebook中的代码单元默认......
  • Python:如何从 csvreader 列表中删除括号和单引号?
    Pythonn00b在这里。尝试使用csvreader从文件导入数组并打印一个值,但它添加了括号和单引号。这是我的代码:importrandomimportcsvwithopen('crimes.csv','r')ascsvfile:crimes=list(csv.reader(csvfile))hello=["Hello","Greetings","Hi&q......
  • Python 中的多行输入,支持空行并在控制台中检查“\n”
    您好,亲爱的社区,在解决某个竞赛任务时出现了问题。我解决了它,但由于输入棘手而无法交付。我在谷歌上搜索并尝试了几种找到的方法,但如果应用于此任务,它们中的每一种都有一些弱点。而且我无法完全重现所应用的输入,因为它嵌入在竞赛界面中;我可能只依赖描述。这就是为什么我......
  • Python Pandas - 读取 CSV 或 Excel
    我允许用户上传CSV或Excel文件。我正在使用pandas读取文件并创建数据框。由于我无法预测用户将上传哪种文件类型,因此我将pd.read_csv()和pd.read_excel()包装在try/except块中。ifform.validate_on_submit():input_filename=secure_filename(form.file.da......