한자 데이터를 추가하고 있습니다

Sun, Dec 6 2020 13:14:20

안녕하세요.

티엔에 부족한 부분이 있는데 현재 한자 데이터가 너무 비약합니다. 그래서 한자 데이터를 수작업으로 추가하고 있습니다. 정확성을 위해 각각의 한자를 다음한자사전, 네이버한자사전, 국립국어원 표준국어대사전에서 수작업으로 검색해본 후에 한자를 수작업으로 추가한 후, 다음의 스크립트로 한자 데이터를 c 언어에서 활용하기 좋은 형태로 변환하는 작업을 하고 있습니다.

#!/usr/local/bin/ruby
# ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
# https://www.unicode.org/charts/unihan.html

dict = {
  "가" => ["佳:아름답다", "加:더하다", "家:집", "歌:노래", "街:거리"],
  "가격" => ["價格"],
  "가곡" => ["歌曲"],
  # 중략
  "희망" => ["希望"],
  "희열" => ["喜悅"],
  "희운지악" => ["熙運之樂"],
}

puts "
typedef struct _TianDictItem {
  char *key;
  char *value;
} TianDictItem;

const TianDictItem items[] = {"

dict.dup.each do |key, value|
  if key.size > 1
    key.size.times do |i|
      value.size.times do |j|
        dict[key[i]] = [] if dict[key[i]].nil?

        if value[j][i].nil?
          puts "Error at #{[key, value]}"
          exit
        end

        if not dict[key[i]].join.include? value[j][i]
          dict[key[i]] << value[j][i]
        end
      end
    end
  end
end

exclude = {
  "궐" => ["卷"], # 궐련
  "뉴" => ["六"], # 오뉴월
  "라" => ["拏"], # 한라산
  "란" => ["難", "暖", "煖"], # 곤란, 한란
  "랑" => ["囊"], # 우랑
  "량" => ["場"], # 도량
  "련" => ["煙"], # 궐련
  "렴" => ["炎"], # 폐렴
  "령" => ["寧"], # 무령왕릉
  "로" => ["怒"], # 대로
  "리" => ["異", "提"], # 지리산, 보리수
  "모" => ["木"], # 모과
  "보" => ["布"], # 보시
  "세" => ["誓"], # 맹세
  "시" => ["十"], # 시월
  "유" => ["六"], # 유월
  "파" => ["八"], # 초파일
  "탕" => ["糖"], # 사탕
  "팍" => ["愎"], # 괴팍
}

exclude.each do |key, value|
  if not dict[key].nil?
    dict[key] -= exclude[key]
    dict.delete(key) if dict[key].size.zero?
  end
end

count = 0

dict = dict.sort_by { |k, v| k.bytes } # strcmp() for bsearch()
dict.each do |key, value|
  puts "  { \"#{key}\", \"#{value.sort.join"|"}\" },"
  if key.size == 1
    count += value.size
  end
end

puts "};"

puts "/* " + count.to_s + "-letter */"

교육용 한자 1800글자, 대법원 인명용 한자를 수록하는 것을 목표로 하고 있습니다만, 여러가지 이유로 비실용적인 한자나 검증이 어려운 한자는 추가하지 않고 있습니다.

현재 약 2300여 한자를 수록하였으며 계속 추가 중입니다.
다음 버전에서 이용 가능하실 것 같습니다.
티엔 애용에 감사드립니다.