안녕하세요 일상의 코딩님!! 유튜브를 통해서 알게되고 블로그까지 찾아왔습니다.
블로그의 유익한 글들로 많은 도움을 받고 있는데요...
아무리 찾아봐도 도저히 제 능력 밖이라 ... 바쁘실텐데 여쭙고자 합니다. ㅠㅠ
아래한글에서 맞춤법 교정을 자동으로 하는 코드를 만들고 싶은데
단순히 맞춤법 검사기로 교정하는 것은 어절단위로 돌면서 Run으로 작동은 시키는데
맞춤법 교정을 한 부분을 글자나 음영색을 바꿔서 어떤 부분을 교정했는지 표시를 하고 싶은데요
교정이 되고 나니 빨간줄도 사라지고,,, 그위치를 찾는 것도... 방법이 없는거 같아서요
도움을 요청합니다. ㅠㅠ
어떻게 방법이 없을까요... ㅠㅠ 헤매고 있는 절 구해주세요 ㅠㅠㅠㅠㅠ
질문 주신 분께서는 나름 한/글 메서드를 잘 활용하고 계신 분 같아요.
어절 단위로 돌면서 Run 돌리실 때(아마 AutoSpellSelect0를 사용하시는 것 같은데요.)
hwp.AutoSpellSelect0으로 실행하지 마시고,
hwp.HAction.AutoSpellSelect로 실행하시면
교정했을 때에만 True, 교정안하고 넘어가면 False를 매번 리턴해요.
교정 전의 어절을 저장해 뒀다가,
교정을 거쳤으면 해당어절에 메모표시를 하거나,
교정된 어절을 빨간색 괄호로 덮고
그 앞에 다시 애초의 어절을 삽입해놓는 식으로 표시하시면 될 것 같아요.
제가 알맞은 솔루션을 말씀드렸는지 궁금하지만,
하여튼 제가 이해한 방식으로 코드를 한 번 짜 볼게요.
우선 기존 실행화면과 코드는 아래와 같아요.

첫 번째로 추천하는 교정어휘로 변경하는 명령어인 hwp.HAction.Run("AutoSpellSelect0")과
다음 어절로 이동하는 명령어인 hwp.HAction.Run("MoveNextWord"),
이 두 가지 명령어만 반복실행하면 기본적인 자동교정이 완료됩니다.
팁을 하나 드리면
while문으로 돌릴 때 문서 끝 위치가 교정 과정에서 바뀔 수 있으니까,
문서 끝에 도착할 때까지 정방향 탐색을 하는 것보다는(물론 가능은 하지만)
문서 시작 좌표(pos)는 거의 항상 (0,0,16)이니까
문서 끝에서부터 역방향 탐색을 하는 게 조금 더 코드가 짧아요.
위를 참고해서 뼈대가 되는 코드를 짜보면
코드가 딱 네 줄, 꽤 짧네요.
이렇게 한 번 실행해볼까요?

의도한 대로 잘 동작하는 것 같네요.
그럼 이 코드에 살을 조금만 더 붙여서
교정을 거치면 표시를 해 두도록 만들어보겠습니다.
질문자 분께서 "글자나 음영색"이라고 하셨으니까,
글자는 빨갛게, 음영은 연한 빨강으로 줘보겠습니다.
교정되지 않은 어절은 스킵해야 하니까, if문을 하나만 넣어주면 되겠네요.
수월하게 마치겠네요.
글자를 빨갛게 수정하는 코드는
연한 빨강으로 음영 넣는 코드는(매크로녹화 참조)
이렇게 조합해서 코드를 짜보면
최종 코드는
이렇게 한 번 실행해보겠습니다.

이 정도면 의도한 대로 나름 잘 동작하는 것 같네요.
아쉬운 부분이 많은 코드지만 여기서 마칩니다.
추가로 질문하실 부분이 있으면
댓글이나 메일로 남겨주시기 바랍니다.
마치며
생각해보면, 기존 어휘가 궁금할 수 있는 경우도 있겠네요.
최종 모양이 아래처럼 되도록 고쳐볼 수도 있겠네요.

위 그림과 같이 교정한 어휘 앞에다
교정 전 어휘를 붉은색 아래첨자로 뒤에 표시해 둔다든지요.
또 이렇게 해 놓으면 좋은 점이, 검토 후 마무리할 때
아래처럼 "붉은색 언더라인" 서식만 찾아바꾸기로 일괄삭제가 가능하니까
문서가 길 때 사후작업이 훨씬 간편하기도 하겠더라고요.

하여튼 도움이 되었기를 바랍니다.
행복한 하루 되세요

!
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[QnA] 교정부호 시작/끝 위치를 파악해서 엑셀로 저장하는 프로그램 (0) | 2022.11.08 |
---|---|
[8/8] 여러 한/글 문서에서 이미지 추출(최종) (3) | 2022.10.25 |
[7/8] 특정 이름으로 이미지 저장하기 (0) | 2022.10.25 |
댓글