사용자:Yes0song/다지모/한자입력기

위키백과, 우리 모두의 백과사전.

한자혼용한문을 주로 입력하는 한국어 사용자를 위한 한자 데이터 정리방법과 입력기에 관한 저의 생각을 정리해 보았습니다.

한자 데이터[편집]

한자에 관련된 데이터베이스를 모아보았습니다.

알아두어야 할 것[편집]

저작권[편집]

한자의 훈, 음은 한국어의 일부이므로 어느 누구도 저작권을 주장할 수 없다. MS IME의 한자 데이터나, 네이버 사전의 한자 데이터를 추출해서 사용하더라도 저작권 위반이라 볼 수 없습니다. MS IME의 한자 정렬 방법이나, 네이버 한자 사전의 한자의 기원 설명 등은 해당 당사자가 저작권을 가지고 있으나, 가장 중요한 내용인 한자의 훈, 음 그 자체로는 저작권법 상 저작물이 아닙니다.

libhangul의 한자 데이터[편집]

libhangul열린 한글 프로젝트에서 만든 한글 처리 라이브러리이며, 리눅스의 scim, nabi와 Windows의 새나루에서 사용중이다.

  • 다운로드 : 가장 최신 버전인 libhangul-0.0.4.tar.gz 파일을 다운 받으면 된다.

hanja.txt[편집]

libhangul의 한자 데이터는 "data/hanja/hanja.txt"에 위치한다.

가:仮:假의 略字
가:价:
가:伽:절 가
가:佉:
가:佳:아름다울 가
(생략...)
가가:假家:
가가대소:呵呵大笑:
가가호호:家家戶戶:
  • 각 열은 :(콜론)으로 나누어져 있으며, "한글 / 한자 / 음과 훈"으로 구성되어 있다.
  • 각 행은 한글 가나다 순으로 정렬되어 있다.
  • 행이 #으로 시작하는 부분은 주석이다.

한자한글변환 프로젝트[편집]

한자한글변환 프로젝트는 한자와 한글을 서로 변환하기 위한 데이터베이스를 구측하는 프로젝트이다.

  • 다운로드 : 가장 최신 버전인 hanja-0.0.6.tar.gz 파일을 다운받으면 된다.

파일의 형식[편집]

dic0.txt[편집]
不	不
串	串
丹	丹
亂	亂
了	了
  • 각 열은 Tab으로 나누어져 있으며, "한중일 호환용 한자 / 한중일 통합 한자"순으로 구성되어 있다.
  • 각 행은 유니코드와 동일한 순서로 정렬되어 있다.
  • #으로 시작하는 행은 주석이다.
dic1.txt ~ dic5.txt[편집]
一	일
丁	정
丂	교
七	칠
丄	상
丅	하
  • 각 열은 Tab으로 나누어져 있으며, "한자 / 한글" 순으로 구성되어 있다.
  • 각 행은 유니코드와 동일한 순서로 정렬되어 있다.
  • #으로 시작하는 행은 주석이다.

파일의 종류[편집]

  1. dic0.txt : "한중일 호환 한자"를 "한중일 통합 한자"로 변환하기 위한 표이다.
  2. dic1.txt : 두음법칙이 적용되지 않은 "한중일 통합 한자", "한중일 통합 한자 확장 A", "한중일 호환용 한자"의 대표음 목록이다.
  3. dic2.txt : "한중일 통합 한자"와 "한중일 통합 한자 확장 A"의 유니코드 대표음 목록이다.
  4. dic3.txt : "한중일 호환용 한자"의 유니코드 대표음 목록이다.
  5. dic4.txt : libhangul에서 추출한 한자어 목록이다. 정규화 알고리즘이 적용되어 있다.
  6. dic5.txt : 한자한글변환기에서 정확성을 높이기 위한 한자 목록이다. (유니코드 대표음은 아니나, 자주 사용되는 음을 담았다)

국립국어원의 6개 사전의 표제어 목록 DB[편집]

윈본은 국립국어원의 표준국어대사전 자료집에서 다운받을 수 있습니다.

txt파일로 변환된 것을 받으려면 아래 파일을 다운받으시기 바랍니다. UTF-8로 인코딩 되어 있습니다.

README.txt[편집]

kordic.txt 파일은 국립국어원 "표준국어대사전 자료"의 "6개 사전의 표제어 목록 DB"에서 추출한 자료입니다.
옛한글은 첫가끝 코드로 변환하였으며, UTF-8 인코딩으로 저장하였습니다.
각 열은 아래 설명에 있는 num, lemma, lemindex, kum, min, sam, uri, nor, seo, origin순으로 정렬되어 있으며,
각 열은 Tab으로 구분되어 있습니다. 
이 자료는 저작권이 어디에도 속하지 않은 "Public Domain" 입니다.

== 국립국어원의 설명 ==
연구원에서 오려 붙인 6개 사전의 목록을 관리하던 파일입니다. 6개 사전은 금성출판사, 민중서림, 삼성출판사, 한글학회에서 나온 우리말 큰사전과 북한에서 간행된 조선말사 
전(1962), 조선말대사전(1992)입니다. 원래 폭스프로(foxpro)에서 파일로 작성된 것이지만 지금은 이 파일을 읽기가 쉽지 않아 액세스(access)로 전환한 것입니다. 입력한  
후 제대로 수정을 하지 않았기 때문에 오류가 많습니다. 주의하시기 바랍니다. 그리고 액세스 파일로 전환하는 중에 일부 옛글자들은 깨져서 무슨 글자인지 알 수 없게 되었습니다.
또한 불필요한 필드는 삭제했습니다. 
  각 필드의 내용은 다음과 같습니다.
  - num : 관리를 위해 각 단어별로 붙여둔 번호를 기록한 필드입니다. 자모는 영문자로 구분하고 뒤에 숫자로 각 단어를 구분하였습니다.
  - lemma : 표제어를 수록한 필드입니다. 사전에 나오는 기호를 그대로 사용하였는데 띄어쓰기가 된 단어에는 공백 대신 "$"를 넣었습니다.
                 동음이의어는 사전을 오려 붙인 순서대로 원내에서 번호로 구분하였습니다.
  - lemindex : lemma 필드의 내용 중에서 각종 기호를 삭제하고 한글과 숫자만 남긴 필드입니다. 인덱스나 검색을 위해 만든 필드입니다.
  - kum, min, sam, uri, nor, seo : 사전별로 표제어의 수록 여부를 기록한 필드입니다.(1:주표제어, 2:부표제어)
  - origin : 원어를 기록한 필드입니다. 나중에 추가했기 때문에 원어 정보가 기록되지 않은 경우도 있습니다.

kordic.txt[편집]

A-000011	ㄱ01	ㄱ01							
A-000012	ㄱ02	ㄱ02	1	1		1	1		
A-000013	-ㄱ03	ㄱ03	1						
A-000014	-ㄱ까	ㄱ까				1			
A-000015	ㄱㄴㄷ-순	ㄱㄴㄷ순			1	1			
A-000016	ㄱㄴㄷ-차례	ㄱㄴㄷ차례			1	1			
A-000017	ㄱㄴ-순	ㄱㄴ순	1	1	1	1			-順
(...생략)
lemma[편집]
  - lemma : 표제어를 수록한 필드입니다. 사전에 나오는 기호를 그대로 사용하였는데 띄어쓰기가 된 단어에는 공백 대신 "$"를 넣었습니다.
  • 기호
    • $ : 이 부분은 띄어쓰기하는 것이 원칙이며, 띄어쓰기를 하지 않는 것을 허용한다는 의미입니다.
    • - : 형태소를 구분하는 기호입니다.
    • : : 앞 글자가 장음임을 나타냅니다.
    • (숫자) : 동음이의어를 구분하기 위한 숫자입니다.
  • 문제점
    • 일부 옛한글이 로 깨져 나오는 오류가 있습니다.
origin[편집]
  - origin : 원어를 기록한 필드입니다. 나중에 추가했기 때문에 원어 정보가 기록되지 않은 경우도 있습니다.
  • 원어는 한자와 로마자 2가지 종류가 있습니다.
  • 한자어와 고유어가 합성된 경우, 고유어 부분은 -로 생략되어 있습니다.
  • 일부 글자에 @기호가 들어가 있는데, @의 앞글자가 한자이나, 기술적 문제로 인해 한글로 입력한 경우를 뜻합니다.
  • 문제점 : 일부 글자에 &기호가 들어가 있는데, 이 부분은 데이터가 깨진 부분입니다.

hanja_big[편집]

이 파일은 국립국어원의 6개 사전의 표제어 목록 DB을 KLDP redneval님께서 정리한 자료입니다.[1]

파일 종류;

  • hanja_big.txt_type1 : Type 3가 아니면서, 한자의 글자수와 한글의 글자수가 똑같은 경우.
  • hanja_big.txt_type1 : Type 3가 아니면서, 한글의 글자수가 더 적은 경우. 단어에 순우리말 또는 외래어가 들어갔거나 또는 그 밖의 이유로.
  • hanja_big.txt_type1 : 단어가 1:1 매칭이 되지 않는 경우. 하나의 한글단어에 한자가 여러 단어가 존재함.

한자 데이터의 정리[편집]

