// Copyright 2013 Thomas Müller // This file is part of MarMoT, which is licensed under GPLv3. package marmot.morph.mapper.latin; import marmot.morph.mapper.latin.LdtMorphTag.Degree; import marmot.morph.mapper.latin.LdtMorphTag.Mood; import marmot.morph.mapper.latin.LdtMorphTag.Pos; import marmot.morph.mapper.latin.LdtMorphTag.Tense; import marmot.morph.mapper.latin.LdtMorphTag.Voice; public class ProielLdtMorphTagMapper { public LdtMorphTag convert(String pos, String feats) { LdtMorphTag tag = new LdtMorphTag(); setPos(tag, pos); setFeats(tag, feats); return tag; } public void setFeats(LdtMorphTag tag, String feats_string) { String[] feats = feats_string.split("\\|"); for (String feat : feats) { setFeat(tag, feat); } } private void setFeat(LdtMorphTag tag, String feat) { feat = feat.toLowerCase(); switch (feat) { case "numbs": tag.number_ = LdtMorphTag.Number.s; break; case "numbp": tag.number_ = LdtMorphTag.Number.p; break; case "gendf": tag.gender_ = LdtMorphTag.Gender.f; break; case "gendn": tag.gender_ = LdtMorphTag.Gender.n; break; case "gendm": tag.gender_ = LdtMorphTag.Gender.m; break; case "gendp": case "gendq": case "gendo": case "gendr": break; // n, // nominative // g, // genitive // d, // dative // a, // accusative // b, // ablative // v, // vocative // l, // locative case "casea": tag.case_ = LdtMorphTag.Case.a; break; case "casen": tag.case_ = LdtMorphTag.Case.n; break; case "caseg": tag.case_ = LdtMorphTag.Case.g; break; case "cased": tag.case_ = LdtMorphTag.Case.d; break; case "caseb": tag.case_ = LdtMorphTag.Case.b; break; case "casel": tag.case_ = LdtMorphTag.Case.l; break; case "casev": tag.case_ = LdtMorphTag.Case.v; break; case "infln": case "infli": break; case "pers1": tag.person_ = LdtMorphTag.Person.first; break; case "pers2": tag.person_ = LdtMorphTag.Person.second; break; case "pers3": tag.person_ = LdtMorphTag.Person.third; break; case "tensr": tag.tense_ = Tense.r; break; case "tensl": tag.tense_ = Tense.l; break; case "tenst": tag.tense_ = Tense.t; break; case "tensp": tag.tense_ = Tense.p; break; case "tensi": tag.tense_ = Tense.i; break; case "tensf": tag.tense_ = Tense.f; break; case "moodi": tag.mood_ = Mood.i; break; case "moods": tag.mood_ = Mood.s; break; case "moodn": tag.mood_ = Mood.n; break; case "moodm": tag.mood_ = Mood.m; break; case "moodp": tag.pos_ = Pos.t; tag.mood_ = Mood.p; break; case "moodd": tag.mood_ = Mood.d; break; case "moodg": tag.mood_ = Mood.g; break; case "moodu": tag.mood_ = Mood.u; break; case "voica": tag.voice_ = Voice.a; break; case "voicp": tag.voice_ = Voice.p; break; case "degrp": break; case "degrs": tag.degree_ = Degree.s; break; case "degrc": tag.degree_ = Degree.c; break; default: throw new RuntimeException("Unknown feat: " + feat); } } public void setPos(LdtMorphTag tag, String pos) { assert pos.length() == 2; char c = Character.toLowerCase(pos.charAt(0)); switch (c) { case 'n': tag.pos_ = Pos.n; break; case 'v': tag.pos_ = Pos.v; break; case 'd': tag.pos_ = Pos.d; break; case 'c': case 'g': tag.pos_ = Pos.c; break; case 'p': tag.pos_ = Pos.p; break; case 'r': tag.pos_ = Pos.r; break; case 'm': tag.pos_ = Pos.m; break; case 'a': tag.pos_ = Pos.a; break; case 'i': tag.pos_ = Pos.i; break; case 'f': tag.pos_ = Pos.Undef; break; default: throw new RuntimeException("Unknown tag character: " + c); } } }