Autor | Zpráva | ||
---|---|---|---|
BuGeR Profil |
#1 · Zasláno: 27. 11. 2011, 22:30:13 · Upravil/a: BuGeR
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 |
#2 · Zasláno: 27. 11. 2011, 22:45:08
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 * |
#3 · Zasláno: 27. 11. 2011, 22:47:27
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 |
#4 · Zasláno: 27. 11. 2011, 22:52:49
Beavis:
To právě nechci, připadá mi to takové, "ne-elegantní" :-P DoubleThink: Děkuji, zkusím si něco nastudovat :-) |
||
Str4wberry Profil |
#5 · Zasláno: 27. 11. 2011, 22:53:06
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 |
#6 · Zasláno: 27. 11. 2011, 22:54:59
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 |
#7 · Zasláno: 27. 11. 2011, 23:00:45
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 |
#8 · Zasláno: 27. 11. 2011, 23:02:50
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 |
#9 · Zasláno: 27. 11. 2011, 23:03:59
Dobře, pokusím se něco takového napsat. Děkuji všem :-)
|
||
jenikkozak Profil |
#10 · Zasláno: 27. 11. 2011, 23:04:49 · Upravil/a: jenikkozak
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 |
#11 · Zasláno: 27. 11. 2011, 23:08:49
BuGeR:
„Nebo existujou i nějaká specialní jména, které nelze takto obecně určit?“ Ano. Zeus, Jupiter apod. |
||
Aleš Janda Profil |
#12 · Zasláno: 28. 11. 2011, 00:49:07
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 |
#13 · Zasláno: 28. 11. 2011, 10:22:21
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.) |
||
Časová prodleva: 5 let
|
|||
m93a Profil |
#14 · Zasláno: 21. 8. 2016, 00:14:21
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"; } } |
||
Časová prodleva: 8 let
|
0