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