한자한글 변환의 문제점 분석

우리말과 우리글에는 한글에서 유래한 말이 많이 있고 관공서 등의 공문서에는 많은 한자어를 사용하고 있다. 그렇기 때문에 정보 검색 등의 하기 위해서는 한자어를 자동으로 한글로 바꾸어 주는 변환기 개발이 중요한 문제점이 되기도 한다.

비단 정보 검색이 아니더라도 고문 등을 읽기 위해서는 한자어 이해가 꼭 필요하지만 사실상 그 많은 한자를 일일이 알 수는 없는 일이기 때문에 한자어를 한글로 바꾸는 프로그램은 마땅히 개발해야 프로그램이라 할 수 있다.

물론 한자 코드를 한글 코드로 단순히 치환하는 것으로도 어느 정도 문제를 해결할 수 있다고 할 수 있지만 실제로 우리말에서는 한자어를 다양한 방법으로 사용하고 있기 때문에 한자어를 한글로 변화하다 보면 생각지 못한 여러 가지 문제점을 만나게 된다.

이 글에서는 이와 관련한 여러 가지 문제점을 소개한다. 한자2한글 변환 프로그램을 작성하려 하는 사람이라면 이와 같은 문제를 인식하여 보다 좋은 프로그램을 개발하기를 바란다.

이 글은 연구개발정보센터에서 주관한 97년도 과학기술정보 워크샵에서 강형일, 전정현, 고형대, 유재우 님께서 발표하신 자료를 전적으로 사용하고 있음을 밝힌다.

KSC5601에서의 한자 영역

이 글에서 소개하는 문제점은 코드에 관계없이 적용되는 문제점들이지만 한자어를 프로그램으로 처리하는 경우 이해를 돕기 위해 한자 코드에 대해 먼저 소개한다. 이 글에서는 KSC5601 완성형 코드에 대해 소개하지만 조합형도 한자에 대해서는 이와 거의 유사한 체계로 되어 있기 때문에 한자에 대해서는 코드 문제가 중요한 것은 아니다.

한자 코드는 다른 한글 코드와 마찬가지로 두 바이트로 이루어져 있다. 한자에 대한 상위 바이트는 CA-FD의 가진다. 즉, 한자는 52개의 블록으로 이루어져 있다. 한자의 하위 바이트는 제어 문자를 피하기 위하여 A1-FE까지의 값을 가진다.

따라서 완성형에는 52 * 94 = 4888 개의 한자가 존재한다.

한자 코드의 분석

한자·한글 변환 바르지 못한 한글음 생성에 따른 주요한 문제를 동자이음 처리 부분이다. 우선적으로 표준 한자 코드 내에서 복수의 음을 갖는 한자를 분석한다.

표준 한자 코드에 있는 한자인 '佳'가 '가'와 '개'의 두 가지 음을 갖는 것처럼 복수의 음을 갖는 한자는 다음과 같이 2,725자이다.

1. 2음자(976자 * 2 = 1,952자)

2. 3음자(188자 * 3 = 564자)

3. 4음자(34자 * 4 = 136자)

4. 5음자(12자 * 5 = 60자)

5. 6음자(1자 * 6 = 6자)

6. 7음자(1자 * 7 = 7자)

그리고 '賈'가 '가'와 '고'의 두 가지 음 모두가 표준 한자 코드에 등록된 것처럼 복수 등록이 된 한자는 다음과 같이 262자이다.

1. 2회 등록(257종 * 2 = 514자)

2. 3회 등록(4종 * 3 = 12자)

3. 4회 등록(1종 * 4 = 4자)

분석 결과 일반적으로 두 가지 음으로 많이 쓰이는 한자와 두음법칙에 해당하는 한자의 출현이 많았다. 그 외에 正字와 略字, 本字, 古字, 俗子가 동시에 사용된 문자로서 표준 한자 코드에 둘다 채택이 되어있는 문자들이 등이 있으나(예, 개(蓋, 盖), 년(年, 秊), 만(万, 萬)) 바른 한글음의 생성에는 영향을 주지 않는다. 다만 어느 한쪽만을 쓰겠다는 시스템에서는 고려대상이 된다.

또한 다음과 같은 코드 체계의 오류로 보이는 문제점을 발견할 수 있었다.

丹(붉은 단)자의 경우 원래 동자이음에 속하지 않는 한자인데 표준 한자 코드의 "란"자에도 나오고 있다. 鬧(시끄러울 뇨)자의 경우 원래 한자음은 "뇨"자인데 한글음 "뇨"자에는 한자 글꼴이 없고 "료"자에 나타난다.

이형표기 가능한 한자 분석

한자·한글 혼용 문서들을 순수한 우리말 문서로 변환하는 과정에서 한글 맞춤법에 맞지 않는 한글음으로 변환되는 경우가 발생하게 된다. 한자에서 한글로 변환할 때 사전에 고려하여야 할 사항으로 이형표기 가능한 한자단어를 분석하였다.

