Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬을 사용하여 PDF에서 텍스트 추출하는 방법

권현욱(엑셀러) 2024. 5. 5. 19:36
반응형

들어가기 전에

PDF 문서에서 텍스트를 추출하는 프로세스는 다양한 영역에서 사용될 수 있습니다. 전용 라이브러리와 도구의 도움으로 개발자는 쉽고 효율적으로 PDF에서 텍스트를 프로그래밍 방식으로 추출할 수 있습니다.파이썬용 Spire.PDF 라이브러리를 사용하여 PDF 문서에서 텍스트를 추출하는 방법을 소개합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

이미지: 아이엑셀러 닷컴

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: Extract Text from PDF with Python: Developer Guide
  • URL: https://python.plainenglish.io/extract-text-from-pdf-with-python-developer-guide-205141453f96

PDF 텍스트 추출을 위한 라이브러리 설치

Python용 Spire.PDF는 Python 개발자를 위한 포괄적인 PDF 조작 기능을 제공하는 전문 라이브러리입니다. Spire.PDF를 사용하면 개발자는 간단하고 직관적인 API를 사용하여 PDF 문서에서 콘텐츠를 쉽게 생성, 수정, 추출할 수 있습니다.

Spire.PDF의 주목할 만한 기능 중 하나는 검색 가능한 PDF 문서에서 텍스트 추출을 지원한다는 점입니다. 검색 가능한 PDF는 임베디드 텍스트 정보가 포함된 PDF 파일로, 프로그래밍 방식으로 텍스트를 쉽게 검색하고 추출할 수 있습니다. 이 기능은 PDF 문서에서 특정 정보를 추출하거나 텍스트 분석을 수행해야 할 때 특히 유용합니다. 이 라이브러리는 다음 pip 명령을 사용하여 Pypi에서 설치할 수 있습니다.

pip install Spire.PDF

 

파이썬으로 특정 페이지에서 텍스트 추출하기

Spire.PDF는 PDF 문서의 특정 페이지에서 텍스트를 추출하는 PdfTextExtractor 클래스와 추출 프로세스를 사용자 정의하기 위한 PdfTextExtractionOptions를 제공합니다. 제공되는 옵션에는 페이지에서 모든 텍스트 추출, 지정된 직사각형 영역에서 텍스트 추출 등이 포함됩니다. 특정 PDF 페이지에서 텍스트를 추출하려면 다음 단계를 따릅니다.

  1. 필요한 모듈을 가져옵니다.
  2. PdfDocument 객체를 만듭니다.
  3. 지정된 파일 경로에서 PDF 문서를 로드합니다.
  4. 문서에서 특정 페이지를 가져옵니다.
  5. 선택한 페이지에 대한 PdfTextExtractor 객체를 만듭니다.
  6. 추출 옵션을 정의하기 위해 PdfTextExtractOptions 객체를 만듭니다.
  7. 추출옵션 개체의 IsExtractAllText 속성을 True로 설정하여 페이지에서 모든 텍스트를 추출합니다.
  8. textExtractor 객체의 ExtractText() 메서드를 사용하여 페이지에서 텍스트를 추출하고 추출옵션 객체를 매개변수로 전달합니다.
  9. 추출한 텍스트를 "output" 디렉터리에 있는 "TextOfPageSix.txt"라는 텍스트 파일에 씁니다.
from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
doc = PdfDocument()

# Load a PDF document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\privacy policy.pdf")

# Get a specific page
page = doc.Pages[5]

# Create a PdfTextExtractor object
textExtractor = PdfTextExtractor(page)

# Create a PdfTextExtractOptions object
extractOptions = PdfTextExtractOptions()

# Set IsExtractAllText to Ture
extractOptions.IsExtractAllText = True

# Extract text from the page keeping white spaces
text = textExtractor.ExtractText(extractOptions)

# Write text to a txt file 
with open('output/TextOfPageSix.txt', 'w') as file:
    lines = text.split("\n")
    for line in lines:
        if line != '':
            file.write(line)
doc.Close()

 

(이미지: medium)

 

