Generátor jmen

Možná máte stejný problém jako já a když instalujete nový počítač, ze všeho nejdéle vám trvá vymyslet pro něj jméno. Pokud sdílíte tuto potíž, možná vám pomůže udělátko, které jsem si napsala: generátor náhodných, přesto však celkem přirozeně vypadajících jmen. Stačí jej nakrmit informacemi o nějakém konkrétním jazyce (soubory s několika jazyky jsou přiloženy), a potom už se z něj vesele posypou nesmyslná slova, onomu jazyku se nápadně podobající. No, má to jeden háček - je to obluda napsaná v Haskellu a dostanete jenom zdrojáky. Ale nebojte, s pravděpodobností hraničící s jistotou to půjde zkompilovat dokonce i na ošklivém systému z Redmondu :-)

Totiž to je takhle: když jsem se onehdy prohrabávala logy z webserveru, zjistila jsem, že překvapivé množství návštěvníků se sem progooglí hledajíce nějaký "generátor jmen," zřejmě v návaznosti na mé povídání o novém počítači a hlavně následnou diskusi. Inu, politovala jsem je, jelikož tu nic takového nenašli. A vlastně jsem měla pocit, že jim to možná trochu dlužím. A protože v pondělí jdu na zkoušku, kde bych měla předvést znalosti Haskellu, rozhodla jsem se zabít dvě mouchy jednou ranou a naučit se Haskell psaním generátoru.

O tom, jak obluda funguje, nejlépe hovoří zdrojáky, princip je ale následující: prostě si pro každý jazyk předpočítá, s jakou pravděpodobností by měla vygenerovat který znak, když ví, jak vypadaly dva znaky předchozí. Funguje to překvapivě pěkně, pokusy ukázaly, že když bude znát ne dva, ale tři znaky, výsledky už budou příliš podobné skutečným slovům z korpusu.

O tom, jak funguje Haskell někomu, kdo se donedávna potkával jen s poměrně céčkoidními jazyky, by se dalo vyprávět dlouze a poučně: na to, že mám jen rekurzi a krásné funkce pro práci se seznamy jsem si zvykla celkem rychle, už mám za sebou zápočťák z Prologu. Ovšem pochopit jako fungují monads a zvládnout tak vstup a výstup mi trvalo skoro tak dlouho, jako napsat všechno ostatní (a stejně mám pocit, že tomu pořád moc nerozumím) - přestože v tom ostatním jsem si třeba poprvé v životě vyzkoušela vkládání do AVL stromu.

Tak... teď si představte, že jste si přečetli tři až čtyři odstavce o tom, jak se v Haskellu příjemně píše... (jestli Vám to fakt nejde, tak je třeba někdy dopíšu :-)) a pokud ho ještě neznáte, běžte si ho vyzkoušet. A třeba mi poslat nějaký pěkný patch :-)

Ještě pár ukázek výstupu z generátoru v závislosti na tom, jakými jazyky byl nakrmen:

finština:
kunssa
adaran
sinoina
kaanaja
olimppia
pienty
taamaniin
kaikaasti
eissaan
aikiiken

latina: prahen srueres ciliquerenti amplebait quatquatum pratuoruet exstior duorunt inemper eregum

sanskrt: ruvaandha gunamamantishmana jamaatmitaseevaan vidakaava seetyaapajaas nershe asmaantaa karjunya praamanti shnairlayato

angličtina: itteem wittenteffeel shinthend thymble mongedne herestrarme thaver wasund aburnfrojesirt begivid

A kontroluje to podle Pepca (9. 2. 2007 - 0:02) Sbalit(3)
A kontroluje to podle nějakého slovníku, zda to slovo náhodou neexistuje, aby nedošlo k nenápadným (a později nepříjemným) kolizím? :D
To zrovna ne... anicka (9. 2. 2007 - 0:07) Sbalit(2)
a sem tam se skutecne do opravdoveho slova trefi, ale nemyslim, ze by to byl vaznejsi problem - bud si vygenerujes jine, a nebo Ti to bude jedno, protoze ho stejne neznas. No a jestli se nahodou strefis do finske nadavky, tak proste smula :-D
Kolize byly, jsou a budou Bluebear (14. 2. 2007 - 20:47) Sbalit(1)
Kolizím se člověk nevyhne, ani když vymýšlí jména ručně. To je prostě život. :-)

