본문 바로가기

아래아한글 자동화/python+hwp 중급182

[7/8] 특정 이름으로 이미지 저장하기 def ctrl로_이동하기(ctrl): loc_set = ctrl.GetAnchorPos(0) hwp.SetPosBySet(loc_set) def 이미지저장(제목함수): ctrl = hwp.HeadCtrl # 첫 번째 컨트롤부터 탐색 이미지번호 = 1 이전제목 = "" while ctrl != None: if ctrl.CtrlID == "gso": # "그림"이면 ctrl로_이동하기(ctrl) hwp.Run("CloseEx") # 표 안에 있는 경우, 표 밖으로 나옴 제목 = 제목함수(hwp.GetPos()[1]) if 이전제목 != 제목: 이미지번호 = 1 # 폴더별로 1번부터 시작하기 위함 이전제목 = 제목 ctrl로_이동하기(ctrl) hwp.FindCtrl() hwp.HAction.Run("Pic.. 2022. 10. 25.
[6/8] 제목리스트로 하위폴더 만들기 이번 포스팅은 짧게 설명드리고 마치겠습니다. from pathlib import Path def 제목폴더_만들기(title_list): for title in title_list: Path.mkdir(취합폴더/"취합사진"/title, parents=True, exist_ok=True) 취합폴더 = Path(r"C:\Users\smj02\Desktop\취합문서") 제목리스트, _ = 제목뽑기() 제목폴더_만들기(제목리스트) 위 코드를 복붙해서 실행해보면, 취합폴더 하위에 "취합사진"이라는 폴더가 생성되고, 그 아래에 제목리스트의 각 제목 이름으로 빈 하위폴더들을 생성했습니다. 폴더생성 작업은 pathlib.Path 클래스를 활용했습니다. Path().mkdir 메서드의 파라미터 중 parents=True는.. 2022. 10. 25.
[5/8] 문서에서 제목 추출하기 이전 포스팅까지는 이미지를 저장하는 프로세스를 구현해보았습니다. 이번 포스팅부터는 문단제목을 추출하는 작업을 해보겠습니다. 기본적으로 한/글 프로그램은 찾기/찾아바꾸기 기능이 잘 구현되어 있습니다. 매크로 추출을 해 보면, 다양한 옵션도 활용이 가능하고요. 그런데, 탐색한 문자열을 파이썬으로 추출해서 활용하려면 번거로운 추가작업이 필요합니다. 이를테면, 문단의 끝까지 추가선택한 후, 복사해서 클립보드로 옮기고 파이썬으로 클립보드의 문자열을 추출해야 한다든지요. 번거롭습니다. 그런데 한/글에서는 이런 일련의 과정을 간결하게 덜어주는 GetText라는 메서드가 존재합니다. GetText, 한/글 자동화 고급과정의 첫걸음① (tistory.com) GetText, 한/글 자동화 고급과정의 첫걸음① 안녕하세요?.. 2022. 10. 25.
[4/8] 캐럿을 개체 앞으로 이동하는 방법 이전 포스팅에서 hwp.FindCtrl()을 실행하면 캐럿과 인접한 개체(이미지)가 선택되는 것을 보여드렸습니다. 이 시점부터는 "개체"라는 용어 대신 "컨트롤(Ctrl)"이라는 용어를 사용하겠습니다. 한/글 내부적으로 통용되는 용어이니 익숙해지시길 바랍니다. 그런데, 캐럿을 컨트롤(표, 이미지, 차트 등) 앞으로 옮기려면 어떻게 해야 할까요? 모든 컨트롤은 연결되어 있기 때문에 우선 한/글 문서의 모든 컨트롤들은 "linked list"라는 자료형으로 모두 연결되어 있습니다. 그래서, 특정 컨트롤을 선택하려면 문서의 첫 번째 컨트롤인 hwp.HeadCtrl이나 마지막 컨트롤인 hwp.LastCtrl에서부터 시작해서 Next 또는 Prev 명령어로 순차적인 탐색을 해야 합니다. 현재 탐색중인 컨트롤의 타.. 2022. 10. 25.
[3/8] 이미지를 선택하는 방법 이전 포스팅에서는 이미지를 추출하는 함수를 실행하려면 우선 해당 이미지를 마우스로 선택해야 했습니다. 이 과정을 파이썬 코드로 대체해보겠습니다. 개체 선택 과정은 어찌 보면 간단합니다. 딱 두 단계입니다. 1. 캐럿을 개체 바로 앞이나 뒤로 이동 2. hwp.FindCtrl()을 실행하면 개체 선택됨 위의 영상처럼 hwp.FindCtrl()을 실행하면 이미지가 선택되기는 하는데, (문제는) 캐럿을 개체 앞으로 이동하는 코드가 솔직히 조금 복잡합니다. 캐럿을 개체 앞으로 이동하는 코드는 다음 포스팅에서 자세히 알려드리겠습니다. 2022. 10. 25.
[2/8] 선택한 그림을 파일로 저장하기 def 그림추출(): hwp.HAction.GetDefault("ShapeObjSaveAsPicture", hwp.HParameterSet.HShapeObjSaveAsPicture.HSet) hwp.HParameterSet.HShapeObjSaveAsPicture.Path = "c:/users/smj02/desktop/취합문서/1.jpg" # 저장하고자 하는 절대경로 hwp.HParameterSet.HShapeObjSaveAsPicture.Ext = "JPG" # 포맷은 대문자로 입력 hwp.HAction.Execute("ShapeObjSaveAsPicture", hwp.HParameterSet.HShapeObjSaveAsPicture.HSet) 문서에서 선택된 이미지를 저장하는 간단한 네 줄 짜리 함수.. 2022. 10. 25.
[1/8] 한글프로그램 실행/종료 및 문서 열고 닫는 함수 import win32com.client as win32 def 한글프로그램_실행(visible=True): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") # 한/글 프로그램 실행 hwp.XHwpWindows.Item(0).Visible = visible # 기본값 = 백그라운드 해제 hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") # 보안모듈 실행 return hwp def 문서열기(한글파일): hwp.Open(한글파일) def 현재문서닫기(): hwp.Clear(option=1) # 1:문서 닫기(변경내용 버림) def 한글프로그램_종료(): hwp.Quit() 한/글 프로그램을.. 2022. 10. 25.
[0/8] 문서 이미지 일괄저장시 파일명에 제목 넣기(인트로) 개요 대체로 주무부서에서는 소속팀이나 기관에 뿌렸던 문서를 취합 후 가공, 병합하여 보고서로 만드는 일이 많습니다. 이번 튜토리얼에서는 취합한 hwp 문서들의 이미지를 일괄로 추출하여 저장하되 이미지명에 해당 문단의 제목(예: "□ 제목"), 파일명(예: 부서이름), 페이지를 넣고, 제목 이름의 폴더들을 생성하여 그 안에 이미지를 저장하는 일련의 과정을 진행해보겠습니다. 예를 들자면 이런 식입니다. 아래와 같은 문서서식이 있습니다. 세 개의 팀(알파, 베타, 감마)으로부터 아래와 같은 문서를 취합하였습니다. 문서에는 각각 "나무사진", "꽃사진", "풀사진" 이라는 제목 아래에 1x2 크기의 표에 이미지가 각각 두 장씩 들어 있습니다. 위와 같은 문서에 삽입된 이미지를 아래와 같이 저장하고자 합니다. 우.. 2022. 10. 24.
정부부처 보도자료에 필드가 적용되어 요약 언어모델 데이터셋 만들기 쉬워졌다 과기정통부와 행안부 보도자료를 살펴보다가 재미있는 점을 두 가지 발견했습니다. 하나는, 보도자료에 machine-readable한 hwpx 포맷으로 바뀌어가고 있다는 점이며 다른 하나는 올해 초, 1월 말 경부터 한/글 문서에 필드와 누름틀이 매겨지고 있다는 점입니다. 이 두 가지는 항상 양질의 데이터에 배고픈 요즘 시대에 아주 큰 강점이 됩니다. 예를 들어보겠습니다. 1. 뉴스기사 크롤링할 때 얼마 전부터 KoGPT나 KoBART 등 한국어 대규모 언어모델이 개발되고 있는데, 학습데이터셋 대부분은 웹에 공개된 언론 뉴스기사나 위키자료 등이죠. 크롤링으로 대규모의 자료를 스크랩해오더라도 데이터셋의 전/후처리가 쉽지 않은데, 그 이유는 언론사마다 제각각인 시맨틱 태그, 맥락없이 중간중간 삽입된 사진설명, .. 2022. 9. 22.