라이브러리에는 PDF 문서의 처음 10페이지에서만 텍스트를 추출할 수 있는 제한이 있습니다. 또한 생성된 텍스트 파일에는 "평가 경고"라는 줄이 포함되어 있습니다: 이 문서는 Python용 Spire.PDF로 작성되었습니다."라는 줄이 있습니다. 이러한 제한을 제거하려면 공급업체로부터 30일 평가판 라이선스를 받는 옵션이 있습니다.

파이썬으로 직사각형 영역에서 텍스트 추출하기

페이지에서 텍스트 추출을 위해 직사각형 영역을 정의하려면 PdfTextExtractOptions 객체의 ExtractArea 속성을 활용하면 됩니다. 그런 다음 PdfTextExtractor를 호출할 때 PdfTextExtractOptions 객체를 매개변수로 전달합니다. ExtractText() 메서드를 호출할 때 매개 변수로 전달합니다. 다음 단계는 PDF 페이지의 직사각형 영역에서 텍스트를 추출하는 과정을 간략하게 설명합니다.

  1. 필요한 모듈을 가져옵니다.
  2. PdfDocument 객체를 만듭니다.
  3. PDF 문서를 로드합니다.
  4. 특정 페이지를 가져옵니다.
  5. 선택한 페이지에 대한 PdfTextExtractor 객체를 만듭니다.
  6. 추출 옵션을 정의하기 위해 PdfTextExtractOptions 객체를 만듭니다.
  7. 추출 옵션 개체의 ExtractArea 속성을 통해 직사각형의 치수를 지정합니다.
  8. 추출 텍스트() 메서드와 제공된 추출 옵션 을 사용하여 지정된 직사각형 영역에서 텍스트를 추출합니다.
  9. 추출된 텍스트를 "TextOfRectangleArea.txt"라는 텍스트 파일에 씁니다.
from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
doc = PdfDocument()

# Load a PDF document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\privacy policy.pdf")

# Get a specific page
page = doc.Pages[5]

# Create a PdfTextExtractor object
textExtractor = PdfTextExtractor(page)

# Create a PdfTextExtractOptions object
extractOptions = PdfTextExtractOptions()

# Specify the dimensions of the rectangular area
extractOptions.ExtractArea = RectangleF(0.0, 210.0, page.Size.Width, 210.0 + 60.0)

# Extract text from the page keeping white spaces
text = textExtractor.ExtractText(extractOptions)

# Write text to a txt file 
with open('output/TextOfRectangleArea.txt', 'w') as file:
    lines = text.split("\n")
    for line in lines:
        if line != '':
            file.write(line)
doc.Close()

 

(이미지: medium)

 

전체 PDF 문서에서 텍스트 추출하기

코드의 초기 부분은 단일 페이지에서 텍스트를 추출하는 과정을 보여줍니다. 그러나 전체 PDF 문서에서 텍스트를 추출하려면 문서의 페이지를 반복하고 각 페이지에서 텍스트를 순차적으로 검색하는 방식으로 기능을 확장할 수 있습니다.

from spire.pdf.common import *
from spire.pdf import *

# Create a PdfDocument object
doc = PdfDocument()

# Load a PDF document
doc.LoadFromFile("C:/Users/Administrator/Desktop/privacy policy.pdf")

# Iterate through the pages in the document
for i in range(doc.Pages.Count):

    # Get a specific page
    page = doc.Pages[i]

    # Create a PdfTextExtractor object
    textExtractor = PdfTextExtractor(page)
    
    # Create a PdfTextExtractOptions object
    extractOptions = PdfTextExtractOptions()
    
    # Set IsExtractAllText to Ture
    extractOptions.IsExtractAllText = True
    
    # Extract text from the page keeping white spaces
    text = textExtractor.ExtractText(extractOptions)
    
    # Write text to a txt file 
    with open('output/TextOfPage-{}.txt'.format(i + 1), 'w') as file:
        lines = text.split("\n")
        for line in lines:
            if line != '':
                file.write(line)
doc.Close()

Excel과 VBA의 모든 것 아이엑셀러 닷컴 · 강사들이 숨겨 놓고 보는 엑셀러TV