KTUG마당은 KTUG를 방문하는 모든 이용자가 대화를 나누고 소식을 전하는 곳입니다.

  • 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
  • Team Blog의 글을 이곳 게시판의 "정보글"로 모았습니다. Team blog는 기고자가 올린 글에 질문을 받는 부담을 줄이기 위하여 댓글을 허용하지 않았습니다. 그러나 이곳 게시판으로 모으면서 댓글을 달 수 있습니다. 게시물을 작성하실 때 댓글을 원하지 않으시면 댓글을 허용하시지 않으시기를 바랍니다. 또한 불필요한 소모성 댓글을 달지 않도록 주의하여 주시기를 바랍니다.
  • TeX과 관련된 질문이나 답변은 QnA 마당을 이용하십시오. TeX과 관련된 질문은 지웁니다
  • MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
  • 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
    • 금지어에서 stackexchange, stackoverflow.com ctan.org등은 해제하였습니다.
  • 사용하는 편집기는 CKeditor입니다. 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한줄을 비웁니다. 글줄만 바꾸려면 shift-enter 를 누르시면 <BR>가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.

자유글 Simplified Hangulize

2015.06.21 09:59

nanim 조회 수:2466 추천:1

한글 로마자 표기법 관련 게시물이 연재되는 중간에, "전자법"에 대한 얘기가 나왔습니다.

한 분께서 말씀하시기를, "한글 표기와 로마자 표기가 일대일 대응이 된다면, 로마자 전자법으로 표기된 것을 한글로 복원할 수 있지 않은가?"라고 하셨습니다. (당연하지만, 표준 로마자 표기법이나 MR방식에 의하여 표기된 것은 복원 불가능합니다.)

물론 가능합니다. 이미 hangulromanize 패키지에 다 구현되어 있고요.


그런데 그 강좌를 이왕 expl3로 하던 참이니, 그 연속선 상에서 어떻게 해볼 수 있겠는가 생각해봤습니다.

이를 위해 필요한 것은 다음과 같습니다.

  1. 로마자 입력의 초/중/종성을 분석해야 합니다. 현대 한글 음절과 달리 로마자화된 것은 초/중/종성 각각 가변길이 문자열이기 때문에 이를 parse해서 초/중/종성으로 나눈 다음 한글 자모 문자에 대응시켜야 하는 것입니다.
  2. 한글 자모로 된 변환 결과를 한글 음절 문자로 변환해야 합니다. (이것은 이미 준비되어 있습니다. 한글의 분해와 조립 참조)

expl3로 이 문제를 해결하려 할 때 1 부분의 구현 방법을 생각해봅니다. 입력되는 문자를 차례로 받아들여서 초성인가 판단하고 그 다음 문자를 읽어서 초성(중성이 아님)인가 판단하고, 다시 그 다음 문자를 읽어서 중성인가 판단하고, 또 그 다음 문자를 읽어서 중성이 끝났는지 판단하고 하면 초성과 중성의 판정은 그럭저럭 이루어집니다.

문제는 종성+초성 연결 부분인데, 이것은 모음(중성)의 끝과 다음 모음 사이의 문자들을 읽은 다음 음절 구분자(-)가 있으면 바로 처리하고 없으면 문자열의 성격을 분석하여(문자열의 길이를 취하여 분석하는 방법도 있습니다) 종성 부분과 초성 부분을 가려내면 될 것입니다.


이런 방법도 나쁘지 않고 꼬리재귀 등의 기법을 활용할 수 있을 것이기 때문에 expl3 언어 연습으로 좋다고 생각하지만, 발상을 조금 바꾸어서 이 문제를 해결해보려 합니다.

일단, 현대 한글의 초성 위치에 올 수 있는 자음은 단자음과 된소리 표기의 쌍자음뿐입니다. 그러므로 예를 들어 kk는 K, pp는 P하는 식으로 미리 변환해두고 초성은 무조건 한 글자만 되게 합니다. 어두가 모음으로 시작하면 강제로 -를 앞에 붙여서 -를 초성처럼 취급합니다.

