Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ทำงานกับไฟล์ PDF ใน Python หรือไม่


Python เป็นภาษาที่ใช้งานได้หลากหลาย เนื่องจากมีไลบรารีชุดใหญ่เพื่อทำงานตามความต้องการที่แตกต่างกัน เราทุกคนทำงานบนไฟล์ Portable Document Format (PDF) Python มีวิธีการต่างๆ ในการทำงานกับไฟล์ pdf ในนี้เราจะใช้ไลบรารี python ชื่อ PyPDF2 เพื่อทำงานกับไฟล์ pdf

PyPDF2 เป็นไลบรารี PDF แบบ pure-python ที่สามารถแยก ผสาน ครอบตัด และแปลงหน้าของไฟล์ PDF ได้ นอกจากนี้ยังเพิ่มข้อมูลที่กำหนดเอง ตัวเลือกการดู และรหัสผ่านไปยังไฟล์ PDF ได้อีกด้วย สามารถดึงข้อความและข้อมูลเมตาจาก PDF รวมทั้งรวมไฟล์ทั้งหมดเข้าด้วยกัน

เนื่องจากเราสามารถดำเนินการหลายอย่างใน PDF ด้วย PyPDF2 จึงทำหน้าที่เหมือนมีดของกองทัพสวิส

เริ่มต้นใช้งาน

เนื่องจาก pypdf2 เป็นแพ็คเกจมาตรฐานของไพ ธ อน เราจึงต้องติดตั้ง ข้อดีคือมันง่ายมาก เราสามารถใช้ pip เพื่อติดตั้งได้ เพียงเรียกใช้คำสั่งด้านล่างบนเทอร์มินัลคำสั่งของคุณ:

C:\Users\rajesh>pip install pypdf2
Collecting pypdf2
Downloading https://files.pythonhosted.org/packages/b4/01/68fcc0d43daf4c6bdbc6b33cc3f77bda531c86b174cac56ef0ffdb96faab/PyPDF2-1.26.0.tar.gz (77kB)
100% |████████████████████████████████| 81kB 83kB/s
Building wheels for collected packages: pypdf2
Building wheel for pypdf2 (setup.py) ... done
Stored in directory: C:\Users\rajesh\AppData\Local\pip\Cache\wheels\53\84\19\35bc977c8bf5f0c23a8a011aa958acd4da4bbd7a229315c1b7
Successfully built pypdf2
Installing collected packages: pypdf2
Successfully installed pypdf2-1.26.0

หากต้องการตรวจสอบ ให้นำเข้า pypdf2 จาก python shell

>>> import PyPDF2
>>>
Successful, Great.

การแยกข้อมูลเมตา

เราสามารถดึงข้อมูลที่เป็นประโยชน์ที่สำคัญบางส่วนจาก pdf ใดก็ได้ ตัวอย่างเช่น เราสามารถดึงข้อมูลเกี่ยวกับผู้เขียนเอกสาร ชื่อเรื่อง หัวเรื่อง และจำนวนหน้าที่อยู่ในไฟล์ pdf

ด้านล่างนี้คือโปรแกรม python สำหรับดึงข้อมูลที่เป็นประโยชน์จากไฟล์ pdf โดยใช้แพ็คเกจ pypdf2

from PyPDF2 import PdfFileReader
def extract_pdfMeta(path):
   with open(path, 'rb') as f:
      pdf = PdfFileReader(f)
      info = pdf.getDocumentInfo()
      number_of_pages = pdf.getNumPages()
   print("Author: \t", info.author)
   print()
   print("Creator: \t", info.creator)
   print()
   print("Producer: \t",info.producer)
   print()
   print("Subject: \t", info.subject)
   print()
   print("title: \t",info.title)
   print()
   print("Number of Pages in pdf: \t",number_of_pages)
if __name__ == '__main__':
   path = 'DeepLearning.pdf'
   extract_pdfMeta(path)

ผลลัพธ์

Author: Nikhil Buduma,Nicholas Locascio

Creator: AH CSS Formatter V6.2 MR4 for Linux64 : 6.2.6.18551 (2014/09/24 15:00JST)

