Autor Zpráva
BuGeR
Profil
Zdravím.
Přemýšlel jsem, a mám otázku.. Lze nějak napsat algoritmus, který by "udělal" z uživatelského jména pátý pád?
Např. pokud mé jméno je Jirka, tak by se zobrazil text "Jirko" - pátý pád :-)
Vím, že by bylo asi jednodušší, umožnit uživateli, aby si své oslovení napsal sám, ale jen tak nad tím přemýšlím, a chtěl bych něco takového napsat.
Prosím, mohl by mě někdo nakopnout, jak něco takového udělat? Nevíte o nějakém logickém "systému", ze kterého lze poznat pátý pád slova?
Děkuji :-)
Beavis
Profil
BuGeR:
Nenapadá mne nic jiného, než seznam jmen a jejich tvarů v pátém pádě, a pak to jen přiřazovat. Určitě existuje i jiný způsob, ale nemám tušení na jakém principu by to mohlo fungovat, vzhledem k rozmanitosti našeho jazyka..
DoubleThink
Profil *
Bude to trochu voser, ale neměl by být problém to pro běžná jména naprogramovat – viz ÚJČ: Internetová jazyková příručka.
Teoreticky by skript už mohl někde existovat, pochybuji, že bys byl prvním, kdo chce oslovovat někoho jménem z databáze.
BuGeR
Profil
Beavis:
To právě nechci, připadá mi to takové, "ne-elegantní" :-P

DoubleThink:
Děkuji, zkusím si něco nastudovat :-)
Str4wberry
Profil
Můžeš si napsat skript, který se bude řídit posledním/posledními znaky jména a dle toho příslušně jméno změnit.

$jmeno = "Jirka";
$posledniZnak = mb_substr($jmeno, -1, 1);
$bezPosledniho = mb_substr($jmeno, 0, -1);
if ($posledniZnak == "a") {
  $jmeno = $bezPosledniho . "o";
}
echo $jmeno;

Před cca 4 lety jsem hotový skript nenašel. Ale výše uvedeným způsobem se dalo docílit poměrně uspokojivého převádění jmen do 5. pádu.
BuGeR
Profil
Str4wberry:
Děkuji, ještě mám dotaz. Bude tento způsob fungovat u všech jmén? Nebo existujou i nějaká specialní jména, které nelze takto obecně určit?
KGW
Profil
Takový script jsem si kdysi vytvořil, funguje pro většinu mužských i ženských jmen, stačí aplikovat pravidla a přidat pár výjimek.
Someone
Profil
Beavis:
enapadá mne nic jiného, než seznam jmen a jejich tvarů v pátém pádě
Podle mě to nemusí být přímo celý seznam. Např.:
Lukáš
Tomáš
Matouš
Bohuš
atd...

Pro většinu mužských jmen, které končí na Š se pátý pád tvoří připojením písmena I. Existuje více takovýchto skupin takže by si pomocí Str4wberryho podmínky mohl zjistit do jaké skupiny jméno patří a podle toho by jsi mohl skloňovat.
BuGeR
Profil
Dobře, pokusím se něco takového napsat. Děkuji všem :-)
jenikkozak
Profil
BuGeR:
Cituji ze svého PSPadu (není to ale konečná verze textu):
„Budete-li chtít vytvořit skript, který bude skloňovat jména do pátého pádu (oslovení), jistě si všimnete, že po určitých hláskách na konci prvního pádu se při tvoření pátého pádu přidá určitá koncovka. Např. Aneta > Aneto, Jana > Jano, Pavla > Pavlo, Ota > Oto; nebo Miloš > Miloši, Aleš > Aleši, Lukáš > Lukáši, Mikuláš > Mikuláši. Je to jednoduché. U jmen končících na –š si můžeme být jisti, že se jedná o jména mužská. Skloňují se tedy podle českého vzoru muž. U jmen končících na –a je situace také jednoduchá. Mužská se skloňují podle vzoru předseda, ženská podle vzoru žena.
[...]
Můžeme si všimnout, že kromě 3. a 6. pádu mají tyto vzory stejné koncovky. Při vytváření tvaru pátého pádu proto nemusíme znát pohlaví nositele jména.
Povzbuzeni snadností předchozích písmen vybereme si například jména končící na –r. Mojmír > Mojmíre, Viktor > Viktore, Igor > Igore. Vzor pán. To však není celé. U jmen, která jsou zakončená souhláskou a –r, dochází k alternaci r>ř: Petr > Petře (ne Petre), Alexandr > Alexandře, Silvestr > Silvestře, Valtr > Valtře. To se dá algoritmem také jednoduše vychytat. Je potřeba však zajistit, aby ženská jména, zakončena na –r skloňována nebyla. Např. Ester by zřejmě nebyla potěšena, kdybychom ji oslovovali tvarem Estere. A co Dagmar? A Jenifer? A Hagar? A Demeter? A Pilar? A co Hilar? Hilar je zde chyták, jedná se o mužské jméno, pátý pád je tedy Hilare. Ostatní jména však musíme chápat jako nesklonná. A ta už algoritmem podle posledních hlásek nevychytáme.“
Jestli si mohu dovolit malou reklamu, připravuji službu, která dokáže jména ohnout do všech 7 pádů, tvořit přivlastňovací přídavná jména a rozpoznávat pohlaví nositele daného jména.
Davex
Profil
BuGeR:
Nebo existujou i nějaká specialní jména, které nelze takto obecně určit?
Ano. Zeus, Jupiter apod.
Aleš Janda
Profil
Takový skript jsem dělal (není open). Například jména končící na -l nebo -e- na předposlední pozici je peklo. Ohledně nesklonných ženských jmen; pomůže, je-li k dispozici pohlaví člověka, seznam výjimek nebo alespoň pár nejčastějších případů. Ale dá se to, pak jsou problémem pouze cizí jména, ty podle mě zcela vyřešit nejdou.

