MorT 0.1 (c)2004 Štěpán Roh --------------------------- Tento archív obsahuje experimentální morfologický transfer. Spuštění -------- Požadavky: Perl 5.x nebo vyšší (testováno s v5.8.2) Testovací spuštění: ./mort.pl mort.rules < sentence.dat > output.dat - přeloží větu "Stará žena zalévala květiny v rohu své zahrady" do angličtiny Formát *.dat souborů popisujících větu -------------------------------------- Viz "Data (sentence) description language" z proGRAMu (http://ksvi.mff.cuni.cz/~holan/proGRAM.html). Jediné, co se nepoužívá a ani tam nesmí být (jinak dojde k chybě) jsou valenční rámce (atribut FRAMESET). Taktéž větvení již na úrovni slov (a ne až na úrovní atributů či hodnot atributů) zřejmě není v proGRAMu podporváno. Formát souborů s pravidly ------------------------- Soubor s pravidly má formu skriptu v Perlu: push_block push_block ... 1; Push block: push (@rules, { 'name' => '', 'match' => [ [ match_hash, match_hash, ... ], ... ], 'command' => sub { command_sub }, }); Match hash: { 'attr' => ', 'value' => '', 'regexp' => '', } Value a regexp se vzájemně vylučují. Match bez hashů představuje shodu právě jednoho libovolného slova. Každé pole v 'match' matchuje jedno slovo (postupně). Command sub: Normální kód v Perlu, který může používat následující funkce: c_copy (index_from, index_to) - zkopíruje veškeré atributy ze zdrojového slova s indexem index_from do cílového slova s indexem index_to c_set (index, attr, value) - nastaví hodnotu atributu cílového slova - vrací value c_get (index, attr) - vrací hodnotu atributu zdrojového slova c_del (index, attr) - maže atribut cílového slova c_dict (name, value) - vrací hodnotu ze slovníku se jménem name Indexy se počítají od 0 od začátku shody. Formát souborů se slovníky -------------------------- Slovníky jsou vždy uloženy v souboru .dict. Formát je jednoduchý: zdrojové_slovo cílové_slovo. Implementace ------------ Vstup se zjednoznační tak, že se vygenerují všechny možné kombinace vstupních dat. Na každou kombinaci se pak nezávisle aplikují pravidla. Vstup se postupně testuje na shodu s "match" části všech pravidel, pravidlo s nejdelší (ale úplnou) shodou se použije (provede se jeho příkazová část). Vstup se zpracovává sekvenčně a co již bylo jednou zpracováno se již dále nepoužije. Problémy -------- Pomalost transferu. Nemožnost větvit výsledek. Výstup všech variant najednou místo nějakého rozumného sloučení stejných částí. Štěpán Roh