Osobně myslím, že pro každé slovo o pěti nebo méně písmenech by se našel jazyk, ve kterém to znamená něco nemravného nebo neslušného. Když ne na naší planetě, tak na nějaké jiné.
Výborně M4r3k (9. 2. 2007 - 0:35) Sbalit(1)
Skvělý počin, jenom teď budou mít lidi co jsou za instalaci počítačů placeni od hodiny méně peněz v případě nedostatku zakázek, protože se jim doba instalace jednoho desktopu zkrátí nejméně o půlhodinu. :-)) Jinak já právě z časových důvodů předávám hostname z pokolení na pokolení. :-)
Haskell je úžasná věc, thingwath (9. 2. 2007 - 11:23) Sbalit(2)
Haskell je úžasná věc, ale generátor který generuje jména která nemají význam mi přijde takový slabší :-/ Raději bych jména něco-znamenající...
Generator jmen se hodi Bluebear (14. 2. 2007 - 20:44) Sbalit(1)
Mýlíte se, takový generátor je velice užitečná pomůcka pro autory krásné literatury, zejména ve fantasy a sci-fi (protože tam se často vyskytují postavy ne-lidských ras, které musíte pojmenovat tak, aby to nevypadalo jako žádný existující jazyk, ale přitom se to nějakému blížilo).
Ta angličtina snad musí cartesienne (9. 2. 2007 - 11:40) Sbalit(2)
Ta angličtina snad musí vycházet ze staroangličtiny, protože té moderní se to vůbec nepodobá. :-)
Ani ne... anicka (9. 2. 2007 - 11:48) Sbalit(1)
jako korpus jsem pouzila preklad zivotopisu Terezky z Lisieux, ale anglictina vypadala normalne (tj., rozumela jsem tomu)
a to nám říkali... vogo (9. 2. 2007 - 12:46) Sbalit(3)
A to nám ve funcionálním programování říkali: "V haskellu jdou programovat úžasné věci, třeba... no teď si nevzpomenu". A ejhle ono přeci jen něco. BTW haskell mám celkem rád, třeba quickshort na dvou řádcích... má to něco do sebe, ale Céčko je Céčko ;).
quicksort anicka (9. 2. 2007 - 19:28) Sbalit(2)
na dvou radcich? To prece musi jit na jeden... aspon takhle:

q x = if x==[] then [] else q [l | l<-tail x, l<head x] ++ [head x] ++ q [r | r<-tail x, r>=head x]


A mozna nekdo umi i hezci...
na dva to bylo bez ifu: q [] vogo (10. 2. 2007 - 11:00) Sbalit(1)
na dva to bylo bez ifu:
q [] = []
q x = q [l | l<-tail x, l=head x]
cesky dump Albert (13. 2. 2007 - 9:34) Sbalit(4)
Tak jsem ze Stoparova pruvodce udelal cesky dump a vysledky jsou luxusni.
cestina:
knikoncnickem
jakaprozna
priprilli
zapsim
co
tohlahudo
pradehm
ta
bysletuden
budejaka
zvlastni... anicka (13. 2. 2007 - 19:46) Sbalit(3)
Jak se Ti povedla ta dvoupismenna slova? To jde jenom v pripade, ze jsou za nimi nejake mezery (pokud sis neohackoval zdrojak), takze hadam, ze korpus nebyl uplne korektni... je nekde k videni? :-)

Ja jsem si mezitim vyrobila jeste sindarstinu, quenyu a irstinu, to je krasa :-)
Nejsa programator & jsa obet Albert (19. 2. 2007 - 8:56) Sbalit(2)
Nejsa programator & jsa obet Billovy zhouby, nechal jsem si obludu od Meta zkompilovat. Jako korpus jsem vzal Stoparova pruvodce, vyhodil diakritiku, ponechal mezery, prevedl vsechna pismena na mala...
Pekne: mela jsem lehce anicka (19. 2. 2007 - 9:04) Sbalit(1)
Pekne: mela jsem lehce perverzni pocit, kdyz jsem poustela na Wine binarku sveho programu pro Windows :-)
Haskell maertien (14. 2. 2007 - 1:15) Sbalit(1)
Teda, musim uznat, haskel vypada velice uzasne :-) Chapu, ze se do nej nekdo snadno zamiluje :-)
Pekny! Johanka (14. 2. 2007 - 16:35) Sbalit(1)
Psat jazykovej model v haskelli ((C) Hric) by me fakt nenapadlo :) Nazev masiny jsme resili zrovna vcera, nakonec Mirek trapne naklonoval jiz dvojnasobne existujici bug (jeden bug je Pavluv notebook (resp. asi 8 Pavlovych notebooku :)), dalsi tri jsou Mirkovy notebooky (z toho jeden byvaly Pavluv, tak to vzniklo)), no a ted se tak jmenuje i Mirkuv server na seminar tcp/ip :) Navrhovala jsem piskoviste ci brouzdaliste, ale ze prej je to dlouhy a kdesi cosi :)