1

我正在使用 PyPDF2 库通过它的extractText功能从 PDF 文件中提取文本,对于大多数 PDF,它工作得很好!

但是,某些 PDF 会生成如下所示的文本:

\n!"#$%&'()" +,"-." .)/"0$-1"2)+3-$.45\n""!"#$%&'() #'+),$!"#-.# $-/$0.1+" #+ 12$\n!"#"$!%"&#"%$'$()% +,-$(%.($#"$(%" %/%0!%\n$0"& $(%1(0,$2%3(%0"%0!%"&$%1(34+5"%36%1(0,$!7\n%%8%!"#$%& '($)%"\n%0!%#% +,-$(%"&#"%0!%3*9)%40'0!0-9$%-)%/%#*4 %0"!$967\n%%:%0!%"&$%3*9)%$'$ %\n1(0,$% +,-$(7\n%%;3%099+! "(#"$%6+ 4#,$ "#9%"&$3($,%36%#(0"&,$"052%<%90!"%-$93=%"&$%1 (0,$%6#5"3(0>#"03*%\n36% +,-$(!%-$"=$$ %/%# 4%:?7%@(0,$% +,

根据文档,这是可以预期的:

这适用于某些 PDF 文件,但对其他文件效果不佳,具体取决于所使用的生成器。

不幸的是,该extractText()函数在输出上述文本时不会引发任何异常。

所以,我的问题是,有没有办法以编程方式检测extractText()函数何时返回乱码?

4

1 回答 1

1

根据@DYZ 的评论,这是解决方案。

document_path假定为PDF您正在打开的文件的路径。其余的应该是不言自明的。

from PyPDF2 import PdfFileReader
from nltk.corpus import words

words = words.words()
document_file = PdfFileReader(open(document_path, 'rb'))
num_pages = document_file.getNumPages()
for page_num in range(0, num_pages):
    page = document_file.getPage(page_num)
    page_contents = page.extractText()
    if set(page_contents.lower().split()).intersection(words):
        # process page_contents
于 2017-06-07T16:00:09.420 回答