본문 바로가기

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

[Python3] hwp 파일 글상자 내 텍스트 추출하기

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

 

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

 

이전 포스트에서 이를 pyhwp를 사용해 txt 파일로 변환하는 방법을 알아보았습니다.

2020/06/13 - [Data handling/한글(hwp) 파일 핸들링] - [pyhwp] Python3으로 한글(hwp)파일 txt로 변환하기 feat. jupyter notebook


그런데, 큰 문제가 하나 생겼습니다.

 

글상자글상자2

 

 

pyhwp는 전체 선택(ctrl+A)를 했을 때 선택이 되는 텍스트만을 txt 파일로 변환해줍니다. 그런데, 보시다 시피 글상자 내의 텍스트 파일은 전체 선택(ctrl+A)로 선택할 수 없습니다.

 

즉, 글상자에 있는 내용은 txt로 변환이 되지 않습니다. 그런데, 글상자에 있는 텍스트를 모두 버리기에는 사람들이 글상자에 글을 쓰는 경우가 생각보다 많더군요,,

 

그래서 글상자에 있는 텍스트 추출 방법을 알아내고 이를 코드로 자동화 처리해 보았습니다.

 

 


 

1. 글상자 내 텍스트 선택하기

1) 텍스트를 추출하고 싶은 글상자를 선택, 복사(ctrl+C) 뒤 삭제한다.

글상자3

 

2) 골라 붙이기(ctrl+Alt+V)를 누른다.

 

3) 텍스트 형식을 선택한다.

 

 

4) 결과물은 다음과 같다:

글상자6

 


 

2. hwp 파일 python으로 수정하기

  • 필요한 모듈을 임포트해줍니다.

import os
import win32com.client as win32

 

win32com은 window에서 파이썬을 이용하여, Active X함수를 호출할 수 있게 도와줍니다.

[Active X란] : 마이크로소프트에서 만든 COM(Component Object Model)과 OLE(Object Linking and Embedding) 기술 두 개를 합쳐서 이름을 새로 붙여준 것. 실행 바이너리를 패키징하여 다른 프로그램에서 쉽게 사용할 수 있도록 객체지향적 인터페이스를 만드는 기술이다.

pathlist = ["C:/Users/수정하고 싶은 hwp파일들이 있는 폴더명"]

 

res = []
for path in pathlist:
    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) 

 

 # 한/글 개체 생성
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")


for path in res:
    # 파일을 열어줍니다. 

    hwp.Open(path, "HWP", "forceopen:true")

    # 원하는 작업을 수행합니다. 

    hwp.Run("SelectAll") # 전체 선택
    hwp.Run("Copy") # 복사
    # hwp.MovePos(3) 맨 뒤로 이동
    hwp.Run("Erase") # 지우기
    hwp.Run("PasteSpecial") # 골라 붙이기
    hwp.Run("Cancel") # esc

    # 수정된 파일을 저장하고 나갑니다. 

    hwp.Save()
    hwp.Quit()

 

정리하자면, 전체선택 =>지우기 => 골라붙이기 => 텍스트 순으로 하면 됩니다.


다행인 것은 글상자에 있는 내용뿐 아니라 나머지 텍스트도 추출이 된다는 점입니다.

즉, 위의 것을 실행한 후, txt파일로 바꾸면 된다는 것이죠!

 


 

@. HWP 명령어 모음

위에 기술된 것 말고도, hwp 객체를 이용해 다양한 작업을 수행할 수 있습니다.
다음은 명령어의 모음입니다.

명령어 작업
hwp.Open() 불러오기
hwp.Save() 저장하기
hwp.SaveAs("") 다른 이름으로 저장하기
hwp.Run("Undo") 되살리기
hwp.Run("Redo") 다시 실행
hwp.Run("Cut") 오려두기
hwp.Run("Copy") 복사하기
hwp.Run("Erase") 지우기
hwp.Run("Paste") 붙이기
hwp.Run("PasteSpecial") 골라 붙이기
hwp.Run("SelectAll") 모두 선택
hwp.Run("Select") 선택
hwp.Run("Cancel") 취소 ESC
hwp.Run("FindDlg") 찾기
hwp.Run("ReplaceDlg") 찾아 바꾸기
hwp.Run("AllReplace") 모두 바꾸기
hwp.Run("CharShapeBold") 볼드체
hwp.Run("CharShapeItalic") 이태릭체
hwp.MovePos(3) 맨 뒤로 이동

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