본문 바로가기
아래아한글 자동화/pyhwpx 사용법

[pyhwpx] 한 줄의 코드로 자간자동조절 : auto_spacing

by 일코 2024. 1. 26.

별 것 아니지만 불편해 보이는, 쪼개진 단어들ㅜ

 

아래아한글 보고서 작성할 때,
자간 조절 작업만큼
사람 기빠지게 하는 작업이 또 있을까요ㅜ

맞아요. 힘들어서가 아니라,
자괴감이 들지요.

격한 공감ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ

 

윗분들은... 그냥 읽으시면 되는데,
외국인들은 자간조절 같은 거 안 하고 그냥 단어단어 끊어서 잘만 쓰던데..
"보기 좋다는" 보고서를 만들기 위해
자간조절 따위에 시간을 쓰고 있으면 정말 스트레스 받습니다.

팀장, 처장, 본부장, 사장이라는 사람들이
줄글에 단어 하나 끊어졌다고 문맥파악 못 하는 것도 아니고,
보고서 읽는 시간이 엄청 길어지는 것도 아닌데ㅜ

이상한 공무행정 관행이 우리나라에만 유난히 굳어져 있는 것 같아요.

그럼에도 하여튼,

이런 자간조절 작업 때문에 퇴근을 10분 더 늦게 하는 분들을 위해
auto_spacing 메서드를 pyhwpx에 추가했습니다.

소개가 거창하네요...

 

사용법은 아래와 같이 간단합니다.

from pyhwpx import Hwp

hwp = Hwp()
hwp.open("자간줄이기예문.hwp")

hwp.auto_spacing(
    init_spacing=0,  # 문서 내 모든 텍스트의 자간을 0으로 초기화(변경가능)
    init_ratio=100,  # 문서 내 모든 텍스트의 장평을 100으로 초기화(변경가능)
    max_spacing=50,  # 최대자간(그 이상 자간을 벌려야 하는 경우 초기값으로 되돌리고 해당라인 출력)
    min_spacing=-50,  # 최소자간(그 이하 자간을 벌려야 하는 경우 초기값으로 되돌리고 해당라인 출력)
    verbose=True  # 자간조정한 라인별로 로그 출력
)

현재 제공하는 파라미터는 위의 다섯 개입니다.
기본값으로 설정되어 있으므로 생략하셔도 되지만,
최대/최소 자간을 수정하고 싶거나,
장평90/자간-5 등 기관 권장서식이 있는 경우에는
필요에 따라 기본값을 설정하시면 됩니다.
메서드 실행시 문서내 모든 영역의 자간과 장평을 파라미터에 입력한 값으로 초기화하고
자간 자동조절 작업을 시작합니다.

로그출력기능 제공을 제공하고 있습니다.

문서가 긴 경우, 자동자간조정 후에 결과물 검토에 드는 시간도 무시할 수 없습니다.
hwp.auto_spacing은 자간평균, 표준편차(?) 및 최대/최소값과 라인별 조정결과값을 각각 출력해줍니다.
(만약 출력을 원하지 않으시면 verbose=False로 설정하시면 됩니다.)

시연화면은 아래와 같습니다.

예시문서는 영상 밑에 첨부해 두었습니다. 한글2018로 작성되었습니다.
auto_spacing으로 자간자동조절기능 실행 (시연은 1분 15초부터)

출력결과를 보니,

자동 치고는 나름 잘 처리해 줬네요.

Before / After

아래와 같은 출력결과도 나왔습니다.

