package hu.u_szeged.nlp.pos.converter;
import hu.u_szeged.nlp.pos.KRUtils;
import hu.u_szeged.nlp.pos.MorAna;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
public class KRToMSD {
private Map<String, Set<String>> cache = null;
public KRToMSD() {
this.setCache(new TreeMap<String, Set<String>>());
}
/**
* melleknevi igenevek
*/
public boolean isParticiple(String krAnalysis) {
int verbIndex = krAnalysis.indexOf("/VERB");
int adjIndex = krAnalysis.indexOf("/ADJ");
if (verbIndex > -1 && adjIndex > -1 && adjIndex > verbIndex) {
return true;
}
return false;
}
public String getPostPLemma(String analysis) {
if (analysis.startsWith("$én/NOUN<POSTP<") || analysis.startsWith("$te/NOUN<POSTP<") || analysis.startsWith("$ő/NOUN<POSTP<")
|| analysis.startsWith("$mi/NOUN<POSTP<") || analysis.startsWith("$ti/NOUN<POSTP<") || analysis.startsWith("$ők/NOUN<POSTP<")) {
String post = null;
if (analysis.startsWith("$én") || analysis.startsWith("$te")) {
post = analysis.substring(15, analysis.length() - 11).toLowerCase();
} else if (analysis.startsWith("$ők")) {
post = analysis.substring(15, analysis.length() - 14).toLowerCase();
} else if (analysis.startsWith("$ő")) {
post = analysis.substring(14, analysis.length() - 8).toLowerCase();
} else if (analysis.startsWith("$mi") || analysis.startsWith("$ti")) {
post = analysis.substring(15, analysis.length() - 17).toLowerCase();
}
if (analysis.startsWith("$ő") && !analysis.startsWith("$ők")) {
analysis = analysis.substring(2);
} else {
analysis = analysis.substring(3);
}
return post;
}
// $ez/NOUN<POSTP<ELŐTT>>[ATTRIB]/ADJ(-1)(i)<CAS<INS>>
if (analysis.startsWith("$ez/NOUN<POSTP<") || analysis.startsWith("$az/NOUN<POSTP<")) {
String affix = analysis.substring(15);
affix = affix.substring(0, affix.indexOf(">")).toLowerCase();
// alá, alatt, alól, által, elé, eléb, ellen, elöl, előtt, iránt, után
// (pl.: ezután)
if (analysis.contains("(i)")) {
if (affix.startsWith("a") || affix.startsWith("á") || affix.startsWith("e") || affix.startsWith("i") || affix.startsWith("u"))
return analysis.substring(1, 3) + affix + "i";
return analysis.substring(1, 2) + affix + "i";
}
return analysis.substring(1, 3) + affix;
}
return analysis.substring(1, analysis.indexOf("/"));
}
public String convertNoun(String lemma, String kr) {
StringBuffer msd = null;
msd = new StringBuffer("Nc-sn------");
/*
* nevmas minden PERS-t tartalmazo NOUN
*/
// velem
// /NOUN<PERS<1>><CAS<INS>>
if (kr.contains("PERS")) {
msd = new StringBuffer("Pp--sn-----------");
/*
* szemely
*/
// 1
if (kr.contains("<PERS<1>>")) {
msd.setCharAt(2, '1');
}
// 2
if (kr.contains("<PERS<2>>")) {
msd.setCharAt(2, '2');
}
// 3
if (kr.contains("<PERS>")) {
msd.setCharAt(2, '3');
}
/*
* szam
*/
if (kr.contains("<PLUR>")) {
msd.setCharAt(4, 'p');
}
/*
* eset
*/
// n nincs jelolve alapeset
// a
if (kr.contains("<CAS<ACC>>")) {
msd.setCharAt(5, 'a');
}
// g nincs jelolve
if (kr.contains("<CAS<GEN>>")) {
msd.setCharAt(5, 'g');
}
// d
if (kr.contains("<CAS<DAT>>")) {
msd.setCharAt(5, 'd');
}
// i
if (kr.contains("<CAS<INS>>")) {
msd.setCharAt(5, 'i');
}
// x
if (kr.contains("<CAS<ILL>>")) {
msd.setCharAt(5, 'x');
}
// 2
if (kr.contains("<CAS<INE>>")) {
msd.setCharAt(5, '2');
}
// e
if (kr.contains("<CAS<ELA>>")) {
msd.setCharAt(5, 'e');
}
// t
if (kr.contains("<CAS<ALL>>")) {
msd.setCharAt(5, 't');
}
// 3
if (kr.contains("<CAS<ADE>>")) {
msd.setCharAt(5, '3');
}
// b
if (kr.contains("<CAS<ABL>>")) {
msd.setCharAt(5, 'b');
}
// s
if (kr.contains("<CAS<SBL>>")) {
msd.setCharAt(5, 's');
}
// p
if (kr.contains("<CAS<SUE>>")) {
msd.setCharAt(5, 'p');
}
// h
if (kr.contains("<CAS<DEL>>")) {
msd.setCharAt(5, 'h');
}
// 9
if (kr.contains("<CAS<TER>>")) {
msd.setCharAt(5, '9');
}
// w
if (kr.contains("[MANNER]")) {
msd.setCharAt(5, 'w');
}
// f
if (kr.contains("<CAS<FOR>>")) {
msd.setCharAt(5, 'f');
}
// m
if (kr.contains("<CAS<TEM>>")) {
msd.setCharAt(5, 'm');
}
// c
if (kr.contains("<CAS<CAU>>")) {
msd.setCharAt(5, 'c');
}
// q
if (kr.contains("[COM]")) {
msd.setCharAt(5, 'q');
}
// y
if (kr.contains("<CAS<TRA>>")) {
msd.setCharAt(5, 'y');
}
// u
if (kr.contains("[PERIOD1]")) {
msd.setCharAt(5, 'u');
}
return cleanMsd(msd.toString());
}
/*
* nevmas minden POSTP-t tartalmazo NOUN
*/
if (kr.contains("POSTP")) {
msd = new StringBuffer("Pp3-sn");
if (lemma.equals("én")) {
msd.setCharAt(2, '1');
}
if (lemma.equals("te")) {
msd.setCharAt(2, '2');
}
if (lemma.equals("ő")) {
msd.setCharAt(2, '3');
}
if (lemma.equals("mi")) {
msd.setCharAt(2, '1');
msd.setCharAt(4, 'p');
}
if (lemma.equals("ti")) {
msd.setCharAt(2, '2');
msd.setCharAt(4, 'p');
}
if (lemma.equals("ők")) {
msd.setCharAt(2, '3');
msd.setCharAt(4, 'p');
}
return cleanMsd(msd.toString());
}
/*
* egyes szam/tobbes szam NOUN<PLUR> NUON<PLUR<FAM>>
*/
if (kr.contains("NOUN<PLUR")) {
msd.setCharAt(3, 'p');
}
/*
* eset
*/
// n nincs jelolve alapeset
// a
if (kr.contains("<CAS<ACC>>")) {
msd.setCharAt(4, 'a');
}
// g nincs jelolve
if (kr.contains("<CAS<GEN>>")) {
msd.setCharAt(4, 'g');
}
// d
if (kr.contains("<CAS<DAT>>")) {
msd.setCharAt(4, 'd');
}
// i
if (kr.contains("<CAS<INS>>")) {
msd.setCharAt(4, 'i');
}
// x
if (kr.contains("<CAS<ILL>>")) {
msd.setCharAt(4, 'x');
}
// 2
if (kr.contains("<CAS<INE>>")) {
msd.setCharAt(4, '2');
}
// e
if (kr.contains("<CAS<ELA>>")) {
msd.setCharAt(4, 'e');
}
// t
if (kr.contains("<CAS<ALL>>")) {
msd.setCharAt(4, 't');
}
// 3
if (kr.contains("<CAS<ADE>>")) {
msd.setCharAt(4, '3');
}
// b
if (kr.contains("<CAS<ABL>>")) {
msd.setCharAt(4, 'b');
}
// s
if (kr.contains("<CAS<SBL>>")) {
msd.setCharAt(4, 's');
}
// p
if (kr.contains("<CAS<SUE>>")) {
msd.setCharAt(4, 'p');
}
// h
if (kr.contains("<CAS<DEL>>")) {
msd.setCharAt(4, 'h');
}
// 9
if (kr.contains("<CAS<TER>>")) {
msd.setCharAt(4, '9');
}
// w
if (kr.contains("<CAS<ESS>>")) {
msd.setCharAt(4, 'w');
}
// f
if (kr.contains("<CAS<FOR>>")) {
msd.setCharAt(4, 'f');
}
// m
if (kr.contains("<CAS<TEM>>")) {
msd.setCharAt(4, 'm');
}
// c
if (kr.contains("<CAS<CAU>>")) {
msd.setCharAt(4, 'c');
}
// q
if (kr.contains("[COM]")) {
msd.setCharAt(4, 'q');
}
// y
if (kr.contains("<CAS<TRA>>")) {
msd.setCharAt(4, 'y');
}
// u
if (kr.contains("[PERIOD1]")) {
msd.setCharAt(4, 'u');
}
/*
* birtokos szama/szemelye
*/
if (kr.contains("<POSS>")) {
msd.setCharAt(8, 's');
msd.setCharAt(9, '3');
}
if (kr.contains("<POSS<1>>")) {
msd.setCharAt(8, 's');
msd.setCharAt(9, '1');
}
if (kr.contains("<POSS<2>>")) {
msd.setCharAt(8, 's');
msd.setCharAt(9, '2');
}
if (kr.contains("<POSS<1><PLUR>>")) {
msd.setCharAt(8, 'p');
msd.setCharAt(9, '1');
}
if (kr.contains("<POSS<2><PLUR>>")) {
msd.setCharAt(8, 'p');
msd.setCharAt(9, '2');
}
if (kr.contains("<POSS<PLUR>>")) {
msd.setCharAt(8, 'p');
msd.setCharAt(9, '3');
}
/*
* birtok(olt) szama
*/
if (kr.contains("<ANP>")) {
msd.setCharAt(10, 's');
}
if (kr.contains("<ANP<PLUR>>")) {
msd.setCharAt(10, 'p');
}
return cleanMsd(msd.toString());
}
public String convertAdjective(String kr) {
StringBuffer msd = null;
msd = new StringBuffer("Afp-sn-------");
/*
* tipus (melleknev vagy melleknevi igenev)
*/
// f (melleknev) nincs jelolve, alapeset
// p (folyamatos melleknevi igenev)
if (kr.contains("[IMPERF_PART")) {
msd.setCharAt(1, 'p');
}
// s (befejezett melleknevi igenev)
if (kr.contains("[PERF_PART")) {
msd.setCharAt(1, 's');
}
// u (beallo melleknevi igenev)
if (kr.contains("[FUT_PART")) {
msd.setCharAt(1, 'u');
}
/*
* fok
*/
// p nincs jelolve alapeset
// c
if (kr.contains("[COMPAR")) {
msd.setCharAt(2, 'c');
}
// s
if (kr.contains("[SUPERLAT")) {
msd.setCharAt(2, 's');
}
// e
if (kr.contains("[SUPERSUPERLAT")) {
msd.setCharAt(2, 'e');
}
/*
* szam
*/
// s nincs jelolve alapeset
// p
if (kr.contains("ADJ<PLUR>")) {
msd.setCharAt(4, 'p');
}
/*
* eset
*/
// n nincs jelolve alapeset
// a
if (kr.contains("<CAS<ACC>>")) {
msd.setCharAt(5, 'a');
}
// g nincs jelolve
if (kr.contains("<CAS<GEN>>")) {
msd.setCharAt(5, 'g');
}
// d
if (kr.contains("<CAS<DAT>>")) {
msd.setCharAt(5, 'd');
}
// i
if (kr.contains("<CAS<INS>>")) {
msd.setCharAt(5, 'i');
}
// x
if (kr.contains("<CAS<ILL>>")) {
msd.setCharAt(5, 'x');
}
// 2
if (kr.contains("<CAS<INE>>")) {
msd.setCharAt(5, '2');
}
// e
if (kr.contains("<CAS<ELA>>")) {
msd.setCharAt(5, 'e');
}
// t
if (kr.contains("<CAS<ALL>>")) {
msd.setCharAt(5, 't');
}
// 3
if (kr.contains("<CAS<ADE>>")) {
msd.setCharAt(5, '3');
}
// b
if (kr.contains("<CAS<ABL>>")) {
msd.setCharAt(5, 'b');
}
// s
if (kr.contains("<CAS<SBL>>")) {
msd.setCharAt(5, 's');
}
// p
if (kr.contains("<CAS<SUE>>")) {
msd.setCharAt(5, 'p');
}
// h
if (kr.contains("<CAS<DEL>>")) {
msd.setCharAt(5, 'h');
}
// 9
if (kr.contains("<CAS<TER>>")) {
msd.setCharAt(5, '9');
}
// w
if (kr.contains("[MANNER]")) {
msd.setCharAt(5, 'w');
}
// f
if (kr.contains("<CAS<FOR>>")) {
msd.setCharAt(5, 'f');
}
// m
if (kr.contains("<CAS<TEM>>")) {
msd.setCharAt(5, 'm');
}
// c
if (kr.contains("<CAS<CAU>>")) {
msd.setCharAt(5, 'c');
}
// q
if (kr.contains("[COM]")) {
msd.setCharAt(5, 'q');
}
// y
if (kr.contains("<CAS<TRA>>")) {
msd.setCharAt(5, 'y');
}
// u
if (kr.contains("[PERIOD1]")) {
msd.setCharAt(5, 'u');
}
/*
* birtokos szama/szemelye
*/
if (kr.contains("<POSS>")) {
msd.setCharAt(10, 's');
msd.setCharAt(11, '3');
}
if (kr.contains("<POSS<1>>")) {
msd.setCharAt(10, 's');
msd.setCharAt(11, '1');
}
if (kr.contains("<POSS<2>>")) {
msd.setCharAt(10, 's');
msd.setCharAt(11, '2');
}
if (kr.contains("<POSS<1><PLUR>>")) {
msd.setCharAt(10, 'p');
msd.setCharAt(11, '1');
}
if (kr.contains("<POSS<2><PLUR>>")) {
msd.setCharAt(10, 'p');
msd.setCharAt(11, '2');
}
if (kr.contains("<POSS<PLUR>>")) {
msd.setCharAt(10, 'p');
msd.setCharAt(11, '3');
}
/*
* birtok(olt) szama
*/
if (kr.contains("<ANP>")) {
msd.setCharAt(12, 's');
}
if (kr.contains("<ANP<PLUR>>")) {
msd.setCharAt(12, 'p');
}
return cleanMsd(msd.toString());
}
public String convertVerb(String kr) {
StringBuffer msd = null;
msd = new StringBuffer("Vmip3s---n-");
/*
* magyarlanc 2.5-től
*/
// hato
if (kr.contains("<MODAL>") && !kr.contains("[FREQ]") && !kr.contains("[CAUS]")) {
msd.setCharAt(1, 'o');
}
// gyakorito
if (!kr.contains("<MODAL>") && kr.contains("[FREQ]") && !kr.contains("[CAUS]")) {
msd.setCharAt(1, 'f');
}
// muvelteto
if (!kr.contains("<MODAL>") && !kr.contains("[FREQ]") && kr.contains("[CAUS]")) {
msd.setCharAt(1, 's');
}
// gyakorito + hato
if (kr.contains("<MODAL>") && kr.contains("[FREQ]") && !kr.contains("[CAUS]")) {
msd.setCharAt(1, '1');
}
// muvelteto + hato
if (kr.contains("<MODAL>") && !kr.contains("[FREQ]") && kr.contains("[CAUS]")) {
msd.setCharAt(1, '2');
}
// muvelteto + hato
if (!kr.contains("<MODAL>") && kr.contains("[FREQ]") && kr.contains("[CAUS]")) {
msd.setCharAt(1, '3');
}
// muvelteto + gyakorito + hato
if (kr.contains("<MODAL>") && kr.contains("[FREQ]") && kr.contains("[CAUS]")) {
msd.setCharAt(1, '4');
}
if (kr.contains("<COND>")) {
msd.setCharAt(2, 'c');
}
if (kr.contains("<INF>")) {
msd.setCharAt(2, 'n');
msd.setCharAt(9, '-');
if (!kr.contains("<PERS")) {
msd.setCharAt(3, '-');
msd.setCharAt(4, '-');
msd.setCharAt(5, '-');
}
}
if (kr.contains("<SUBJUNC-IMP>")) {
msd.setCharAt(2, 'm');
}
if (kr.contains("<PAST>")) {
msd.setCharAt(3, 's');
}
if (kr.contains("<PERS<1>>")) {
msd.setCharAt(4, '1');
}
if (kr.contains("<PERS<2>>")) {
msd.setCharAt(4, '2');
}
if (kr.contains("<PLUR>")) {
msd.setCharAt(5, 'p');
}
if (kr.contains("<DEF>")) {
msd.setCharAt(9, 'y');
}
if (kr.contains("<PERS<1<OBJ<2>>>>")) {
msd.setCharAt(4, '1');
msd.setCharAt(9, '2');
}
return cleanMsd(msd.toString());
}
public String convertNumber(String kr) {
StringBuffer msd = null;
msd = new StringBuffer("Mc-snl-------");
// c alapeset, nincs jelolve
// o
if (kr.contains("[ORD")) {
msd.setCharAt(1, 'o');
}
// f
if (kr.contains("[FRACT")) {
msd.setCharAt(1, 'f');
}
// l nincs a magyarban
// d nincs KRben
// s alapeset, nincs jelolve
// p
if (kr.contains("NUM<PLUR>")) {
msd.setCharAt(3, 'p');
}
/*
* eset
*/
// n nincs jelolve alapeset
// a
if (kr.contains("<CAS<ACC>>")) {
msd.setCharAt(4, 'a');
}
// g nincs jelolve
if (kr.contains("<CAS<GEN>>")) {
msd.setCharAt(4, 'g');
}
// d
if (kr.contains("<CAS<DAT>>")) {
msd.setCharAt(4, 'd');
}
// i
if (kr.contains("<CAS<INS>>")) {
msd.setCharAt(4, 'i');
}
// x
if (kr.contains("<CAS<ILL>>")) {
msd.setCharAt(4, 'x');
}
// 2
if (kr.contains("<CAS<INE>>")) {
msd.setCharAt(4, '2');
}
// e
if (kr.contains("<CAS<ELA>>")) {
msd.setCharAt(4, 'e');
}
// t
if (kr.contains("<CAS<ALL>>")) {
msd.setCharAt(4, 't');
}
// 3
if (kr.contains("<CAS<ADE>>")) {
msd.setCharAt(4, '3');
}
// b
if (kr.contains("<CAS<ABL>>")) {
msd.setCharAt(4, 'b');
}
// s
if (kr.contains("<CAS<SBL>>")) {
msd.setCharAt(4, 's');
}
// p
if (kr.contains("<CAS<SUE>>")) {
msd.setCharAt(4, 'p');
}
// h
if (kr.contains("<CAS<DEL>>")) {
msd.setCharAt(4, 'h');
}
// 9
if (kr.contains("<CAS<TER>>")) {
msd.setCharAt(4, '9');
}
// w
if (kr.contains("[MANNER]")) {
msd.setCharAt(4, 'w');
}
// f
if (kr.contains("<CAS<FOR>>")) {
msd.setCharAt(4, 'f');
}
// m
if (kr.contains("<CAS<TEM>>")) {
msd.setCharAt(4, 'm');
}
// c
if (kr.contains("<CAS<CAU>>")) {
msd.setCharAt(4, 'c');
}
// q
if (kr.contains("[COM]")) {
msd.setCharAt(4, 'q');
}
// y
if (kr.contains("<CAS<TRA>>")) {
msd.setCharAt(4, 'y');
}
// u
if (kr.contains("[PERIOD1]")) {
msd.setCharAt(4, 'u');
}
// 6
if (kr.contains("[MULTIPL-ITER]")) {
msd.setCharAt(4, '6');
}
/*
* birtokos szama/szemelye
*/
if (kr.contains("<POSS>")) {
msd.setCharAt(10, 's');
msd.setCharAt(11, '3');
}
if (kr.contains("<POSS<1>>")) {
msd.setCharAt(10, 's');
msd.setCharAt(11, '1');
}
if (kr.contains("<POSS<2>>")) {
msd.setCharAt(10, 's');
msd.setCharAt(11, '2');
}
if (kr.contains("<POSS<1><PLUR>>")) {
msd.setCharAt(10, 'p');
msd.setCharAt(11, '1');
}
if (kr.contains("<POSS<2><PLUR>>")) {
msd.setCharAt(10, 'p');
msd.setCharAt(11, '2');
}
if (kr.contains("<POSS<PLUR>>")) {
msd.setCharAt(10, 'p');
msd.setCharAt(11, '3');
}
/*
* birtok(olt) szama
*/
if (kr.contains("<ANP>")) {
msd.setCharAt(12, 's');
}
if (kr.contains("<ANP<PLUR>>")) {
msd.setCharAt(12, 'p');
}
return cleanMsd(msd.toString());
}
public String convertAdverb(String kr) {
StringBuffer msd = null;
msd = new StringBuffer("Rx----");
// c
if (kr.contains("[COMPAR]")) {
msd.setCharAt(2, 'c');
}
// s
if (kr.contains("[SUPERLAT]")) {
msd.setCharAt(2, 's');
}
// e
if (kr.contains("[SUPERSUPERLAT]")) {
msd.setCharAt(2, 'e');
}
return cleanMsd(msd.toString());
}
public Set<MorAna> getMSD(String krAnalysis) {
Set<MorAna> analisis = null;
String lemma = null;
String stem = null;
String krCode = null;
String krRoot = null;
String msd = null;
analisis = new TreeSet<MorAna>();
krRoot = KRUtils.getRoot(krAnalysis);
lemma = krRoot.substring(1, krRoot.indexOf("/"));
// $forog(-.)/VERB[CAUS](at)/VERB[FREQ](gat)/VERB<PAST><PERS<1>>
if (krAnalysis.contains("(") && krAnalysis.indexOf("(") < krAnalysis.indexOf("/")) {
stem = krAnalysis.substring(1, krAnalysis.indexOf("("));
} else if (krAnalysis.contains("+")) {
stem = lemma;
} else {
stem = krAnalysis.substring(1, krAnalysis.indexOf("/"));
}
krCode = krRoot.substring(krRoot.indexOf("/") + 1);
if (!krAnalysis.contains("[FREQ]") && krAnalysis.contains("[CAUS]") & krAnalysis.contains("<MODAL>")) {
if (this.getCache().containsKey(krCode)) {
for (String m : this.getCache().get(krCode)) {
analisis.add(new MorAna(lemma, m));
}
return analisis;
}
}
if (krCode.startsWith("NOUN")) {
msd = convertNoun(lemma, krCode);
// pronoun
if (msd.startsWith("P")) {
lemma = getPostPLemma(krAnalysis);
// dative
if (msd.charAt(5) == 'd') {
analisis.add(new MorAna(lemma, msd.replace('d', 'g')));
}
}
analisis.add(new MorAna(lemma, msd));
// dative
if (msd.charAt(4) == 'd') {
analisis.add(new MorAna(lemma, msd.replace('d', 'g')));
}
}
if (krCode.startsWith("ADJ")) {
/*
* magyarlanc 2.5-től
*/
// // melleknevi igenev
// if (isParticiple(krAnalysis)) {
// msd = convertAdjective(krAnalysis);
// analisis.add(new Stem(lemma, msd));
// } else {
// msd = convertAdjective(krCode);
// analisis.add(new Stem(lemma, msd));
// }
msd = convertAdjective(krCode);
analisis.add(new MorAna(lemma, msd));
// dative
if (msd.charAt(5) == 'd') {
analisis.add(new MorAna(lemma, msd.replace('d', 'g')));
}
}
if (krCode.contains("VERB[PERF_PART]") || krCode.contains("VERB[PART]")) {
analisis.add(new MorAna(lemma, "Rv"));
}
if (krCode.startsWith("VERB")) {
if (krAnalysis.contains("[FREQ]") || krAnalysis.contains("[CAUS]") || krAnalysis.contains("<MODAL>")) {
analisis.add(new MorAna(stem, convertVerb(krAnalysis)));
} else {
analisis.add(new MorAna(lemma, convertVerb(krCode)));
}
}
if (krCode.startsWith("NUM")) {
msd = convertNumber(krCode);
analisis.add(new MorAna(lemma, msd));
// dative
if (msd.charAt(4) == 'd') {
analisis.add(new MorAna(lemma, msd.replace('d', 'g')));
}
}
if (krCode.startsWith("ART")) {
/*
* definite/indefinte
*/
analisis.add(new MorAna(lemma, "T"));
}
if (krCode.startsWith("ADV")) {
analisis.add(new MorAna(lemma, convertAdverb(krCode)));
}
if (krCode.startsWith("POSTP")) {
analisis.add(new MorAna(lemma, "St"));
}
if (krCode.startsWith("CONJ")) {
analisis.add(new MorAna(lemma, "Ccsp"));
}
if (krCode.startsWith("UTT-INT")) {
analisis.add(new MorAna(lemma, "I"));
}
if (krCode.startsWith("PREV")) {
analisis.add(new MorAna(lemma, "Rp"));
}
if (krCode.startsWith("DET")) {
analisis.add(new MorAna(lemma, "Pd3-sn"));
}
if (krCode.startsWith("ONO")) {
analisis.add(new MorAna(lemma, "X"));
}
if (krCode.startsWith("E")) {
analisis.add(new MorAna(lemma, "Rq-y"));
}
if (krCode.startsWith("ABBR")) {
analisis.add(new MorAna(lemma, "Y"));
}
if (krCode.startsWith("TYPO")) {
analisis.add(new MorAna(lemma, "Z"));
}
if (analisis.isEmpty()) {
analisis.add(new MorAna(lemma, "X"));
}
// cache
if (!this.getCache().containsKey(krCode)) {
this.getCache().put(krCode, new TreeSet<String>());
}
for (MorAna m : analisis) {
this.getCache().get(krCode).add(m.getMsd());
}
return analisis;
}
public String cleanMsd(String msd) {
StringBuffer cleaned = null;
cleaned = new StringBuffer(msd.trim());
int index = cleaned.length() - 1;
while (cleaned.charAt(index) == '-') {
cleaned.deleteCharAt(index);
--index;
}
return cleaned.toString();
}
public void setCache(Map<String, Set<String>> cache) {
this.cache = cache;
}
public Map<String, Set<String>> getCache() {
return cache;
}
}