중성 모음은 1자에서 3자까지 쓰이는데, 이것도 모두 한 글자로 표기하기로 합니다. 어차피 변환 목적이므로 로마자 표기에 쓰이지 않는 z, q, x 따위를 일종의 부호처럼 쓰고 대소문자를 구분하면 중성도 한 문자로 표현할 수 있습니다.

이렇게 해두면 일단 중성을 찾고 그 앞의 한 문자만 취하면 바로 초성과 중성을 변별할 수 있습니다. 종성은 좀더 복잡해서 도저히 한 글자로 표현할 수 없고 있다해도 번거로우므로, 초성/중성 변환하고 남은 것을 종성으로 취하여 변환해주자는 것입니다.


물론 이렇게 한다 해도, 주의할 것이 남기는 합니다. 예를 들어 '앉지'를 로마자로 표기한 anjji에서 njj를 nj-j로 미리 분해해두지 않으면 결과가 이상해지겠지요. jj는 J로 변환되어 한 글자가 되기로 되어 있기 때문에 nJ처럼 변환되어 안찌가 되면 안 되기 때문입니다.


첨부 파일은 이 발상으로 전자법으로 쓰인 로마자 문자열을 한글로 변환하는 것입니다.

소스가 길지 않아서 간단히 이해하고 적용할 수 있을 것으로 봅니다. 모든 경우를 다 고려하지 못했다고 생각하므로, 필요하면 추가/수정할 수 있게 해주십시오.


번호 제목 글쓴이 날짜 조회 수
공지 [공지] 2020 한국텍학회 제13차 정기총회 및 학술대회 [7] yihoze 2020.01.10 580
공지 KTUG 사설저장소 브라우저 베이드프즈 2017.07.16 69560
공지 장애 복구 안내 [9] 관리자 2017.05.04 73065
공지 TeX Live 2019 설치 안내 [9] 관리자 2016.06.05 111967
673 좋은 문서를 하나 crop해봤습니다.... [2] file 불량양파 2013.07.15 17577
672 멍청하고 비효율적인 워드프로세서 [5] ischo 2013.12.20 17708
671 인터넷 기반 TeX 문서 작성/공동작업: authorea [1] 커꿈 2015.05.29 2909
670 Arch Linux 사용자를 위한 은글꼴/나눔바른고딕 글꼴 패키지 [5] xylosper 2013.08.08 31329
669 [새 위키] 주제별 분류에 의한 텍 및 관련 문서 Progress 2014.11.15 3942
668 아주 약간 자세한 expl3 예 file yihoze 2015.08.28 2888
667 Expl3에 대한 단상 yihoze 2015.08.28 2825
666 게임 트리 그리기 2-2 (with tikz) [9] file ischo 2015.08.18 3146
665 게임 트리 그리기 2-1 (with tikz) [2] file ischo 2015.08.17 3237
664 [번역] 2015년판, essential-kr과 latex4wp-kr [3] ischo 2015.08.15 2954
663 게임 트리 그리기 2 (with tikz) [5] file ischo 2015.08.14 3035
662 tex를 배워보려는 학생입니다. [7] ghg 2015.08.01 3037
661 pdftex에서 truetype을 써보자 DohyunKim 2015.08.07 3386
660 syshan 패키지 file anony 2015.08.05 3061
659 josaref, 자동조사를 취하는 \ref file nanim 2015.07.30 2739
658 polyglossia를 이용하는 한국어 조판 [2] nanim 2015.07.27 3060
657 금지어 문의 [1] 세벌 2015.07.26 2882
656 예비회원 승인문제 [1] Pi 2015.07.22 2725
655 당신은 어떤 사용자입니까? [15] yihoze 2015.06.18 2896
654 tex 사용 후 코딩 실력이 늘었네요 ... [2] tex_초보자... 2015.07.14 2873



XE Login