Ohledně sklonování jména Zeus nebo Jupiter - tam problém žádný není, pokud neskloňujete vyloženě tu bájnou postavu, ale jen nějakého člověka s tím jménem. Ty speciální případy platí pouze pro ty mýtické osoby, jinak pro to není důvod (kde je ta hranice, kde je jiné skloňování, a kde je klasické skloňování?). Kromě toho, jazyk se vyvíjí a má tendenci se zpravidelňovat. Řekl bych, že potřeba skloňovat nebo vůbec psát o Diovi pomalu opadává, takže lidé to pravidlo zapomenou. Můžou tedy boha Zeuse skloňovat stejně pravidelně jako každé jiné jméno; otázka toho, kdy toto skloňování vypadne z pravidel, je závislá pouze na momentální konzervativnosti lidí z ÚJČ. Těžko bude takto i za sto let kodifikováno něco, co se vůbec nepoužívá.

Třeba skloňovat Jupitera jako Jova bych považoval za zastaralé, ne-li rovnou chybné už dneska.
jenikkozak
Profil
Aleš Janda:
Ohledně sklonování jména Zeus nebo Jupiter - tam problém žádný není
Tak tak. Příjmení Jupiter se u nás snad ani neobjevuje. Jako křestní jméno také ne. A hádal bych, že manželka nositele jména Zeus se nebude jmenovat Diová. Jako křestní jméno se u nás nepoužívá. (Nevím jak ve světě.) Proto bych neviděl důvod, proč by se těmto dvěma jménům měla pravidla přizpůsobovat.
Vžijte se prosím do role učitele, který do cvičení se skloňováním jmen zahrne chuťovky jako Zeus či Tolstoj. :-D V šesté třídě jsem chyběl, když se braly tyhle výjimky. Po diktátu jsem se náramně divil, proč se nemůže používat tvar „Tolstoje“, ale „Tolstého“, když se u pana Blacka nepoužívá tvar „Blackového“. Učitelka mi nebyla schopna vysvětlit, že tahle výjimka se týká jen slovanských jazyků, protože to nevěděla. Hlavně že věděla, že na jméně Tolstoj může děcka nachytat...

Třeba skloňovat Jupitera jako Jova bych považoval za zastaralé, ne-li rovnou chybné už dneska.
Ústav pro jazyk český zřejmě má podobný názor, ovšem za chybné to nepovažuje. (Což by byla z mého pohledu blbost.)
m93a
Profil
Sice tahle otázka není už úplně aktuální, ale tak nějak jsem cítil potřebu vložit svůj kód, který si vede docela obstojně :)
Je to sice JavaScript, ale snad vám nedělá potíže portovat to do jiného jazyka.
Problém mu dělají ženská jména končící na "r" (Dagmar, Ester), jelikož je nepozná od mužských (Libor, Lumír).

function jeSouhlaska(char){
    return "aáeéěiíoóuúůyý".indexOf(char) === -1;
}

function patyPad(jmeno){
    var delka = jmeno.length;

    // Výjimka! Změna "ek" na "ku"
    if (jmeno.substr(-2, 2) === "ek"){
        return jmeno.slice(0, -2) + "ku";
    }
    
    //Výjimka! Změna "el" na "le" nebo "eli"
    if(jmeno.substr(-2,2) === "el"){
        
        //Zkontroluj, jestli je před "el" souhláska nebo samohláska
        if(jeSouhlaska( jmeno.substr(-3,1) )){
            //souhláska
            
            //Výjimka z výjimky! Věnováno všem Marcelům!
            if(jeSouhlaska( jmeno.substr(-4,1) )){
                return jmeno + "i";
            }else{
                return jmeno.slice(0, -2) + "le";
            }
        }else{
            //samohláska
            return jmeno + "i";
        }
    }
    
    //Výjimka (skara, jak já to slovo nesnáším)! Změna "r" po souhlásce na "ře"
    if(jmeno[delka - 1] === "r"){
        if(jeSouhlaska( jmeno.substr(-2,1) )){
            return jmeno.slice(0,-1) + "ře";
        }
    }

    //Pokud nepodléhá výjimce, pokračuj:
    switch (jmeno[delka - 1]) { //rozhoduj podle posl. písmena
        case "á":
        case "e":
        case "é":
        case "i":
        case "í":
        case "o":
        case "y":
            //tohle jméno se neskloňuje
            return jmeno;

        case "g":
        case "h":
        case "k":
        case "q":
            //k tomuhle jménu se přidává "u"
            return jmeno + "u";

        case "č":
        case "j":
        case "ř":
        case "s":
        case "š":
        case "x":
        case "z":
            //k tomuhle jménu se přidává "i"
            return jmeno + "i";

        case "a":
        case "u":
            //tady se posl. písmeno mění na "o"
            return jmeno.slice(0, -1) + "o";

        case "c":
            //změna "c" na "če"
            return jmeno.slice(0, -1) + "če";

        case "ď":
            //změna "ď" na "di"
            return jmeno.slice(0, -1) + "di";

        case "ň":
            //změna "ň" na "ni"
            return jmeno.slice(0, -1) + "ni";

        case "ť":
            //změna "ť" na "ti"
            return jmeno.slice(0, -1) + "ti";

        default:
            //všechno ostatní končí na "e"
            return jmeno + "e";

    }
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: