안녕하세요 일상의 코딩님!! 유튜브를 통해서 알게되고 블로그까지 찾아왔습니다.
블로그의 유익한 글들로 많은 도움을 받고 있는데요...
아무리 찾아봐도 도저히 제 능력 밖이라 ... 바쁘실텐데 여쭙고자 합니다. ㅠㅠ
아래한글에서 맞춤법 교정을 자동으로 하는 코드를 만들고 싶은데
단순히 맞춤법 검사기로 교정하는 것은 어절단위로 돌면서 Run으로 작동은 시키는데
맞춤법 교정을 한 부분을 글자나 음영색을 바꿔서 어떤 부분을 교정했는지 표시를 하고 싶은데요
교정이 되고 나니 빨간줄도 사라지고,,, 그위치를 찾는 것도... 방법이 없는거 같아서요
도움을 요청합니다. ㅠㅠ
어떻게 방법이 없을까요... ㅠㅠ 헤매고 있는 절 구해주세요 ㅠㅠㅠㅠㅠ
질문 주신 분께서는 나름 한/글 메서드를 잘 활용하고 계신 분 같아요.
어절 단위로 돌면서 Run 돌리실 때(아마 AutoSpellSelect0를 사용하시는 것 같은데요.)
hwp.AutoSpellSelect0으로 실행하지 마시고,
hwp.HAction.AutoSpellSelect로 실행하시면
교정했을 때에만 True, 교정안하고 넘어가면 False를 매번 리턴해요.
교정 전의 어절을 저장해 뒀다가,
교정을 거쳤으면 해당어절에 메모표시를 하거나,
교정된 어절을 빨간색 괄호로 덮고
그 앞에 다시 애초의 어절을 삽입해놓는 식으로 표시하시면 될 것 같아요.
제가 알맞은 솔루션을 말씀드렸는지 궁금하지만,
하여튼 제가 이해한 방식으로 코드를 한 번 짜 볼게요.
우선 기존 실행화면과 코드는 아래와 같아요.
첫 번째로 추천하는 교정어휘로 변경하는 명령어인 hwp.HAction.Run("AutoSpellSelect0")과
다음 어절로 이동하는 명령어인 hwp.HAction.Run("MoveNextWord"),
이 두 가지 명령어만 반복실행하면 기본적인 자동교정이 완료됩니다.
팁을 하나 드리면
while문으로 돌릴 때 문서 끝 위치가 교정 과정에서 바뀔 수 있으니까,
문서 끝에 도착할 때까지 정방향 탐색을 하는 것보다는(물론 가능은 하지만)
문서 시작 좌표(pos)는 거의 항상 (0,0,16)이니까
문서 끝에서부터 역방향 탐색을 하는 게 조금 더 코드가 짧아요.
위를 참고해서 뼈대가 되는 코드를 짜보면
hwp.Run("MoveDocEnd")
while hwp.GetPos() != (0, 0, 16):
hwp.Run("MovePrevWord")
hwp.HAction.Run("AutoSpellSelect0")
코드가 딱 네 줄, 꽤 짧네요.
이렇게 한 번 실행해볼까요?
의도한 대로 잘 동작하는 것 같네요.
그럼 이 코드에 살을 조금만 더 붙여서
교정을 거치면 표시를 해 두도록 만들어보겠습니다.
질문자 분께서 "글자나 음영색"이라고 하셨으니까,
글자는 빨갛게, 음영은 연한 빨강으로 줘보겠습니다.
교정되지 않은 어절은 스킵해야 하니까, if문을 하나만 넣어주면 되겠네요.
hwp.Run("MoveDocEnd")
while hwp.GetPos() != (0, 0, 16):
hwp.Run("MovePrevWord")
if hwp.HAction.Run("AutoSpellSelect0"):
# 글자서식 바꾸는 코드 삽입할 곳
수월하게 마치겠네요.
글자를 빨갛게 수정하는 코드는
hwp.Run("CharShapeTextColorRed")
연한 빨강으로 음영 넣는 코드는(매크로녹화 참조)
hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HCharShape.HSet)
hwp.HParameterSet.HCharShape.ShadeColor = hwp.RGBColor(238, 201, 201)
hwp.HAction.Execute("CharShape", hwp.HParameterSet.HCharShape.HSet)
이렇게 조합해서 코드를 짜보면
최종 코드는
hwp.Run("MoveDocEnd")
while hwp.GetPos() != (0, 0, 16):
hwp.Run("MovePrevWord")
if hwp.HAction.Run("AutoSpellSelect0"):
hwp.Run("MoveSelPrevWord")
hwp.Run("CharShapeTextColorRed")
hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HCharShape.HSet)
hwp.HParameterSet.HCharShape.ShadeColor = hwp.RGBColor(238, 201, 201)
hwp.HAction.Execute("CharShape", hwp.HParameterSet.HCharShape.HSet)
hwp.Run("Cancel")
이렇게 한 번 실행해보겠습니다.
이 정도면 의도한 대로 나름 잘 동작하는 것 같네요.
아쉬운 부분이 많은 코드지만 여기서 마칩니다.
추가로 질문하실 부분이 있으면
댓글이나 메일로 남겨주시기 바랍니다.
마치며
생각해보면, 기존 어휘가 궁금할 수 있는 경우도 있겠네요.
최종 모양이 아래처럼 되도록 고쳐볼 수도 있겠네요.
위 그림과 같이 교정한 어휘 앞에다
교정 전 어휘를 붉은색 아래첨자로 뒤에 표시해 둔다든지요.
또 이렇게 해 놓으면 좋은 점이, 검토 후 마무리할 때
아래처럼 "붉은색 언더라인" 서식만 찾아바꾸기로 일괄삭제가 가능하니까
문서가 길 때 사후작업이 훨씬 간편하기도 하겠더라고요.
하여튼 도움이 되었기를 바랍니다.
행복한 하루 되세요
!
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[QnA] 교정부호 시작/끝 위치를 파악해서 엑셀로 저장하는 프로그램 (0) | 2022.11.08 |
---|---|
[8/8] 여러 한/글 문서에서 이미지 추출(최종) (3) | 2022.10.25 |
[7/8] 특정 이름으로 이미지 저장하기 (0) | 2022.10.25 |
댓글