// Copyright 2013 Thomas Müller
// This file is part of MarMoT, which is licensed under GPLv3.
package marmot.morph.mapper.czech;
public class PdTMsdMapper {
public MsdTag map(PdtMorphTag tag) {
MsdTag msd_tag = new MsdTag();
setPos(msd_tag, tag);
setTense(msd_tag, tag);
setPerson(msd_tag, tag);
setNumber(msd_tag, tag);
setGender(msd_tag, tag);
// There are some cyclic dependencies ...
setNumber(msd_tag, tag);
setGender(msd_tag, tag);
setVoice(msd_tag, tag);
setDegree(msd_tag, tag);
setCase(msd_tag, tag);
return msd_tag;
}
private void setCase(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.case_) {
case nom:
msd_tag.case_ = MsdTag.Case.n;
break;
case gen:
msd_tag.case_ = MsdTag.Case.g;
break;
case dat:
msd_tag.case_ = MsdTag.Case.d;
break;
case acc:
msd_tag.case_ = MsdTag.Case.a;
break;
case loc:
msd_tag.case_ = MsdTag.Case.l;
break;
case voc:
msd_tag.case_ = MsdTag.Case.v;
break;
case ins:
msd_tag.case_ = MsdTag.Case.i;
break;
case _:
break;
}
}
private void setDegree(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.degree_) {
case pos:
msd_tag.degree_ = MsdTag.Degree.p;
break;
case comp:
msd_tag.degree_ = MsdTag.Degree.c;
break;
case sup:
msd_tag.degree_ = MsdTag.Degree.s;
break;
case _:
break;
}
}
private void setVoice(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.voice_) {
case a:
msd_tag.voice_ = MsdTag.Voice.a;
break;
case p:
msd_tag.voice_ = MsdTag.Voice.p;
break;
case _:
break;
}
}
private void setGender(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.gender_) {
case f:
msd_tag.gender_ = MsdTag.Gender.f;
break;
case i: // Masculine inanimate
case m: // Masculine animate
case y: // Masculine (either animate or inanimate)
msd_tag.gender_ = MsdTag.Gender.m;
break;
case n:
msd_tag.gender_ = MsdTag.Gender.n;
break;
case q:
// Feminine (with singular only) or Neuter (with plural only)
if (msd_tag.number_ == MsdTag.Number.s) {
msd_tag.gender_ = MsdTag.Gender.f;
}
if (msd_tag.number_ == MsdTag.Number.p) {
msd_tag.gender_ = MsdTag.Gender.n;
}
break;
case t:
// Masculine inanimate or Feminine (plural only)
if (msd_tag.number_ == MsdTag.Number.s) {
msd_tag.gender_ = MsdTag.Gender.m;
}
break;
case z:
case h:
case _:
break;
}
}
private void setNumber(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.number_) {
case s:
msd_tag.number_ = MsdTag.Number.s;
break;
case p:
msd_tag.number_ = MsdTag.Number.p;
break;
case d:
msd_tag.number_ = MsdTag.Number.d;
break;
case w:
// Singular for feminine gender, plural with neuter;
if (msd_tag.gender_ == MsdTag.Gender.f) {
msd_tag.number_ = MsdTag.Number.s;
}
if (msd_tag.gender_ == MsdTag.Gender.n) {
msd_tag.number_ = MsdTag.Number.p;
}
break;
case _:
break;
}
}
private void setPerson(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.person_) {
case fst:
msd_tag.person_ = MsdTag.Person.fst;
break;
case snd:
msd_tag.person_ = MsdTag.Person.snd;
break;
case thd:
msd_tag.person_ = MsdTag.Person.thd;
break;
case _:
break;
}
}
private void setTense(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.tense_) {
case f:
msd_tag.tense_ = MsdTag.Tense.f;
break;
case h:
break;
case p:
msd_tag.tense_ = MsdTag.Tense.p;
break;
case r:
msd_tag.tense_ = MsdTag.Tense.s;
break;
case _:
break;
}
}
private void setPos(MsdTag msd_tag, PdtMorphTag tag) {
switch (tag.pos_) {
case a: // Adjective
msd_tag.pos_ = MsdTag.Pos.a;
break;
case c: // Numeral
msd_tag.pos_ = MsdTag.Pos.m;
break;
case d: // Adverb
msd_tag.pos_ = MsdTag.Pos.r;
break;
case i: // Interjection
msd_tag.pos_ = MsdTag.Pos.i;
break;
case j: // Conjunction
msd_tag.pos_ = MsdTag.Pos.c;
break;
case n: // Noun
msd_tag.pos_ = MsdTag.Pos.n;
break;
case p: // Pronoun
msd_tag.pos_ = MsdTag.Pos.p;
break;
case v: // Verb
msd_tag.pos_ = MsdTag.Pos.v;
break;
case r: // Preposition
msd_tag.pos_ = MsdTag.Pos.s;
break;
case t: // Particle
msd_tag.pos_ = MsdTag.Pos.q;
break;
case z: // Punctuation (also used for the Sentence Boundary token)
msd_tag.pos_ = MsdTag.Pos.z;
break;
case x:
break;
case _:
break;
}
}
}