반응형
pyhwpx는
win32 기반의 한/글 오토메이션 API 명령어의 복잡성을 보완하고자
업무자동화에 사용되는 여러 가지 상위기능들을 메서드로 제공합니다.
아래와 같은 문서가 있을 때,
아래와 같은 교정단어 사전을 통해
교정하고자 하는 단어에 메모고침표를 달아주는 것이 목표입니다.
# 교정대상 단어 예시자료(dict)
word_dict = {
"가감": "→더하고 빼기, 더하거나 빼기",
"가건물": "→임시 건물",
"가결의": "→임시 결의",
"가공": "→영향을 미치다",
}
결과물이 대략 다음과 같을 때,
기존 win32com과 한/글 오토메이션 API를 사용한 전통적인(?) 코드는 대략 아래와 같습니다.
import os
import win32com.client as win32
from tkinter import Tk
from tkinter.filedialog import askopenfilename
과정보기 = True
데이터 = {"가감": "→더하고 빼기, 더하거나 빼기, 가감",
"가건물": "→임시 건물, 가건물",
"가결의": "→임시 결의",
"가공": "→영향을 미치다"}
def 시작(과정보기=True):
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
hwp.XHwpWindows.Item(0).Visible = 과정보기
return hwp
def 찾아가기(단어):
hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet)
hwp.HParameterSet.HFindReplace.ReplaceString = ""
hwp.HParameterSet.HFindReplace.FindString = 단어
hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward")
hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
hwp.HParameterSet.HFindReplace.FindType = True
hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet)
def 메모고침표삽입(선택단어):
hwp.HAction.Run("InsertFieldRevisionChagne")
hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
hwp.HParameterSet.HInsertText.Text = 데이터[선택단어]
hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
hwp.HAction.Run("CloseEx")
if __name__ == '__main__':
root = Tk()
문서 = askopenfilename(title="교정할 HWP문서를 선택하세요.", initialdir=os.getcwd())
root.destroy()
hwp = 시작(과정보기)
hwp.Open(문서)
단어위치 = dict()
for 단어 in 데이터:
hwp.MovePos(2)
while True:
찾아가기(단어)
if hwp.SelectionMode:
단어위치[hwp.GetPos()] = 단어
else:
break
단어위치keys = sorted(단어위치.keys(), reverse=True)
for 위치 in 단어위치keys:
hwp.SetPos(*위치)
for _ in range(len(단어위치[위치])):
hwp.Run("MoveSelLeft")
메모고침표삽입(단어위치[위치])
(tkinter GUI 관련한 다섯 줄을 빼고도) 60라인 정도입니다.
근데 pyhwpx를 사용하면
아래와 같이 작성하실 수 있습니다.
"""
문서 안에 해당 용어가 몇 번 출현하는지만 세고,
for문을 통해 해당 횟수만큼만 "찾아서 메모 추가하기"를 실행
"""
from pyhwpx import Hwp
word_dict = {
"가감": "→더하고 빼기, 더하거나 빼기",
"가건물": "→임시 건물",
"가결의": "→임시 결의",
"가공": "→영향을 미치다",
}
hwp = Hwp()
hwp.open("ㅇㅇ 가감 ㅇㅇ.hwp")
content = hwp.get_text_file()
for word in word_dict.keys():
count = content.count(word)
for i in range(count):
hwp.find(word, "Backward") # 캐럿 위쪽으로 탐색
hwp.insert_memo(word_dict[hwp.get_selected_text()])
이를테면
find, insert_memo나 get_selected_text 같은
범용 함수를 메서드로 미리 정의하여 제공하는 방식입니다.
현재 지속적으로 다양한 메서드를 기획하고 선별해서 추가하고 있습니다.
("범용"의 범위가 어디까지인지 정의하는 게 쉽지는 않네요.)
마음 같아선 matplotlib+seaborn이나 keras+tensorflow의 관계처럼
win32와 당당히 병행할 수 있는 훌륭한 모듈을 만들어내고 싶습니다.
많은 관심 부탁드립니다.
pip install pyhwpx
명령어로
간편히 설치하실 수 있습니다.
반응형
'아래아한글 자동화 > pyhwpx 사용법' 카테고리의 다른 글
pyhwpx로 필드 채우는 방법 기초(중요) (0) | 2023.12.26 |
---|---|
문서의 표를 csv나 판다스 데이터프레임으로 추출하는 메서드 # table_to_csv # table_to_df (0) | 2023.12.01 |
문서를 불러와서 저장하거나 다른이름으로 저장하는 방법 (2) | 2023.11.30 |
댓글