package hu.u_szeged.nlp.pos;
import hu.u_szeged.nlp.pos.guesser.HyphenicGuesser;
import hu.u_szeged.nlp.pos.guesser.NumberGuesser;
import java.util.HashSet;
import java.util.Set;
public class HunLemMor {
/**
* addott szó lehetséges morfológiai elemzéseinek megahatározása
*/
public static Set<MorAna> getMorphologicalAnalyses(String word) {
Set<MorAna> morAnas = new HashSet<MorAna>();
// irasjelek
if (Util.isPunctation(word)) {
// a legfontosabb irasjelek lemmaja maga az irasjel, POS kodja szinten
// maga az irasjel lesz
// . , ; : ! ? - —
if (MagyarlancResourceHolder.getPunctations().contains(word)) {
morAnas.add(new MorAna(word, word));
}
// egyeb irasjelek lemmaja maga az irasjel, POS kódja 'K' lesz
else {
morAnas.add(new MorAna(word, "K"));
}
return morAnas;
}
Set<MorAna> potentialResultSet = MagyarlancResourceHolder.getCorpus().get(word);
// ha benne van a corpus.lex-ben
if (potentialResultSet != null) {
return potentialResultSet;
}
potentialResultSet = MagyarlancResourceHolder.getCorpus().get(word.toLowerCase());
// ha benne van a corpus.lex-ben kisbetűvel
if (potentialResultSet != null) {
return potentialResultSet;
}
// szám
morAnas = NumberGuesser.guess(word);
if (morAnas.size() > 0) {
return morAnas;
}
// római szám
morAnas.addAll(NumberGuesser.guessRomanNumber(word));
// rfsa
for (String kr : MagyarlancResourceHolder.getRFSA().analyse(word)) {
// String copyOfKr = kr;
// if (standardized) {
// // igekotok levalasztasa
// kr = kr.substring(kr.indexOf("$"));
//
// if (kr.contains("(") && kr.indexOf("(") < kr.indexOf("/"))
// kr = kr.substring(kr.indexOf("$") + 1, kr.indexOf("("));
// else
// kr = kr.substring(kr.indexOf("$") + 1, kr.indexOf("/"));
// }
// System.err.println(copyOfKr + "\t" + kr);
morAnas.addAll(MagyarlancResourceHolder.getKRToMSD().getMSD(kr));
}
// (kötöjeles)összetett szó
if (morAnas.size() == 0) {
// kötöjeles
if (word.contains("-") && word.indexOf("-") > 1) {
for (String morphCode : HyphenicWord.analyseHyphenicCompoundWord(word)) {
morAnas.addAll(MagyarlancResourceHolder.getKRToMSD().getMSD(morphCode));
}
} else {
// összetett szó
for (String morphCode : CompoundWord.analyseCompoundWord(word.toLowerCase())) {
morAnas.addAll(MagyarlancResourceHolder.getKRToMSD().getMSD(morphCode));
}
}
}
// guess (Bush-nak, Bush-kormányhoz)
if (morAnas.size() == 0) {
int index = word.lastIndexOf("-") > 1 ? word.lastIndexOf("-") : 0;
if (index > 0) {
String root = null;
String suffix = null;
root = word.substring(0, index);
suffix = word.substring(index + 1);
morAnas.addAll(HyphenicGuesser.guess(root, suffix));
}
}
// népes szavak
if (morAnas.size() == 0) {
if (MagyarlancResourceHolder.getCorrDic().containsKey(word) && !word.equals(MagyarlancResourceHolder.getCorrDic().get(word))) {
morAnas.addAll(getMorphologicalAnalyses(MagyarlancResourceHolder.getCorrDic().get(word)));
}
else if (MagyarlancResourceHolder.getCorrDic().containsKey(word.toLowerCase())
&& !word.equals(MagyarlancResourceHolder.getCorrDic().get(word.toLowerCase()))) {
morAnas.addAll(getMorphologicalAnalyses(MagyarlancResourceHolder.getCorrDic().get(word.toLowerCase())));
}
// System.out.println(word);
return morAnas;
} else {
return morAnas;
}
}
}