Class: Utanone::Uta
- Inherits:
-
Object
- Object
- Utanone::Uta
- Defined in:
- lib/utanone/uta.rb
Constant Summary collapse
- EXCLUDING_COUNTING_RUBY_BY_TANKA =
/ァ|ィ|ォ|ャ|ュ|ョ/
- EXCLUDING_COUNTING_LEXICAL_CATEGORIES =
%w[記号].freeze
- HIRAGANA_AND_KATAKANA =
/\A[ぁ-んァ-ヶー-]+\z/
Instance Attribute Summary collapse
-
#original_str ⇒ Object
readonly
Returns the value of attribute original_str.
-
#parsed_morphemes ⇒ Object
readonly
Returns the value of attribute parsed_morphemes.
Instance Method Summary collapse
-
#correct(correct_yomigana:) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #count(tanka: false) ⇒ Object
-
#initialize(str, ref_uta = nil) ⇒ Uta
constructor
A new instance of Uta.
- #yomigana ⇒ Object
Constructor Details
#initialize(str, ref_uta = nil) ⇒ Uta
Returns a new instance of Uta.
13 14 15 16 |
# File 'lib/utanone/uta.rb', line 13 def initialize(str, ref_uta = nil) @original_str = str @parsed_morphemes = parse_to_hash(str, ref_uta) end |
Instance Attribute Details
#original_str ⇒ Object (readonly)
Returns the value of attribute original_str.
7 8 9 |
# File 'lib/utanone/uta.rb', line 7 def original_str @original_str end |
#parsed_morphemes ⇒ Object (readonly)
Returns the value of attribute parsed_morphemes.
7 8 9 |
# File 'lib/utanone/uta.rb', line 7 def parsed_morphemes @parsed_morphemes end |
Instance Method Details
#correct(correct_yomigana:) ⇒ Object
rubocop:disable Metrics/AbcSize
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/utanone/uta.rb', line 36 def correct(correct_yomigana:) # rubocop:disable Metrics/AbcSize converted_correct_yomigana = convert_kana(correct_yomigana) return self if yomigana == converted_correct_yomigana # 訂正したよみがなで再作成したUtaインスタンスを作成するので、一旦コピーする corrected_uta = Uta.new(@original_str) corrected_uta.parsed_morphemes.each_with_index do |morpheme, i| # 形態素ごとによみがなの修正が必要であれば修正する if converted_correct_yomigana[0, morpheme[:ruby].size] == morpheme[:ruby] # よみがなが一致したらそのまま処理を続行する # 比較したよみがな部分は訂正済みよみがなから削除する converted_correct_yomigana.slice!(0, morpheme[:ruby].size) next else # よみがなが不一致なら修正する next_morpheme = corrected_uta.parsed_morphemes[i + 1] if next_morpheme # 修正済みよみがなから次の形態素に一致する箇所を探すことで修正したい形態素のよみがなを取得する next_morpheme_start = converted_correct_yomigana.index(next_morpheme[:ruby]) # 一致箇所がなければ修正ができないものとして処理を中断する(よみがな不一致が連続すると修正できない) # TODO: 再帰を使って連続したよみがな不一致も修正できないか break unless next_morpheme_start # 取得できた場合は修正する morpheme[:ruby] = converted_correct_yomigana[0, next_morpheme_start] converted_correct_yomigana.slice!(0, morpheme[:ruby].size) else # 最後の形態素だった時 morpheme[:ruby] = converted_correct_yomigana end end end corrected_uta end |
#count(tanka: false) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/utanone/uta.rb', line 22 def count(tanka: false) words_hash_without_symbol = @parsed_morphemes.reject{ Utanone::Uta::EXCLUDING_COUNTING_LEXICAL_CATEGORIES.include?(_1[:lexical_category]) } count_size = 0 words_hash_without_symbol.each do |h| if tanka # tanka オプションを入れた場合は ァ|ィ|ォ|ャ|ュ|ョ は音数に数えない count_size += h[:ruby].size - h[:ruby].scan(Utanone::Uta::EXCLUDING_COUNTING_RUBY_BY_TANKA).size else count_size += h[:ruby].size end end count_size end |
#yomigana ⇒ Object
18 19 20 |
# File 'lib/utanone/uta.rb', line 18 def yomigana @parsed_morphemes.map { _1[:ruby] }.join end |