동자이음어 적용 문자의 처리

한자 '不'을 각각 '불' 과 '부'로 발음되는 한글음 모두에 대해서 각기 다른 한자 코드 값을 가지고 있음을 알 수 있다. 이렇게 두 개 이상의 음을 갖는 한자를 정확한 한글로 변환하기 위해서 규칙을 발견하고 그 규칙을 이용하여 별도로 구현할 수 있겠지만 현재 KSC 5601의 표준 한자 코드 체계에서 두 가지 이상의 한글음을 갖는 한자에 대해서 각기 한자 코드에 반복적으로 배정되어 있는 점을 이용한다.

표준 한자 코드에 있는 한자로서 두 가지 이상의 코드 값을 갖는 경우에는 큰 문제는 되지 않으나 입력할 때 음을 몰라서 알고 있는 음으로 입력한 경우, 즉 한자 글꼴만 얻으면 되므로 다른 음을 사용하는 경우에는 심각한 문제가 된다. 한자2한글변환시 대부분의 에러는 여기에 해당한다. 여기에 해당하는 예는 상당히 많은 단어가 포함되어 있다. 아래는 몇 가지 예를 보여주고 있다.

예) 동자이음어

樂(악, 낙, 락, 요) → 樂曲(악곡), 樂園(낙원), 娛樂(오락), 樂山(요산)

見(견, 현) → 見聞(견문), 謁見(알현)

두음법칙 적용 문자의 처리

두음법칙에 해당하는 부분은 상당히 많은 한자단어가 존재한다. 이 부분은 한글 맞춤법에 따라 표준 한자 코드에 추가로 들어가 있는 한자 글꼴이 상당부분 있음을 분석을 통해 확인 할 수 있었다. 예를 들어 '紐'자는 실질적인 발음은 '뉴'인데 한글맞춤법의 두음법칙에 근거하여 '유'로도 발음되는 관계로 인해 표준 한자 코드에 '뉴'와 '유'가 별도로 코드 값이 부여되어서 존재한다.

1) 한자음 '녀, 뇨, 뉴, 니'가 단어 첫머리에 나타날 때는 두음 법칙에 따라 '여, 요, 유, 이'로 적는다.

예시) 여자(女子), 연세(年歲), 요소(尿素), 유대(紐帶), 이토(泥土), 익명(匿名)

다만, 다음과 같은 의존 명사에서는 '냐, 녀' 음을 인정한다.

예시) 냥(兩), 냥쭝(兩-), 년(年)

접두사처럼 쓰이는 한자가 붙어서 된 말이나 합성어에서, 뒷말의 첫소리가 'ㄴ' 소리로 나더라도 두음 법칙에 따라 적는다.

예시) 신여성(新女性), 공염불(空念佛), 남존여비(男尊女卑)

2) 한자음 '랴, 려, 례, 료, 류, 리'가 단어 첫머리에 나타날 때는 두음 법칙에 따라 '야, 여, 예, 요, 유, 이'로 적는다.

예시) 양심(良心), 역사(歷史), 예의(禮義), 용궁(龍宮), 유행(流行), 이발(理髮)

다만, 다음과 같은 의존 명사는 본음대로 적는다.

예시) 리(里): 몇 리냐?, 리(理):그럴 리가 없다.

모음이나 'ㄴ' 받침 뒤에 이어지는 '렬, 률'은 '열, 율'로 적는다.

예시) 나열(羅列), 치열(齒列), 비열(卑劣), 규율(規律), 비율(比率), 분열(分裂), 선열(先烈), 진열(陳列), 선율(旋律), 전율(戰慄), 백분율(百分率)

외자로 된 이름을 성에 붙여 쓸 경우에도 본음대로 적을 수 있다.

예시) 신립(申砬), 최린(崔麟), 채륜(蔡倫), 하륜(河崙)

접두사처럼 쓰이는 한자가 붙어서 된 말이나 합성어에서 뒷말의 첫소리가 'ㄴ' 또는 'ㄹ' 소리로 나더라도 두음 법칙에 따라 적는다.

예시) 역이용(逆利用), 연이율(年利率), 열역학(熱力學), 해외여행(海外旅行)

둘 이상의 단어로 이루어진 고유 명사를 붙여쓰는 경우나 십진법에 따라 쓰는 수(數)도 붙임4에 준하여 적는다.

예시) 서울여관, 신흥이발관, 육천육백육십육(六千六百六十六)

3) 한자음 '라, 래, 로, 뢰, 루, 르'가 단어의 첫머리에 나타날 때는 두음 법칙에 따라 '나, 내, 노, 뇌, 누, 느'로 적는다.

예시) 낙원(樂園), 내일(來日), 노인(老人), 뇌성(雷聲), 누각(樓閣), 능묘(陵墓)

접두사처럼 쓰이는 한자가 붙어서 된 단어는 뒷말을 두음 법칙에 따라 적는다.