더보기
1쪽 1단 2줄(또는 직권으로 총리령 또는 부령을 발할 수 있다. 국회의원은  ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ 
국가이익을 ) : -1
1쪽 1단 4줄(없다. 모든 국민은 학문과 예술의 자유를 가진다. 비상계엄하의 군사재판은 ) : -2
1쪽 1단 6줄(군인·군무원의 범죄나 군사에 관한 간첩죄의 경우와 초병·초소·유독음식물공급·포로에) : -11
1쪽 1단 6줄(관한 죄중 법률이 정한 경우에 한하여 단심으로 할 수 있다. 다만, 사형을 ) : 0
1쪽 1단 7줄(선고한 경우에는 그러하지 아니하다. 국가원로자문회의의 조직·직무범위 기타 ) : -4
1쪽 1단 8줄(필요한 사항은 법률로 정한다. 사회적 특수계급의 제도는 인정되지 아니하며, ) : -4
1쪽 1단 15줄(국가원로자문회의의 조직·직무범위 기타 필요한 사항은 법률로 정한다. 모든 ) : -3
2쪽 1단 2줄(한 경우에 한하여 법률로써 제한할 수 있으며, 제한하는 경우에도 자유와 ) : 1
2쪽 1단 7줄(때에는 검사의 신청에 의하여 법관이 발부한 영장을 제시하여야 한다. 비상계엄이) : -7
2쪽 1단 7줄(선포된 때에는 법률이 정하는 바에 의하여 영장제도, 언론·출판·집회·결사의 ) : -2
2쪽 1단 12줄(의하여 자의로 진술된 것이 아니라고 인정될 때 또는 정식재판에 있어서 피고인의) : -7
3쪽 1단 2줄(국정의 중요한 사항에 관한 대통령의 자문에 응하기 위하여 국가원로로 구성되는) : -6
3쪽 1단 2줄(국가원로자문회의를 둘 수 있다. 국가는 청원에 대하여 심사할 의무를 진다. ) : -3
3쪽 1단 3줄(국민경제의 발전을 위한 중요정책의 수립에 관하여 대통령의 자문에 응하기 ) : -2
3쪽 1단 4줄(위하여 국민경제자문회의를 둘 수 있다. 선거운동은 각급 선거관리위원회의 ) : -2
3쪽 1단 1줄(국가원로자문회의의 조직·직무범위 ) : -3
3쪽 1단 5줄(내용과 한계는 법률로 정한다. 대통령은) : -9
3쪽 1단 5줄(국민의 보통·평등·직접·비밀선거에 ) : -1
3쪽 1단 8줄(또는 공공복리를 위하여 필요한 ) : 6
3쪽 1단 9줄(경우에 한하여 법률로써 제한할 수 ) : -4
3쪽 1단 10줄(있으며, 제한하는 경우에도 자유와 ) : -3
3쪽 1단 11줄(권리의 본질적인 내용을 침해할 수 ) : -4
3쪽 2단 2줄(할 때에는 검사의 신청에 의하여 ) : 2
3쪽 2단 3줄(법관이 발부한 영장을 제시하여야 ) : -1
3쪽 2단 4줄(한다. 비상계엄이 선포된 때에는 ) : 3
1쪽 1단 각주1줄( ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ) : -4
1쪽 1단 각주2줄(ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ㅂㅈㄷㄱㅂㅈㄷㄱ ) : -4
4쪽 1단 미주2줄( ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ) : -9
4쪽 1단 미주3줄(ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ) : -10
4쪽 1단 미주4줄(ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ ㅋㅌㅊㅍㅋㅌㅊㅍ) : -10
1쪽 1단 표1줄(모든 국민은 주거의 자유를 침해받지 ) : 7
1쪽 1단 표2줄(아니한다. 주거에 대한 압수나 수색을 할 ) : -3
1쪽 1단 표5줄(때에는 법률이 정하는 바에 의하여 ) : 13
1쪽 1단 표6줄(영장제도, 언론·출판·집회·결사의 자유, ) : 3
1쪽 1단 표2줄(ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ) : 1
1쪽 1단 표3줄(ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ㅁㄴㅇㄹ ) : 1
3쪽 1단 표2줄(ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ) : -13
3쪽 1단 표2줄(피고인의 자백이 고문·폭행·협박·구속의) : -8
3쪽 1단 표2줄(부당한 장기화 또는 기망 기타의 ) : 1
3쪽 1단 표5줄(있어서 피고인의 자백이 그에게 ) : 5
3쪽 1단 표9줄(모든 국민은 직업 선택의 자유를 ) : 1
3쪽 1단 표2줄( 국정의 중요한 사항에 관한 대통령의) : -6
3쪽 1단 표2줄(자문에 응하기 위하여 국가원로로 ) : -2
3쪽 1단 표8줄(자문에 응하기 위하여 국민경제자문회의를) : -16
3쪽 1단 표8줄(둘 수 있다. 선거운동은 각급 ) : 13
3쪽 1단 표10줄(정하는 범위안에서 하되, 균등한 ) : 2


자간 평균 : -2.6
자간 표준편차 : 7.3
자간 최대값 : 13(['1쪽 1단 표5줄(때에는 법률이 정하는 바에 의하여 )', '3쪽 1단 표8줄(둘 수 있다. 선거운동은 각급 )'])
자간 최소값 : -16(['3쪽 1단 표8줄(자문에 응하기 위하여 국민경제자문회의를)'])

저는 개인적으로 자간을 -20 이하로 내리지 않는 걸 원칙으로 삼고 있었습니다.
자간평균 -2.6에 자간최대값이 13으로 다소 벌어진 것 같은데, 직접 찾아가보니 크게 읽기 불편하지는 않네요.
자간 최소값도 -16 정도로 무난하므로, 편집은 여기서 마치겠습니다.

 

여기까지 pyhwpx를 통해
가상의 보고서 자간조절 작업을
자동으로 처리해보았습니다. 괜찮네요.

본문 외에도 표, 캡션, 각주, 미주, 글상자 등이나,
다양한 케이스를 테스트하기 위해 예시문서를 작성했습니다.
시연화면과 동일한 테스트를 해보고 싶은 분들이 계실까봐
아래 첨부해 두었으니, 다운받아서 테스트해보시길 바랍니다.

자간줄이기예문.hwp
0.07MB

 

 

움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 강의 - 인프런

파이썬으로 아래아한글을 다루는 짧은 예제코드들을 소개하고, 중간중간의 결과를 GIF로 보여드립니다. 동영상 강의가 아니지만 오히려 빠르게 배울 수 있고, 따라하기도 쉽습니다., 파이썬과

www.inflearn.com

이렇게 만들어진 메서드를 사용할 뿐만 아니라,
나만의 기능을 자유롭게 만들어내고 싶다면!?
아래아한글 오토메이션API를 보다 깊이 이해하고 싶은 분은
위 강의를 추천드립니다. 현재 25%(2만원 가량) 할인중입니다.

 

앞으로도 도움이 되는 콘텐츠를 만들어 가겠습니다.

 

유용한 메서드가 되었으면 좋겠습니다.
행복한 하루 되세요^^

댓글