본문 바로가기

Data handling/한글(hwp) 파일 핸들링

[pyhwp] Python3으로 한글(hwp)파일 txt로 변환하기 feat. jupyter notebook

대량의 코퍼스를 수집하다 보면 다양한 형식의 파일을 수집하게 됩니다. 파일의 형식은 대부분 텍스트 파일(.txt)로 통일하여 합칩니다.

그런데, 다른 형식의 파일들과 달리 문제가 되는 아이가 있습니다:

한글(hwp) 파일!!!!!!

hwp 안의 글을 파싱해서 가져와야 하는 경우, 단순히 read 함수로 읽으면 알아볼 수 없는 문자로 출력이 됩니다. 강제로 형식을 바꿔도 마찬가지입니다. 그렇다고 대용량 코퍼스를 모두 복사 붙여 넣기 하는 것은 말이 안 되죠. 한국의 많은 텍스트 데이터가 hwp로 되어있기에, 포기할 수도 없습니다.

 

따라서, 파이썬으로 내부에 있는 텍스트만 긁어오거나, 깨지지 않게 txt파일로 바꾸는 방법을 찾고 있었습니다.

 

그리고 마침내, Python3에서 hwp를 깨지지 않게 다양한 확장자로 바꾸어주는 라이브러리를 찾았습니다.

바로 pyhwp!

원래는 python2만 지원을 했는데, 얼마전부터 python3도 지원을 합니다.


 

pyhwp Example

자세한 내용은 밑의 공식 문서를 참조하세요:

https://pyhwp.readthedocs.io/en/latest/converters.html#hwp5txt-text-conversion

1. pyhwp 설치하기

pip install --user --pre pyhwp  # Install pyhwp into user's home directory

 

cmd창, 혹은 Anaconda Prompt 아무 데나 설치하면 됩니다.

설치되었는지 확인은 cmd창에서 밑의 코드로 확인할 수 있습니다.

 

hwp5txt -version

 

2. 프롬프트에서 사용하기

기본적인 사용법은 다음과 같습니다:

 

    1. 변환하고 싶은 파일이 있는 폴더로 열심히 이동한다.

    2. 다음의 형식에 맞춰 프롬프트에 명령한다.

hwp5txt --output "변환된_텍스트_파일명" "변환하고_싶은_한글파일.hwp"

위의 코드를 치면 바로 hwp => txt 파일로 변환되어 저장됩니다!

 

--output을 따로 지정해주지 않는다면 프롬프트에 텍스트가 출력됩니다.

3. Jupyter notebook에서 사용하기

먼저 os 모듈을 임포트 해줍니다.
os모듈은 Operating System의 약자로서 운영체제에서 제공되는 여러 기능을 파이썬에서 수행할 수 있게 합니다.

 

import os

 

다음으로는 변환하고 싶은 한글 파일의 경로를 지정해줍니다.

path = "변환하고 싶은 한글 파일의 경로" 
exefile = 'hwp5txt'

 

exefile 변수를 따로 지정한 이유는 pyhwp는 txt뿐만 아니라, html과 odt 형식으로도 바꾸는 exe 파일이 있기 때문입니다.

 

- Converters (Experimental)

        - hwp5odt: ODT conversion

        - hwp5html: HTML conversion

        - hwp5txt: text conversion

 

#for path in pathlist:
res = []
for root, dirs, files in os.walk(path):
    rootpath = os.path.join(os.path.abspath(path), root)
    for file in files:
        filepath = os.path.join(rootpath, file)
        res.append(filepath) 

    for result in res:
        filename = result[:-4]+ ".txt"
        output = '--output ' + '"' + filename + '"'
        result = '"' + result + '"'
        print(exefile + " " + output + " " + result)
        os.system(exefile + " " + output + " " + result)

@. pyhwp arguments

hwp5txt [-h] [--version] [--loglevel LOGLEVEL] [--logfile LOGFILE]
               [--output OUTPUT]
               <hwp5file>

--version : show program’s version number and exit

--loglevel : Set log level.

--logfile : Set log file.

--output : Output file

 


출처: https://privatedevelopnote.tistory.com/81 [개인노트]