class Ununiga::JasoSplitter

한글 자소분리 클래스 1개의 한글 문자를 초성/중성/종성으로 분리한다.

Sample:

splitter = Ununiga::JasoSplitter.new('흯')
splitter.extract_chosung       # => 'ㅎ'
splitter.extract_jungsung      # => 'ㅢ'
splitter.extract_jongsung      # => 'ㄳ'
splitter.split                 # => ['ㅎ', 'ㅢ', 'ㄳ']

# 종성이 없는 경우는 nil
splitter2 = Ununiga::JasoSplitter.new('가')
splitter2.extract_jongsung     # => nil
splitter2.split                # => ['ㄱ', 'ㅏ', nil]

Constants

CHOSUNGS
JONGSUNGS
JUNGSUNGS
KR_OFFSET
KR_RANGE

Attributes

kr_char[R]

Public Class Methods

new(kr_char) click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 27
def initialize(kr_char)
  fail ArgumentError, 'Argument must be single character' unless kr_char.size == 1
  @kr_char = kr_char
end

Public Instance Methods

extract_chosung() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 36
def extract_chosung
  nil unless korean?
  CHOSUNGS[kr_relative_code / (JUNGSUNGS.size * JONGSUNGS.size)]
end
extract_jongsung() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 46
def extract_jongsung
  nil unless korean?
  JONGSUNGS[kr_relative_code % JONGSUNGS.size]
end
extract_jungsung() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 41
def extract_jungsung
  nil unless korean?
  JUNGSUNGS[kr_relative_code % (JUNGSUNGS.size * JONGSUNGS.size) / JONGSUNGS.size]
end
korean?() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 51
def korean?
  KR_RANGE.cover?(kr_code)
end
split() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 32
def split
  [extract_chosung, extract_jungsung, extract_jongsung]
end

Private Instance Methods

kr_code() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 61
def kr_code
  kr_char.unpack('U')[0]
end
kr_relative_code() click to toggle source
# File lib/ununiga/jaso_splitter.rb, line 65
def kr_relative_code
  kr_code - KR_OFFSET
end