한글 입력기는 한글을 입력 후 한자키를 눌렀을 때 빈도순으로 정리된 한자에서 선택 할 수 있도록 해 줍니다. 따라서 데이터를 다음과 같이 정리 할 필요가 있습니다.

  1. 한글 : 한자 및 한자어를 한글로 쓴 것
  2. 한자 : 변환될 한자 및 한자어
  3. 의미 : 한자와 한자어의 뜻
  4. 빈도 : 한자와 한자어의 빈도

이체자 정리[편집]

대한민국의 한자는 다음과 같은 문제로 많은 이체자들이 발생합니다.

  1. 대한민국에서 몇몇 한자와 몇몇 한자어는 복수의 한자 표기를 인정합니다.
  2. 유니코드에 제대로 맵핑이 되지 않아. KS표준과, 상용한자와, 본자(本字)가 따로따로인 경우가 많습니다.
  3. 여러개의 음을 가진 한자를 처리하기 위해, 한중일 호환용 한자를 사용하는 경우가 대부분인데, 잘못된 코드로 되어 있는 경우가 많습니다.

해결 방법[편집]

제가 생각하는 해결 방법은 이렇습니다.

  1. 이체자의 경우는 검색사이트등을 이용하여, 빈도가 가장 높은 한자로 통일힌다.
  2. 데이터베이스는 유니코드 정규화 알고리즘을 적용하여, 모든 한자를 한중일 통합 한자로 통일한다.

hanja big 파일 정리[편집]

Type 2[편집]

Type2는 Type 3가 아니면서, 단어에 순우리말 또는 외래어가 들어갔거나 또는 그 밖의 이유로 한글의 글자수가 더 적은 경우 입니다. 입력기에 사용하기 위해서는 글자수가 부족한 부분에 한글을 채워줄 필요가 있습니다.

  • 예 : 가나다순: → 가나다순:가나다順

이를 위해 비어있는 한글을 채워줄 스크립트를 작성할 필요가 있습니다.

Type 3[편집]

Type 3은 단어가 1:1 매칭이 되지 않는 경우. 하나의 한글단어에 한자가 여러 단어가 존재하는 경우입니다.

저는 검색사이트등을 이용하여, 빈도가 가장 높은 한자를 택하는 것이 가장 좋은 방법이라고 생각합니다.

한자 빈도 조사[편집]

한자 빈도 조사를 위한 스크립트가 필요합니다.

최종 완성된 데이터[편집]

최종 완성된 데이터는 다른 용도로 사용할 수 있도록 빈도가 포함된 것과, 입력기에 사용하기 위한 단순히 빈도순으로 정렬한 것으로 구분하는 것이 좋을 것 같습니다.

예를 들자면 빈도가 포함된 데이터는 이런식으로 되어 있을 것이고:

신:臣:신하 신:3000
신:莘:약이름 신:20
신:新:새로울 신:15000

실제 입력기에서 사용할 데이터는 이것을 빈도순으로 정리한 후, 마지막 부분의 빈도 숫자를 제거한 것이 될 것입니다.

신:新:새로울 신
신:臣:신하 신
신:莘:약이름 신

입력기[편집]

기본 입력 방법[편집]

한자를 입력하는 방법은 현재 SCIM에서 사용하는 방법이 가장 편리한 방법이라고 생각합니다.

한글 모드[편집]

  • 한글 입력 후, 한자키나, F9를 누르면 한자 목록이 뜨며, 이 중에서 원하는 한자를 선택해서 입력합니다.

한자 입력 모드[편집]

  • 한글을 입력하면 실시간으로 한자 목록이 뜨며, 방향키와 엔터로 한자를 선택하여 입력합니다.
  • 숫자키로도 선택할 수가 있다면 좀더 편리한 입력이 가능할 것입니다.

이체자와 한중일 호환용 한자[편집]

  • 모든 한자 데이터가 한중일 통합 한자로 되어 있으므로, 실제로 많이 사용하는 "한중일 호환용 한자"를 입력할 수 있도록 하기 위해서, 입력기상에서 이를 변환할 수 있도록 하는 기능이 필요합니다.
  • KS표준과, 상용한자, 본자(本字) 중 어떤 한자로 입력할 것인지 선택하는 기능이 있다면, 좀 더 다양한 용도로 사용할 수 있을 것입니다.


위의 기능을 위해 제가 생각하는 방법은 다음과 같습니다.
  1. 입력기에서 한자 이체자 처리를 위한 간단한 번역기(1:1 치환 방식)를 제공합니다.
  2. 사용자는 여러개의 번역용 데이터베이스 중 하나를 선택할 수 있도록 합니다.
  3. 사용자가 임으로 작성한 데이터베이스를 쉽게 추가할 수 있도록 합니다.

관련 링크[편집]

관련 도구[편집]

관련 사이트[편집]

한자 빈도 조사를 위한 데이터[편집]