class Myasorubka::AOT::Tags

AOT-to-MSD morphosyntactic descriptors translator.

Public Class Methods

join(hash, msd) click to toggle source
# File lib/myasorubka/aot/tags.rb, line 6
def self.join(hash, msd)
  msd.grammemes.inject(hash) { |h, (k, v)| h[k.to_s] = v.to_s; h }
end
russian(pos_line, grammemes_line) click to toggle source

Russian language.

# File lib/myasorubka/aot/tags.rb, line 134
def self.russian(pos_line, grammemes_line)
  grammemes = grammemes_line.split(',').map do |grammeme|
    Myasorubka::Unicode.downcase(grammeme)
  end

  msd = Myasorubka::MSD.new(Myasorubka::MSD::Russian)

  if grammemes.include? 'aббр'
    msd[:pos] = :abbreviation
    msd[:syntactic_type] = if 'Н' == pos_line
      :adverbial
    else
      :nominal
    end
    pos_line = 'АББР'
  end

  case Myasorubka::Unicode.upcase(pos_line)
  when 'С' then begin
    msd[:pos] = :noun
    msd[:type] = if (grammemes & [ 'имя', 'фам', 'отч', 'жарг', 'арх', 'проф', 'опч' ]).empty?
      :common
    else
      :proper
    end
    [ :gender, :number, :case, :animate, :case2 ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'П' then begin
    msd[:pos] = :adjective
    msd[:type] = if grammemes.include? 'кач'
      :qualificative
    elsif grammemes.include? 'притяж'
      :possessive
    end
    msd[:degree] = :positive
    msd[:definiteness] = :full_art
    [ :degree, :gender, :number, :case, :definiteness ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'МС' then begin
    msd[:pos] = :pronoun
    msd[:type] = :possessive if grammemes.include? 'притяж'
    [ :person, :gender, :number, :case, :animate ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'МС-ПРЕДК' then begin
    msd[:pos] = :pronoun
    msd[:type] = :possessive if grammemes.include? 'притяж'
    msd[:case] = :genitive
    [ :person, :gender, :number, :animate ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'МС-П' then begin
    msd[:pos] = :pronoun
    msd[:type] = :possessive if grammemes.include? 'притяж'
    msd[:syntactic_type] = :adjectival
    [ :person, :gender, :number, :case, :animate ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'Г' then begin
    msd[:pos] = :verb
    msd[:type] = :main
    msd[:vform] = if grammemes.include? 'пвл'
      :imperative 
    end
    msd[:definiteness] = :full_art
    [ :tense, :person, :number, :gender, :voice, :definiteness,
      :aspect, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ПРИЧАСТИЕ' then begin
    msd[:pos] = :verb
    msd[:vform] = :participle
    msd[:definiteness] = :full_art
    [ :tense, :person, :number, :gender, :voice, :definiteness,
      :aspect, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ДЕЕПРИЧАСТИЕ' then begin
    msd[:pos] = :verb
    msd[:vform] = :gerund
    msd[:definiteness] = :full_art
    [ :tense, :person, :number, :gender, :voice, :definiteness,
      :aspect, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ИНФИНИТИВ' then begin
    msd[:pos] = :verb
    msd[:vform] = :infinitive
    msd[:definiteness] = :full_art
    [ :tense, :person, :number, :gender, :voice, :definiteness,
      :aspect, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ЧИСЛ' then begin
    msd[:pos] = :numeral
    msd[:type] = :cardinal
    [ :gender, :number, :case, :animate ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ЧИСЛ-П' then begin
    msd[:pos] = :numeral
    msd[:type] = :ordinal
    [ :gender, :number, :case, :animate ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'Н' then begin
    msd[:pos] = :adverb
    msd[:degree] = :positive
    [ :degree ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ПРЕДК' then begin
    msd[:pos] = :adverb
    msd[:degree] = :positive
    [ :degree ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'ПРЕДЛ' then begin
    msd[:pos] = :adposition
    msd[:type] = :preposition
    [ :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when 'СОЮЗ' then begin
    msd[:pos] = :conjunction
  end
  when 'МЕЖД' then begin
    msd[:pos] = :interjection
  end
  when 'ЧАСТ' then begin
    msd[:pos] = :particle
  end
  when 'ВВОДН' then begin
    msd[:pos] = :adposition
  end
  when 'КР_ПРИЛ' then begin
    msd[:pos] = :adjective
    msd[:type] = if grammemes.include? 'кач'
      :qualificative
    elsif grammemes.include? 'притяж'
      :possessive
    end
    msd[:degree] = :positive
    [ :degree, :gender, :number, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
    msd[:definiteness] = :short_art
  end
  when 'КР_ПРИЧАСТИЕ' then begin
    msd[:pos] = :verb
    msd[:vform] = :participle
    [ :tense, :person, :number, :gender, :voice,
      :aspect, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
    msd[:definiteness] = :short_art
  end
  when 'АББР' then begin
    [ :gender, :number, :case ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  when '*' then begin
    msd[:pos] = :crutch
    [ :gender, :animate, :number, :case, :case2, :aspect,
      :voice, :tense, :person, :definiteness,
      :degree ].each do |attribute|
      Russian.send(attribute, msd, grammemes)
    end
  end
  else
    msd[:pos] = :residual
  end

  msd
end