안녕하세요.
이번 시간에는 문서내의 한자를 한글로 자동 변환하는 프로그램을 짜보도록 하겠습니다.
아래는 목포시에 대한 설명입니다.
문서의 일부에 한자가 들어가 있네요.
일일이 F9 키를 누르면 변환하는게 힘드셨을 겁니다.
그럼 코딩 내용 들어가겠습니다.
먼저 관련 라이브러리를 불러와 줍니다.
# -*- coding: cp949 -*-
import win32com.client as win32
import os
import fnmatch
한글 개체를 불러와 주고요.
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
폴더내의 모든 파일을 검색합니다.
dir1=os.getcwd()
dir1="E:/han/문서/"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)
한글파일을 열어줍니다.
for file in filename:
hwp.Open(dir1+file, "HWP", "forceopen:true")
그리고 맨마지막으로 커서를 옮깁니다.
hwp.MovePos(3, 0, 0)
그리고 맨 마지막 위치에서 거꾸로 검색했을 때 첫번째의 문자를 선택해줍니다.
말이 복잡한데 결론적으로는 문서내의 맨 마지막에 위치한 문자를 선택합니다.
hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
option = hwp.HParameterSet.HFindReplace
option.FindString = "?"
option.UseWildCards = 1;
option.IgnoreMessage = 1;
option.Direction = hwp.FindDir("Backward");
hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
맨 마지막 문자의 위치를 저장해줍니다.
Set = hwp.GetPosBySet()
list1 = Set.Item("List")
para1 = Set.Item("Para")
pos1 = Set.Item("Pos")
그리고 다시 문서의 처음 위치로 오고요.
hwp.MovePos(2, 0, 0)
맨 처음부터 한글자 한글자 검색하여 이동합니다.
while(1):
hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
option = hwp.HParameterSet.HFindReplace
option.FindString = "?"
option.UseWildCards = 1;
option.IgnoreMessage = 1;
option.Direction = hwp.FindDir("Forward");
hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
한자로 되어 있으면 한글로 변환합니다.
hwp.HAction.GetDefault("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);
hwp.HAction.Execute("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);
변환을 할 때 한자 음이 하나이면 자동으로 변환이 되나 음이 여러개이면 선택해야 합니다.
가령 傳說 할 떄 의 說은 4개의 음이 있습니다. 따라서 4개의 음 중에 선택을 해야하는데요
관련해서 아래와 같은 창이 뜨고 어떤 음을 쓸지 선택을 해줘야 합니다.
현재위치를 구하고요.
set = hwp.GetPosBySet()
list2 = set.Item("List")
para2 = set.Item("Para")
pos2 = set.Item("Pos")
만약에 현재의 위치가 아까전에 저장해 두었던 문서의 마지막 문자의 위치와 같으면 루프문을 빠져나오고요.
if (list1==list2 and para1==para2 and pos1==pos2):
break
문서를 저장하고
hwp.Clear(3);
한글을 종료합니다.
hwp.Quit()
아래는 변환할 때의 동영상입니다.
최종적으로는
한자가 한글로 잘 변환되었네요!!
궁금하신 사항있으시면 댓글부탁드립니다.
감사합니다.
# -*- coding: cp949 -*-
import win32com.client as win32
import os
import fnmatch
import time
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
dir1=os.getcwd()
dir1="E:/han/문서/"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)
for file in filename:
hwp.Open(dir1+file, "HWP", "forceopen:true")
hwp.MovePos(3, 0, 0)
hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
option = hwp.HParameterSet.HFindReplace
option.FindString = "?"
option.UseWildCards = 1;
option.IgnoreMessage = 1;
option.Direction = hwp.FindDir("Backward");
hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
Set = hwp.GetPosBySet()
list1 = Set.Item("List")
para1 = Set.Item("Para")
pos1 = Set.Item("Pos")
hwp.MovePos(2, 0, 0)
while(1):
hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
option = hwp.HParameterSet.HFindReplace
option.FindString = "?"
option.UseWildCards = 1;
option.IgnoreMessage = 1;
option.Direction = hwp.FindDir("Forward");
hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
hwp.HAction.GetDefault("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);
hwp.HAction.Execute("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);
set = hwp.GetPosBySet()
list2 = set.Item("List")
para2 = set.Item("Para")
pos2 = set.Item("Pos")
if (list1==list2 and para1==para2 and pos1==pos2):
break
hwp.Clear(3);
hwp.Quit()
'파이썬 > 한글 자동화' 카테고리의 다른 글
[파이썬] 한글 양식개체 정보 엑셀로 옮기기 (1) | 2020.07.30 |
---|---|
[파이썬] 한글파일 하나로 합치기 (3) | 2020.07.24 |
[파이썬] 한글파일 내 그림 추출하기 (0) | 2020.07.22 |
[파이썬] 한글파일을 엑셀로 옮기기 (16) | 2020.07.20 |
[파이썬] 여러 한글파일 내 전화번호 삭제하기 (0) | 2020.07.15 |