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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
984 | 수식 작성 상용 에디터 무료 전환소식 [5] | 텍사랑 | 2021.12.05 | 1483 |
983 | physics 패키지의 \pdv 명령 [2] | noname | 2021.07.28 | 1541 |
982 | 문서작성 워크숍 2022 [3] | ischo | 2022.04.28 | 1544 |
981 | LaTeX 편집기(Editor)에 대한 생각 [3] | 큰바위 | 2021.07.24 | 1563 |
980 | [참가신청] 문서작성 워크숍 2023: The Last Workshop [7] | ischo | 2023.05.06 | 1648 |
979 | 문서작성워크숍 2021 [8] | ischo | 2021.10.31 | 1691 |
978 | 일본어 음독 달기 [10] | yihoze | 2021.08.06 | 1839 |
977 | 한국어 로마자 변환 [13] | yihoze | 2022.02.08 | 1848 |
976 | 텍 관련 책이 출판되었으면 좋겠습니다. [2] | 플라워 | 2021.02.16 | 1896 |
975 | LaTeX으로 편집한 책 3호 출간 [12] | 판돌이 | 2021.09.25 | 1911 |
974 | 가입인사 드려요 | 필교 | 2021.04.16 | 1978 |
973 | 상쾌한 아침입니다. | 필교 | 2021.04.17 | 1978 |
972 | hzexam.sty를 위한 파이썬 스크립트 [2] | yihoze | 2021.04.20 | 2039 |
971 | KTUG 사설 저장소 미러 (CRAN 0-Cloud-East-Asia) 정상화 안내 [3] | 배성호 | 2021.05.02 | 2096 |
970 | TL 2021 TL Manager 번역 파일 [3] | Dennis | 2021.04.05 | 2112 |
969 | tabularray 예제 [2] | Progress | 2022.11.20 | 2128 |
968 | 회비 입금하신 분을 찾습니다. | yihoze | 2021.05.03 | 2205 |
967 | 감사인사 드립니다. :) [5] | 이삭 | 2021.03.11 | 2214 |
966 | oblivoir 3.0의 은 글꼴 [1] | noname | 2021.03.15 | 2219 |
965 | 설 잘 쇠세요 [1] | Progress | 2021.02.12 | 2240 |