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
한글 로마자 표기법 관련 게시물이 연재되는 중간에, "전자법"에 대한 얘기가 나왔습니다.
한 분께서 말씀하시기를, "한글 표기와 로마자 표기가 일대일 대응이 된다면, 로마자 전자법으로 표기된 것을 한글로 복원할 수 있지 않은가?"라고 하셨습니다. (당연하지만, 표준 로마자 표기법이나 MR방식에 의하여 표기된 것은 복원 불가능합니다.)
물론 가능합니다. 이미 hangulromanize 패키지에 다 구현되어 있고요.
그런데 그 강좌를 이왕 expl3로 하던 참이니, 그 연속선 상에서 어떻게 해볼 수 있겠는가 생각해봤습니다.
이를 위해 필요한 것은 다음과 같습니다.
- 로마자 입력의 초/중/종성을 분석해야 합니다. 현대 한글 음절과 달리 로마자화된 것은 초/중/종성 각각 가변길이 문자열이기 때문에 이를 parse해서 초/중/종성으로 나눈 다음 한글 자모 문자에 대응시켜야 하는 것입니다.
- 한글 자모로 된 변환 결과를 한글 음절 문자로 변환해야 합니다. (이것은 이미 준비되어 있습니다. 한글의 분해와 조립 참조)
expl3로 이 문제를 해결하려 할 때 1 부분의 구현 방법을 생각해봅니다. 입력되는 문자를 차례로 받아들여서 초성인가 판단하고 그 다음 문자를 읽어서 초성(중성이 아님)인가 판단하고, 다시 그 다음 문자를 읽어서 중성인가 판단하고, 또 그 다음 문자를 읽어서 중성이 끝났는지 판단하고 하면 초성과 중성의 판정은 그럭저럭 이루어집니다.
문제는 종성+초성 연결 부분인데, 이것은 모음(중성)의 끝과 다음 모음 사이의 문자들을 읽은 다음 음절 구분자(-)가 있으면 바로 처리하고 없으면 문자열의 성격을 분석하여(문자열의 길이를 취하여 분석하는 방법도 있습니다) 종성 부분과 초성 부분을 가려내면 될 것입니다.
이런 방법도 나쁘지 않고 꼬리재귀 등의 기법을 활용할 수 있을 것이기 때문에 expl3 언어 연습으로 좋다고 생각하지만, 발상을 조금 바꾸어서 이 문제를 해결해보려 합니다.
일단, 현대 한글의 초성 위치에 올 수 있는 자음은 단자음과 된소리 표기의 쌍자음뿐입니다. 그러므로 예를 들어 kk는 K, pp는 P하는 식으로 미리 변환해두고 초성은 무조건 한 글자만 되게 합니다. 어두가 모음으로 시작하면 강제로 -를 앞에 붙여서 -를 초성처럼 취급합니다.
중성 모음은 1자에서 3자까지 쓰이는데, 이것도 모두 한 글자로 표기하기로 합니다. 어차피 변환 목적이므로 로마자 표기에 쓰이지 않는 z, q, x 따위를 일종의 부호처럼 쓰고 대소문자를 구분하면 중성도 한 문자로 표현할 수 있습니다.
이렇게 해두면 일단 중성을 찾고 그 앞의 한 문자만 취하면 바로 초성과 중성을 변별할 수 있습니다. 종성은 좀더 복잡해서 도저히 한 글자로 표현할 수 없고 있다해도 번거로우므로, 초성/중성 변환하고 남은 것을 종성으로 취하여 변환해주자는 것입니다.
물론 이렇게 한다 해도, 주의할 것이 남기는 합니다. 예를 들어 '앉지'를 로마자로 표기한 anjji에서 njj를 nj-j로 미리 분해해두지 않으면 결과가 이상해지겠지요. jj는 J로 변환되어 한 글자가 되기로 되어 있기 때문에 nJ처럼 변환되어 안찌가 되면 안 되기 때문입니다.
첨부 파일은 이 발상으로 전자법으로 쓰인 로마자 문자열을 한글로 변환하는 것입니다.
소스가 길지 않아서 간단히 이해하고 적용할 수 있을 것으로 봅니다. 모든 경우를 다 고려하지 못했다고 생각하므로, 필요하면 추가/수정할 수 있게 해주십시오.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
871 | 초보자용 연습문제 | karnes | 2010.03.16 | 27861 |
870 | [잡담] 옛날 글타래를 보다가... [4] | Progress | 2010.03.16 | 27811 |
869 | ibook author에 관련해서 .. | beavim | 2012.02.06 | 27778 |
868 | KTUG Companion | 에드 | 2012.01.05 | 27727 |
867 | TeX Live 2012 pretest [9] | ndh | 2012.05.15 | 27626 |
866 | Pro Git책 PDF버전 | 에드 | 2012.04.09 | 27558 |
865 | [홈페이지] 설치 페이지에서 [1] | Progress | 2009.12.30 | 27500 |
864 | 최현배 한글 풀어쓰기 [21] | Tzetachi | 2019.04.13 | 27353 |
863 | MiKTeX 2.9에 ko.TeX이 패키징되었습니다 | nanim | 2013.11.02 | 27099 |
862 | TeX, ePub 그리고 수식 [10] | 에드 | 2012.02.05 | 27011 |
861 | [잡담] 파이데이... [6] | karnes | 2010.03.14 | 26938 |
860 | [공지] 최근 ko.TeX 및 oblivoir 업데이트 (2013. 9. 30) [4] | Progress | 2013.09.30 | 26901 |
859 | TeXML [3] | yihoze | 2010.03.04 | 26772 |
858 | 게시판 질문을 위한 최소예제 만들기 | karnes | 2014.12.17 | 26545 |
857 | 구글 북스에 접속하니 재미있는 기능이.. [2] | 샘처럼 | 2012.04.08 | 26545 |
856 | 아리따 글꼴 3.0 발표 | Progress | 2012.02.21 | 26388 |
855 | noweb, dot, 그리고 LaTeX을 위한 dot2tex | 양사장 | 2011.07.28 | 25835 |
854 | 화이트데이 [4] | 작나 | 2012.03.14 | 25682 |
853 | xetexko 버전 1.6.1 [7] | DohyunKim | 2010.01.20 | 25601 |
852 | 맥북용 PDF->epub, html 변환 앱 [6] | hermian | 2012.02.22 | 25589 |