Class: Ununiga::JasoSplitter

Inherits:
Object
  • Object
show all
Defined in:
lib/ununiga/jaso_splitter.rb

Overview

한글 자소분리 클래스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]

Constant Summary collapse

CHOSUNGS =
%w(                  ).freeze
JUNGSUNGS =
%w(                    ).freeze
JONGSUNGS =
%w(                          ).unshift(nil).freeze
KR_RANGE =
(''.unpack('U')[0]..''.unpack('U')[0]).freeze
KR_OFFSET =
KR_RANGE.first.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(kr_char) ⇒ JasoSplitter

Returns a new instance of JasoSplitter.



27
28
29
30
# 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

Instance Attribute Details

#kr_charObject (readonly)

Returns the value of attribute kr_char.



25
26
27
# File 'lib/ununiga/jaso_splitter.rb', line 25

def kr_char
  @kr_char
end

Instance Method Details

#extract_chosungObject



36
37
38
39
# File 'lib/ununiga/jaso_splitter.rb', line 36

def extract_chosung
  nil unless korean?
  CHOSUNGS[kr_relative_code / (JUNGSUNGS.size * JONGSUNGS.size)]
end

#extract_jongsungObject



46
47
48
49
# File 'lib/ununiga/jaso_splitter.rb', line 46

def extract_jongsung
  nil unless korean?
  JONGSUNGS[kr_relative_code % JONGSUNGS.size]
end

#extract_jungsungObject



41
42
43
44
# 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?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/ununiga/jaso_splitter.rb', line 51

def korean?
  KR_RANGE.cover?(kr_code)
end

#splitObject



32
33
34
# File 'lib/ununiga/jaso_splitter.rb', line 32

def split
  [extract_chosung, extract_jungsung, extract_jongsung]
end