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

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

자유글 Simplified Hangulize

2015.06.21 09:59

nanim 조회 수:3921 추천: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처럼 변환되어 안찌가 되면 안 되기 때문입니다.


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

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


번호 제목 글쓴이 날짜 조회 수
672 아무도 관심은 없으시겠지만...-.-; [6] 불량양파 2016.03.07 5090
671 [잡담] 키보드가 마우스보다 빠르다 [6] yihoze 2016.03.22 5111
670 [참가신청-수정] 문서작성 워크숍 2014 A & B [8] file ischo 2014.10.03 5126
669 상용로그표 file karnes 2011.07.13 5149
668 문자열의 삽입정렬 file karnes 2012.10.08 5154
667 하이픈과 페널티 DohyunKim 2012.11.05 5169
666 pdftex에서 truetype을 써보자 DohyunKim 2015.08.07 5180
665 디자인하우스체 [1] 에드 2019.10.14 5203
664 목록 라벨 형식 바꾸기 [2] file yihoze 2016.03.28 5206
663 문서 중간에서 판면 배치 바꾸기 yihoze 2011.03.30 5211
662 MiKTeX 이나 TeXLive 에서 biber.exe 설치나 업데이트 에러 [1] file 쿠피 2014.10.09 5224
661 상용로그표 : 루아텍 버전 DohyunKim 2011.07.14 5233
660 TeXLive 2011 좀 간단하게 설치하고 쓰기 (Windows) karnes 2011.10.27 5238
659 특정 글리프를 가진 글꼴 [12] noname 2020.12.22 5252
658 새 페이지에서 시작하는 차례 yihoze 2016.06.02 5262
657 온라인 텍 도구인 Overleaf를 알려봅니다~ [3] 감자돌이 2015.10.10 5282
656 하나조노 민초 폰트의 글리프 품위 [9] file Progress 2014.10.02 5284
655 혹시 이 사이트에 버그가 있는 것이 아닌지요. [2] 메타 2016.08.03 5285
654 [KTUG Rumor] 문서작성 워크숍은 언제? [5] ischo 2014.09.25 5300
653 함초롬체 2014년 버전이 공개되었네요. [2] 함초롬 2014.10.19 5305



XE Login