【发布时间】:2018-05-15 20:43:40
【问题描述】:
我正在尝试遍历一组文件夹中的一组 pdf(全部为 OCR)并在 pdf 中搜索关键术语,如果 pdf 包含某个术语,则保存文件夹名称、文件名、等等。这段代码在一定程度上是有效的。除了,它在搜索词中缺少一些 pdf。原因是当我阅读几个 pdf 时,它会在几页上显示一些乱码(至少对我而言)。例如,假设我读过一个名为“the_one.pdf”的 pdf。它有 278 页。当我进入 adobe acrobat 搜索此文档时,我可以在第 171 页找到“搜索词 1”,但是当使用 python 读取时,python 会输出如下内容:
-ˆ˜
%
˜%˝ˆ
,˙
˚
%.
%,˛#
%˜˚
0"
˚˝
%
˚˝ˆ˙)˛˚˜
˚0˛˚
:&;
#˛˘˘˙
˚%˚
"
%˚˛˘
ˆ
˛˚,˚
"
$%˚˚%
%
˝%.
"˛
"
%˜
˝,
-ˆ
%˘˙
˛˘˚
0"
"
˛
.˛˝
%˜˚
˝˜
.%
!˝ˆ%
4
0"
"
%˜˚
˛
%˛˘˘˙
!˝ˆ˜
%
˛ ˚˝ˆ˙)˛˚˜
˚0˛
!˝ˆ%
.˛˝˘˙8
˛˜
%
0"
"
˚
˛ #%˛%
"˛
˚ˆ˘˚
˛ ˛˚˛˝%
0"%ˆ
˛˙
!˝ˆ˛˘
%˜
%
%"
˚ˆ˝%
#
7
˘˛˘˙
:&;
˛˘˚%
˛˚,˚
"
$%˚˚%
%
˝%.
%
%˜
˝,
6
;˚
%˜
˛%
"
$%˚˚%
˚"%ˆ˘˜
˘˝˘˙
%
"˛
.˝˚
%
˚˛˜)˛˘%
/ˇ˚
˘˝˘˙
˝˘ˆ˜
˚˛˜)˛˘%
/ˇ˚
"˛
˛
#˚˜
˛˚
9$
˜˛˚
˜˛˘˚
:
"˚
˘
.˝˚
%
˚˛˜)˛˘%
/ˇ˚
˛
˜˜
%
˛˘˙
%
9$
˜˛˚
˜˛˘˚
"˛
˛
˜ˆ˛˘˘˙
#˚˜
˛˚
/ˇ˚
4˛˜
˚ˆ˝"
˚
˛
˛˘˚%
˛%˜
%
ˆ˚
˛˘
%˜˘˚8
7
9"˚
#%˛%˚
%.
˛,
˘˛˝
%
"
˘"%
ˆ
˝˛
˛˘˚%
˛,
ˆ˚
%.
˘˝%˝
˚˙˚˚
%
˚˝ˆ˙)˛˚˜
˚0˛
!˝ˆ%
.˛˝˘˚
&%
!˛˘
˛ ˛,
˛˝˛
˛˙
˚
%
%
%
%
/ˇ˚
˛ -ˆ˚
.%
-ˆ%˛%
4<
˝6
=8
.%
˛ ˚˝.˝
˚˝ˆ˙)˛˚˜
˚0˛
˛˜
˝
˛˝,
当然,它可以正确显示大多数页面,但由于某些原因,它不会显示其中的几个。出于保密原因,我无法发布 pdf。有谁知道为什么会这样?
此外,您可以指出任何可以加快我的代码速度或使其更具动态性的内容也很有帮助。一直在寻找学习。
最好, J.Dykstra
import PyPDF2
from os import walk
import os
import re
import csv
pdf_location = r'PDF Directory'
x = ['Search term 1', 'Search term 2', 'Search term 3', 'etc..']
key_terms = []
rule = []
filenamey = []
for dirpath, dirnames, filenames in walk(pdf_location):
for filename in filenames:
if filename.endswith('.pdf'):
pdfFileObj = open(os.path.join(dirpath,filename), 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj, strict = False)
num_pages = pdfReader.numPages
count = 0
text = ""
while count < num_pages:
pageObj = pdfReader.getPage(count)
count +=1
text += pageObj.extractText()
for i in x:
if re.search(i,text, re.IGNORECASE):
rulex = dirpath.split("Rule")[1]
filenamex = filename
key_termx = x[0]
key_terms.append(key_termx)
rule.append(rulex)
【问题讨论】:
标签: python-3.x pdf