Producer: Antenna House PDF Output Library 6.2.609 (Linux64)

Subject: None

title: Fundamentals of Deep Learning

Number of Pages in pdf: 298

ดังนั้นโดยไม่ต้องเปิดไฟล์ pdf เราจึงสามารถรับข้อมูลที่เป็นประโยชน์จากไฟล์ pdf ได้

การแยกข้อความจาก PDF

เราสามารถดึงข้อความจาก pdfs แม้ว่าจะมีการรองรับการดึงภาพในตัว

เรามาลองแยกข้อความจากหน้าใดหน้าหนึ่ง (เช่น หน้า 50) ของไฟล์ pdf ที่เราดาวน์โหลดมาด้านบนกัน

#Import pypdf2
from PyPDF2 import PdfFileReader
def extract_pdfText(path):
   with open(path, 'rb') as f:
      pdf = PdfFileReader(f)
      # get the 50th page
      page = pdf.getPage(50)
      print(page)
      print('Page type: {}'.format(str(type(page))))
      #Extract text from the 50th page
      text = page.extractText()
      print(text)
if __name__ == '__main__':
   path = 'DeepLearning.pdf'
   extract_pdfText(path)

ผลลัพธ์

{'/Annots': IndirectObject(1421, 0),
'/Contents': IndirectObject(179, 0),
'/CropBox': [0, 0, 595.3, 841.9],
'/Group': {'/CS': '/DeviceRGB', '/S': '/Transparency', '/Type': '/Group'},
'/MediaBox': [0, 0, 504, 661.5],
'/Parent': IndirectObject(4863, 0),
'/Resources': IndirectObject(1423, 0),
'/Rotate': 0,
'/Type':
'/Page'
}

Page type: <class 'PyPDF2.pdf.PageObject'>
time. In inverted dropout, any neuron whose activation hasn†t been silenced has its
output divided by p before the value is propagated to the next layer. With this
fix, Eoutput=p⁄xp+1ƒ
p⁄0=
x, and we can avoid arbitrarily scaling neuronal
output at test time.

SummaryIn this chapter, we†ve learned all of the basics involved in training feed-forward neural
networks. We†ve talked about gradient descent, the backpropagation algorithm, as
well as various methods we can use to prevent overfitting. In the next chapter, we†ll
put these lessons into practice when we use the TensorFlow library to efficiently
implement our first neural networks. Then in
Chapter 4

, we†ll return to the problem
of optimizing objective functions for training neural networks and design algorithmsto significantly improve performance. These improvements will enable us to process
much more data, which means we†ll be able to build more comprehensive models.
Summary | 37

แม้ว่าเราจะได้ข้อความบางส่วนจากหน้า 50 แต่ก็ไม่ได้สะอาดขนาดนั้น ขออภัย pypdf2 มีการสนับสนุนที่จำกัดมากสำหรับการแยกข้อความจาก pdfs

หมุนหน้าเฉพาะของไฟล์ pdf

>>> import PyPDF2
>>> deeplearningFile = open('DeepLearning.pdf', 'rb')
>>> pdfReader = PyPDF2.PdfFileReader(deeplearningFile)
>>> page = pdfReader.getPage(0)
>>> page.rotateClockwise(90)
{
'/Contents': [IndirectObject(4870, 0), IndirectObject(4871, 0), IndirectObject(4872, 0), IndirectObject(4873, 0), IndirectObject(4874, 0), IndirectObject(4875, 0), IndirectObject(4876, 0), IndirectObject(4877, 0)],

'/CropBox': [0, 0, 595.3, 841.9],

'/MediaBox': [0, 0, 504, 661.5], '/Parent': IndirectObject(4862, 0), '/Resources': IndirectObject(4889, 0),
'/Rotate': 90,
/Type': '/Page'
}
>>> pdfWriter = PyPDF2.PdfFileWriter()
>>> pdfWriter.addPage(page)
>>> resultPdfFile = open('rotatedPage.pdf', 'wb')
>>> pdfWriter.write(resultPdfFile)
>>> resultPdfFile.close()
>>> deeplearningFile.close()

ผลลัพธ์

ทำงานกับไฟล์ PDF ใน Python หรือไม่