안녕하세요.

 

이번 시간에는 문서내의 한자를 한글로 자동 변환하는 프로그램을 짜보도록  하겠습니다.

 

아래는 목포시에 대한 설명입니다.

 

문서의 일부에 한자가 들어가 있네요.

 

일일이  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()

+ Recent posts