使用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
我尝试了各种不同的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 来提取文本,这在处理扫描文档时非常有用。
-
PDFMiner.six:
这是一个强大的 PDF 解析库,可以尝试使用它的
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