본문 바로가기
source-code/etc

[python] pdf 파일 내 특정 키워드 찾아 추출하기

by mattew4483 2023. 12. 5.
728x90
반응형

pdf 파일을 순회하면서, 파일 내 텍스트를 추출하고자 했다.

 

PyMuPDF 패키지 설치

pip install PyMuPDF

 

pdf 파일 읽기

import fitz  # PyMuPDF

pdf_path = './file_name.pdf'
pdf_document = fitz.open(pdf_path)

다음과 같이, 해당 경로의 pdf 파일에 접근할 수 있다.

 

해당 파일의 텍스트를 읽기 위해서는

import fitz  # PyMuPDF

pdf_path = './file_name.pdf'
pdf_document = fitz.open(pdf_path)

page_index = 0  # 페이지 번호 (0부터 시작)
page = pdf_document[page_index]
text = page.get_text()

각 page들의 index에 접근한 후, get_text 메서드를 사용해 주면 된다.

 

처음~종료 텍스트까지 추출하기

최종적으로 구현하고자 했던 건 → 해당 pdf파일의 처음부터 특정 키워드까지의 텍스트를 추출하는 것이었다.

def extract_text_from_pdf(pdf_path, end_keyword):
    pdf_document = fitz.open(pdf_path)

    # 종료 키워드 위치 찾기
    end_page_index = None
    end_index = None
    for page_number in range(0, pdf_document.page_count):
        page = pdf_document[page_number]
        text = page.get_text()
        end_index = text.find(end_keyword)
        if end_index != -1:
            end_page_index = page_number
            break

    # 종료 키워드가 발견되지 않으면 종료
    if end_index == -1:
        end_index = len(pdf_document[0].get_text())
        print(f"종료 키워드 '{end_keyword}'를 찾을 수 없습니다.")
        return None
    
    # 시작 키워드부터 종료 키워드까지의 전체 텍스트 추출
    full_text = ''
    for page_index in range(0, end_page_index+1):
        page = pdf_document[page_index]
        if (page_index == end_page_index):
        # 종료 키워드가 존재하는 페이지일 경우, 종료 키워드 index까지만 추출
            full_text += page.get_text()[0:end_index]
        else :
            full_text += page.get_text()

    return full_text

해당 기능을 구현한 함수!

 

파일 경로와 종료 키워드를 입력받아, 파일 전체를 순회하며 종료 키워드를 찾는다.

종료 키워드가 존재할 경우 해당 page의 index와, 해당 텍스트의 index를 저장!

(존재하지 않을 경우 에러를 반환했다)

 

그 후 0번째 페이지부터 종료 키워드 페이지를 순회하며, 사이에 있는 모든 텍스트들을 저장해 줬다.

 

import os

# 특정 폴더 경로
folder_path = './폴더'

# 폴더 내의 모든 파일 목록 가져오기
file_list = os.listdir(folder_path)

# PDF 파일만 선택
pdf_files = [file for file in file_list if file.lower().endswith('.pdf')]

# 선택된 PDF 파일들에 대해 작업 수행
for pdf_file in pdf_files:
    # 각 PDF 파일에 대한 작업 수행
    full_path = os.path.join(folder_path, pdf_file)
    extract_text = extract_text_from_pdf(full_path, '이유') # 처음 ~ '이유'라는 텍스트 앞까지만 추출
    save_to_csv(str(full_path), extract_text) // csv파일로 저장하는 함수

실제 해당 함수를 사용한 모습!

특정 폴더 하위의 pdf 파일들을 모두 선택한 후, 각 파일들을 순회하며 특정 키워드 앞까지의 텍스트를 추출할 수 있다!

728x90
반응형