본문 바로가기

카테고리 없음

파이썬 PDF 데이터 파싱하기

pdf 문서에서 필요한 정보 가져오기

 

pdf 파일에서 데이터 파싱 하는 방법에 대해 소개하려 합니다. 한두 개의 파일에서 추출하는 것이라면 단순 드래그+복사+붙여 넣기의 작업으로도 충분합니다. 그러나 데이터가 많다면 꽤나 비효율적이게 됩니다. 파이썬 패키지를 활용하면 데이터 수집에 큰 도움이 될 수 있습니다.

 

필요한 라이브러리 설치

pip3 install pdfminer
pip install beautifulsoup4

pdfminer는 pdf 파일을 html 형식으로 변경시키는 라이브러리입니다. 

beautifulsoup은 html 형식의 데이터를 처리하는 라이브러리입니다. 

pdf 파일을 html로 변경한 뒤 데이터를 파싱합니다.

 

1. PDF -> html

pdf2txt.py -o output.html paper.pdf

여기서 paper.pdf 는 BERT논문 파일입니다. 위의 커맨드를 입력하면 output.html이라는 파일이 생성됩니다.

 

2. html read

from bs4 import BeautifulSoup

url = "output.html"
page = open(url)
soup = BeautifulSoup(page.read())

print(soup)

output.html 파일을 BeautifulSoup을 통해 데이터를 읽습니다.

soup를 출력해보면 웹에서 보던 형식과 다른 것을 볼 수 있습니다. pdf파일을 html로 변환 시 보통 한 줄 단위로 텍스트가 들어있습니다.

3. get_text()

soup.get_text()

get_text()를 통해 텍스트만 가져올 수 있습니다. BERT 논문의 경우 get_text만 사용해도 나름 괜찮은 결과를 볼 수 있습니다. 그러나 페이지 두 개가 같이 들어있거나 pdf 만들 때 설정 차이 등의 이유로 다른 방식을 사용해야 하는 경우도 있습니다.

 

4. find_all()

soup.find_all('div')
# soup.find('div', style=lambda value: value and 'left:408px' in value and 'height:9px' in value)

결국 pdf 파일의 특성을 파악해야 합니다. 파악이 끝나면 정규 표현식과 람다 표현식 등을 사용하여 원하는 데이터를 원하는 형태로 파싱 할 수 있습니다. 두 페이지가 같이 있는 경우 텍스트의 left px 값을 통해 왼쪽, 오른쪽 페이지의 텍스트를 구분할 수 있습니다.

 

beautifulsoup의 자세한 사용법은 공식 문서나 구글링 하면 많이 나오니 참고하면 좋습니다.

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

 

Beautiful Soup Documentation — Beautiful Soup 4.9.0 documentation

Non-pretty printing If you just want a string, with no fancy formatting, you can call str() on a BeautifulSoup object, or on a Tag within it: str(soup) # ' I linked to example.com ' str(soup.a) # ' I linked to example.com ' The str() function returns a str

www.crummy.com

https://wikidocs.net/85739

 

2.6 사이트 정보 추출하기 - beautifulsoup 사용법 (1)

# BeautifulSoup가 필요한 이유 request.text를 이용해 가져온 데이터는 **텍스트형태의 html **입니다. 텍스트형태의 데이터에서 원하는 html ...

wikidocs.net

 

 

요즘 데이터 확보의 중요성을 느끼고 있습니다. 데이터 자체가 워낙 다양한 형태로 존재하다 보니 여러 가지 파싱 전략을 가는 것도 중요해 보입니다.