Attenzione !! Aiuterà molto a conoscere polacco o qualsiasi altro linguaggio naturale con una forte flessione, preferibilmente con un sistema di casi (come il tedesco per esempio), per rispondere a questa domanda. In particolare, il sistema di declinazione polacco è molto simile ai sistemi di altre lingue slave, come: russo, ceco, serbo eccUn algoritmo per la declinazione di nomi di lingue polacche/slave
Date un'occhiata a questo polacca, non finito, declinator: declinators.com sto progettando di estenderlo ad altri lingue, vale a dire il russo e il latino, ma per ora sto lottando con il polacco.
Oltre ad avere un ampio database di declinazioni per centinaia di nomi, sostengo nomi declinanti che non esistono. La soluzione migliore che ho trovato finora è semplicemente controllare le desinenze dei nomi in modo che possano essere declinati di conseguenza.
Nel mio codice si tratta di questo metodo calculateDeclination
. Lo chiamo se il nome non è nel database. Le interiora del metodo simile a questa:
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);
ecc Questi sono solo i primi tre delle decine di else if
clausole questo metodo ha.
Un codice di un declinator esemplare si presenta in questo modo:
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";
}
}
Così qui è la domanda, c'è qualche altro, l'algoritmo più elegante per declinare parole polacchi? Deve avere così tante altre clausole? Devo scrivere così tanti declinatori per ogni tipo di nome?
Questo problema mi ha mostrato quanto siano semplici e incredibilmente numerose le regole di declino polacchi. Ha reso il mio algoritmo noioso e monotono. Spero che uno di voi possa aiutarmi a renderlo interessante e conciso!
Acclamazioni
Il software basato su tabella funziona bene per questo genere di cose. – user3386109
Ne rilascerò uno per il russo a breve =) https://github.com/georgy7/russian_nouns/blob/gh-pages/js/RussianNouns.coffee È quasi completo per la forma singolare di una parola. –