예시) 내내월(來來月), 상노인(上老人), 중노동(重勞動), 비논리적(非論理的)

한 단어 안에서 같은 음절이나 비슷한 음절이 겹쳐 나는 부분은 같은 글자로 적는다.

예) 연연불망(戀戀不忘), 유유상종(類類相從), 누누이(屢屢-)

예외) 열렬히(熱熱-), 늠름히(凜凜-), 연년세세(年年歲歲), 낙락장송(落落長松), 냉랭(冷冷)하다, 역력(歷歷)히, 염념불망(念念不忘) 등

사이시옷 첨가

한자는 올바르게 입력되어 있으나 한자에는 사이시옷을 표기할 수 없기 때문에 변환시 생성되는 한글음이 달라지는 경우이다. 그러나 해당 문자가 2자이면서 모두 한자로 표기할 수 있는 용어는 다음 예의 여섯 가지밖에 없으므로 이 용어만 포함시키면 된다.

예) 貰房(세방) →貰房(셋방), 庫間(고간) →庫間(곳간)

車間(차간) →車間(찻간), 數字(수자) →數字(숫자)

回數(회수) →回數(횟수), 退間(퇴간) →退間(툇간)

다만 한글과 한자가 섞여서 하나의 용어로 사용되는 경우에 다음 예에서와 같이 한자가 앞에 오는 경우에는 사이시옷 문제가 따른다.

예) 胎줄(태줄) → 胎줄(탯줄)

電氣불(전기불) → 電氣불(전깃불)

표준코드에 해당 한자음(한자 코드 값)이 없는 경우

예를 들어 "刺"는 (찌를)"자", (칼로 찌를)"척", (수라)"라"로 읽힌다. 그러나 "자"와 "척"은 4,888자에는 각각 존재하나 "라"는 없다. 이렇듯 한자 코드 값이 없는 글자를 입력할 때 다른 자를 이용하여 입력한 경우에 한자·한글 변환시 심각한 문제가 될 것이다.

해당 한글음을 사용하지 않는 한자글꼴

이 경우는 3.4절과는 다르게 梵語나 해당 한글음이 없어 다른 음의 한자를 빌려쓰는 경우에 해당한다.

예) 初八日(초팔일) → 初八日(초파일)

南無阿彌陀佛(남무아미타불) → 南無阿彌陀佛(나무아미타불)

婆羅(파라) → 婆羅(바라)

陀羅尼(타라니) → 陀羅尼(타라니)

한자폰트는 있으나 해당 한글음에 해당하는 한자 코드가 없어서 다른 음을 빌려온 경우이다.

예) 木瓜(목과) → 木瓜(모과), 盟誓(맹서) → 盟誓(맹세)

白魚(백어) → 白魚(뱅어), 分錢(분전) → 分錢(푼전)

林巨正(임거정) → 林巨正(임꺽정)

五六月(오륙월, 오육월) → 五六月(오뉴월)

기타

한자어에서 본음으로도 나고 속음으로도 나는 것은 각각 그 소리에 따라 적는다.

예) (본음으로) (속음)

승낙(承諾) 수락(受諾)/쾌락(快諾)/허락(許諾)

만난(萬難) 곤란(困難)/논란(論難)

안녕(安寧) 의령(宜寧)/회령(會寧)

분노(忿怒) 대로(大怒)/희로애락(喜怒哀樂)

토론(討論) 의논(議論)

오륙십(五六十) 오뉴월(五六月)/유월(六月)

목재(木材) 모과(木瓜)

십일(十日) 시방정토(十方淨土)/시왕(十王)/시월(十月)

팔일(八日) 초파일(初八日)

한자 '구(句)'가 붙어서 이루어진 단위는 '귀'로 읽는 것을 인정하지 아니하고, '구'로 통일한다. 하지만 '句글(귀글)' 에서는 '귀'로 발음되는 형태를 표준어로 삼는다.

수사와 함께 쓰인 경우는 생각할 수 있다. '四(넉 사)'나 '三(석 삼)'에 '∼돈, ∼말, ∼발, ∼푼'이 따르면 '너'나 '서'로, '∼냥, ∼되, ∼섬, ∼자'가 따르면 '넉'이나 '석'으로 발음된다.

맺음말

한자 4888자만을 사용하는 완성형이나 조합형 코드에서조차 한자어를 한글로 변환하는 데서 많은 문제점을 발견하였다. 물론 일부 문제는 코드 체계의 제약으로 발생한 문제지만 그 보다는 한자어를 우리말 맞춤법에 맞게 변환하는 과정에서 더 많은 문제점이 있는 것으로 보인다. 현재 주요한 코드의 하나로 부상하고 있는 Unicode에는 2만자 이상의 한자가 포함되어 있는데 유니코드 한자를 한글로 변환하는 것은 더욱 어려운 일로 보인다.

더 많은 분들의 분발이 필요하다 할 수 있다.