从 PDF 中提取文本 - 所有页面和输出 - 使用 Python 的文件
Posted
技术标签:
【中文标题】从 PDF 中提取文本 - 所有页面和输出 - 使用 Python 的文件【英文标题】:Extracting text from a PDF - All pages and Output - file using Python 【发布时间】:2017-04-10 03:28:52 【问题描述】:我是 Python 新手。 我正在使用此代码来提取文本。是否可以提取所有页面并在文件中输出?
import PyPDF2
pdf_file = open('sample.pdf','rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(10)
page_content = page.extractText()
print (page_content)
【问题讨论】:
我觉得你可以参考这个链接***.com/questions/17003185/…除了pypdf2 【参考方案1】:使用循环提取每个页面的文本并将每个页面的文本写入单个文件。
import PyPDF2
with open('sample.pdf','rb') as pdf_file, open('sample.txt', 'w') as text_file:
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
for page_number in range(number_of_pages): # use xrange in Py2
page = read_pdf.getPage(page_number)
page_content = page.extractText()
text_file.write(page_content)
【讨论】:
完美!有效!但是......是否可以阅读这种pdf? cotemar.com.br/biblioteca/administracao/… 该 PDF 似乎是一本扫描书。即使它已经过 OCR,我也不知道 PyPDF 是否可以处理它。【参考方案2】:我使用以下代码将多个pdf文件转换为txt
p
df_dir = "D:/search/pdf"
txt_dir = "D:/pdf_to_text"
corpus = (f for f in os.listdir(pdf_dir) if not f.startswith('.') and isfile(join(pdf_dir, f)))
pdfWriter = PyPDF2.PdfFileWriter()
for filename in corpus:
pdf = open(join(pdf_dir, filename),'rb')
pdfReader = PyPDF2.PdfFileReader(pdf)
for page in range(1, pdfReader.numPages):
pageObj = pdfReader.getPage(page)
pdfWriter.addPage(pageObj)
text = pageObj.extractText()
page_name = "-page.txt".format(filename[:4], page + 1)
with open(join(txt_dir, page_name), mode="w", encoding='UTF-8') as o:
o.write(text)
这段代码可以正常工作,但是对于每个文件我都有多个页面,当我运行上面的代码时,它给我的数据是 file1-page1.txt、file1-page2.txt、file1-page3.txt。但我希望 file.txt 包含所有页面的信息。我该怎么做。
【讨论】:
【参考方案3】: def getPptContent(path, text):
pdfWriter = PyPDF2.PdfFileWriter()
pdf = open(join(pdf_dir, filename),'rb')
pdfReader = PyPDF2.PdfFileReader(pdf)
for page in range(1, pdfReader.numPages):
pageObj = pdfReader.getPage(page)
pdfWriter.addPage(pageObj)
text = pageObj.extractText()
return text
pdf_dir = "pdf_directory name"
corpus = [str(f) for f in os.listdir(pdf_dir) if not f.startswith('.') and
isfile(join(pdf_dir, f))]
for filename in corpus:
Path = pdf_dir + "/" +filename
print(Path)
file_content = getPptContent(Path)
f = open(pdf_dir + "/output/" + filename.split(".")[0] +".txt" ,"w+",
encoding="utf-8")
f.write(str(file_content))
f.close()
上面的代码对我有用。
【讨论】:
以上是关于从 PDF 中提取文本 - 所有页面和输出 - 使用 Python 的文件的主要内容,如果未能解决你的问题,请参考以下文章