Class: Ununiga::JasoSplitter
- Inherits:
-
Object
- Object
- Ununiga::JasoSplitter
- 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
-
#kr_char ⇒ Object
readonly
Returns the value of attribute kr_char.
Instance Method Summary collapse
- #extract_chosung ⇒ Object
- #extract_jongsung ⇒ Object
- #extract_jungsung ⇒ Object
-
#initialize(kr_char) ⇒ JasoSplitter
constructor
A new instance of JasoSplitter.
- #korean? ⇒ Boolean
- #split ⇒ Object
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_char ⇒ Object (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_chosung ⇒ Object
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_jongsung ⇒ Object
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_jungsung ⇒ Object
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
51 52 53 |
# File 'lib/ununiga/jaso_splitter.rb', line 51 def korean? KR_RANGE.cover?(kr_code) end |
#split ⇒ Object
32 33 34 |
# File 'lib/ununiga/jaso_splitter.rb', line 32 def split [extract_chosung, extract_jungsung, extract_jongsung] end |