Uwaga !! Pomoże to dużo poznać polski lub dowolny inny język naturalny z silnym zgięciem, najlepiej z systemem spraw (np. Niemiecki na przykład), aby odpowiedzieć na to pytanie. W szczególności, Polski System deklinacja jest bardzo podobny do systemów innych językach słowiańskich, takich jak: rosyjski, czeski, serbski itpAlgorytm deklinacji rzeczowników języka polskiego/słowiańskiego
Wystarczy popatrzeć na tym polskim, niedokończone, declinator: declinators.com Mam zamiar przedłużyć go do innych języki: rosyjski i łaciński, ale na razie walczę z polszczyzną.
Oprócz posiadania dużej bazy danych deklinacji dla setek rzeczowników wspieram odmawiające rzeczowniki, które nie istnieją. Najlepszym rozwiązaniem, na które wpadłem, jest po prostu sprawdzanie końcówek rzeczowników, aby można je było odpowiednio odrzucić.
W moim kodzie sprowadza się do tej metody calculateDeclination
. Nazywam to, jeśli rzeczownik nie znajduje się w bazie danych. Wnętrzności metody wyglądać następująco:
if (areLast2Letters(word, "il"))
declinator = new KamilDeclinator(word);
else if (areLast2Letters(word, "sk"))
declinator = new DyskDeclinator(word);
else if (isLastLetter(word, 'm'))
declinator = new RealizmDeclinator(word);
itd. Są to tylko trzy pierwsze z kilkudziesięciu else if
klauzul tej metody.
Kod przykładowego declinator wygląda następująco:
import static declining.utils.StringUtils.*;
public class RealizmDeclinator extends realizm_XuXowiX_XemXieXieDeclinator{
public RealizmDeclinator(String noun) {
super(noun);
}
@Override
protected String calculateStem() {
return word;
}
@Override
public String calculateLocative() {
return swap2ndFromEnd(stem, "ź") + "ie";
}
@Override
public String calculateVocative() {
return swap2ndFromEnd(stem, "ź") + "ie";
}
}
Więc tutaj jest pytanie, czy jest jakiś inny, bardziej elegancki algorytm dla upadających polskich słów? Czy musi zawierać tak wiele klauzul, jeśli nie? Czy muszę pisać tak wiele deklinatorów dla każdego rodzaju rzeczownika?
Ten problem pokazał mi, jak proste i niewiarygodnie liczne są polskie deklinacje. Dzięki temu mój algorytm był nudny i monotonne. Mam nadzieję, że jedno z was może mi pomóc uczynić go interesującym i zwięzłym!
Cheers
Oprogramowanie sterowane tabelą sprawdza się w tego typu sytuacjach. – user3386109
Niedługo wypuszczę jednego na rosyjski =) https://github.com/georgy7/russian_nouns/blob/gh-pages/js/RussianNouns.coffee Jest prawie kompletny dla pojedynczej formy słowa. –