softwarovÝ projekt slovník cudzích slov
DESCRIPTION
SOFTWAROVÝ PROJEKT Slovník cudzích slov. Vedúci: RNDr. Stanislav Krajči, PhD. Riešiteľ: Lucia Gotthardová. Cieľom projektu bolo. Hlavný cieľ projektu : - PowerPoint PPT PresentationTRANSCRIPT
SOFTWAROVÝ PROJEKTSlovník cudzích slov
Vedúci: RNDr. Stanislav Krajči, PhD.Riešiteľ: Lucia Gotthardová
Cieľom projektu bolo
Hlavný cieľ projektu:Vytvorenie aplikácie (v programovacom prostredí Delphi) na prepis
súboru typu TXT, ktorý obsahuje heslá z Veľkého slovníka cudzích slov, do súboru typu XML.
Podciele:Uskutočniť podrobnú analýzu slovníkových hesiel.Navrhnúť štruktúru XML súboruVytvoriť DTD súbor.
DTD = definícia typu dokumentu
• vstupný textový súbor:
@abadir@ -u m. /orient./ v Oriente uctievané posvätné kamene, obyčajne okrúhle
@ab aeterno@ [ab-eterno] /lat./ od večnosti
@abak@ -a m. /tag. -> špan./ -> abakus
@abaka@ -y ž. /indonéz./ text. vlákno z listov daktorých druhov banánovníkov
• každej časti rozanalyzovaného textu prislúcha 1 trieda• „hlavná“ trieda Slovnik_cudzich_slov obsahuje Heslove_jednotky
TSlovnik_cudzich_slov = class private Heslova_jednotka: array of THeslova_jednotka; number: integer; public constructor CREATE; function ANALYZUJ(s: string):boolean; procedure XML(var f: TEXT);
• Heslova_jednotka obsahuje ďalšie časti, pre ktoré sú definované prísušné triedy
Vstup a štruktúra
Štruktúra
TVyklady_vyznamu = class private Vyznam: array of TVyznam; number: integer; nastavene:boolean; public constructor CREATE; function ANALYZUJ(s:string):boolean; procedure XML(var f:TEXT); end;
Výklady významuTVyznam = class private Podvyznam: array of TPodvyznam; cislo_vyz: string; number: integer; nastavene:boolean; public constructor CREATE; function ANALYZUJ(s:string): boolean; procedure XML(var f:TEXT); end;
TPodvyznam = class private Styly: TStyly; Povody: TPovody; Odkaz: TOdkaz; Antonymum: TAntonymum; Text_vyznamu: TText_vyznamu; nastavene:boolean; public constructor CREATE; function ANALYZUJ(s:string):boolean; procedure XML(var f:TEXT); end;
TText_vyznamu = class private text: string; nastavene:boolean; public constructor CREATE; function ANALYZUJ(s: string): boolean; procedure XML(var f:TEXT); end;
Výklady významu
Analýza
Prepis- konštruktorom sa vytvorí inštancia "najvrchnejšej" triedy - Slovnik_cudzich_slov.CREATE- pokiaľ nie je koniec súboru
- načíta sa jeden riadok - z riadku sa postupne načítavajú slová- Slovnik_cudzich_slov.ANALYZUJ(slovo)- Heslova_jednotka.CREATE - Heslova_jednotka.ANALYZUJ(slovo) -> Heslove_slovo.ANALYZUJ(slovo),
ak nie, Odkaz.ANALYZUJ(slovo), ak nie, Vyslovnost.ANALYZUJ(slovo), atď...
- zápis do výstupného súboru - Slovnik_cudzich_slov.XML(f)
procedure TSlovnik_cudzich_slov.XML(var f:text);var i:integer;begin writeln(f,'<Slovník_cudzích_slov>'); for i:=0 to number-1 do Heslova_jednotka[i].XML(f); writeln(f,'</Slovník_cudzích_slov>');end;
Prepisprocedure THeslova_jednotka.XML(var f:TEXT);begin writeln(f,' <Heslová_jednotka>'); Heslove_slovo.XML(f); Odkaz.XML(f); Vyslovnost.XML(f); Gramaticka_charakteristika.XML(f); Varianty.XML(f); Zenska_prechylena_podoba.XML(f); Povody.XML(f); Vyklady_vyznamu.XML(f); Antonymum.XML(f); writeln(f,' </Heslová_jednotka>');end;
procedure TVarianty.XML(var f:TEXT);var i: integer;begin if not nastavene then exit; writeln(f,' <Varianty>'); for i:= 0 to number-1 do Variant[i].XML(f); writeln(f,' </Varianty>');end;
procedure TVariant.XML(var f:TEXT);begin if not nastavene then exit; writeln(f,' <Variant>'); Tvar_variantu.XML(f); Vyslovnost.XML(f); Gramaticka_charakteristika.XML(f); writeln(f,' </Variant>');end;
procedure TTvar_variantu.XML(var f:TEXT);begin if not nastavene then exit; write(f,' <Tvar_variantu'); if cislo_tvaru_var <> '' then write(f,' číslo_tvaru_var=' + cislo_tvaru_var); write(f,'>'); write(f,tvar_var); writeln(f,'</Tvar_variantu>');end;
@ab hoc et ab hac@ [-hok -hák] /lat./ o tomto i o tamtom; dve na tri (hovoriť, tárať)
if znak = '[' then begin if i = 1 then hheslove_slovo_s_vyslovnostou:= true; je_tam:= ZISTI(riadok,']',i); if je_tam then begin sslovo:= '['; inc(i); znak:= riadok[i]; while znak <> ']' do begin sslovo:= sslovo + znak; inc(i); znak:= riadok[i]; end; vvyslovnost:= true; end end;
Výslovnosť
@abreografía@ -ie ž. /podľa brazílskeho lekára Manoela de Abreua + gréc./ lek. rÖntgenologické ...
if znak = '/' then begin if i = 1 then hheslove_slovo_s_vyslovnostou:= true; je_tam:= ZISTI(riadok,'/‚i); if je_tam then begin sslovo:= '['; inc(i); znak:= riadok[i]; while znak <> ']' do begin sslovo:= sslovo + znak; inc(i); znak:= riadok[i]; end; ppovod:= true; sslovo:= sslovo + znak; inc(i); znak:= riadok[i]; end end;
Pôvod
@acidóza@ -y ž. /lat. + gréc./ lek. nadbytočný obsah kyslých látok v tkanive organizmu alebo v krvi (op. alkalóza)
if (znak = '(') and (riadok[i+1] = 'o') and (riadok[i+2] = 'p') and (riadok[i+3] = '.') then begin sslovo:= '(op. '; i:= i + 4; while riadok = ' ' do inc(i); znak:= riadok[i]; while znak <> ')' do begin sslovo:= sslovo + znak; inc(i); znak:= riadok[i]; end; inc(i); znak:= riadok[i]; aantonymum:= true; end;
Opozitum
Analýza- funkcia Heslova_jednotka.ANALYZUJ(slovo) posiela reťazec slovo na analýzu svojim podtriedam- sama najprv čiastočne zanalyzuje, či slovo môže poslať ďalej
Analýza Čísla
@akantocefaly@ -ov m. mn. č. /gréc./ vet. trieda parazitických červov z podkmeňa hlistovcov majúcich na hlavovom konci výbežok s prichytávacími háčikmi
- zistí sa, že načítané slovo je „jedn.“ alebo „mn.“- zapamätá si to a Gramatickej_charakteristike zatiaľ neposiela nič
if (s[1]='j') and (s[2]='e') and (s[3]='d') and (s[4]='n') and (s[5]='.') then begin jednotne_cislo1:= true; rozanalyzovane:= true; end;if (s[1]='m') and (s[2]='n') and (s[3]='.') then begin mnozne_cislo1:= true; rozanalyzovane:= true; end;
Analýza - Číslo@akantocefaly@ -ov m. mn. č. /gréc./ vet. trieda parazitických červov z podkmeňa hlistovcov majúcich na hlavovom konci výbežok s prichytávacími háčikmi
- až po načítaní slova „č.“ pošle ďalej informáciu o čísle
if (s[1]='č') and (s[2]='.') then begin if jednotne_cislo1 then jednotne_cislo2:= true; if mnozne_cislo1 then mnozne_cislo2:= true; jednotne_cislo1:= false; mnozne_cislo1:= false; rozanalyzovane:= true; end;
@akantocefaly@ -ov m. mn. č. /gréc./ vet. trieda parazitických červov z podkmeňa hlistovcov majúcich na hlavovom konci výbežok s prichytávacími háčikmi
function TGramaticka_charakteristika.ANALYZUJ(s:string):boolean;begin if Koncovky_genitivu.ANALYZUJ(s) = true then begin nastavene:= true; result:= true; ... exit; end; if Cislo.ANALYZUJ(s) = true then begin nastavene:= true; result:= true; end else result:= false; ...end;
Analýza - Číslo
@akantocefaly@ -ov m. mn. č. /gréc./ vet. trieda parazitických červov z podkmeňa hlistovcov majúcich na hlavovom konci výbežok s prichytávacími háčikmi
function TCislo.ANALYZUJ(s:string):boolean;begin if jednotne_cislo2 then begin cis:= 'jednotné číslo'; result:= true; nastavene:= true; jednotne_cislo1:= false; jednotne_cislo2:= false; end; if mnozne_cislo2 then begin cis:= 'množné èíslo'; result:= true; nastavene:= true; mnozne_cislo1:= false; mnozne_cislo2:= false; end; if (not jednotne_cislo2) and (not mnozne_cislo2) then result:=false;end;
Analýza - Číslo
Analýza - Pôvod
1. /lat. -> franc. -> nem./
2. /lat. + franc./
3. /lat. -> franc. + nem./
<Pôvody> <Pôvod cislo_pov=1> <Jazyk>latinčina</Jazyk> </Pôvod> <Pôvod cislo_pov=2> <Jazyk>francúzština</Jazyk> </Pôvod> <Pôvod cislo_pov=3> <Jazyk>nemčina</Jazyk> </Pôvod></Pôvody>_____________________________________
<Pôvody> <Pôvod> <Jazyk>latinčina</Jazyk> </Pôvod> <Pôvod> <Jazyk>francúzština</Jazyk> </Pôvod></Pôvody>_____________________________________
<Pôvody> <Pôvod cislo_pov=1> <Jazyk>latinčina</Jazyk> </Pôvod> <Pôvod cislo_pov=2> <Jazyk>francúzština</Jazyk> </Pôvod> <Pôvod> <Jazyk>nemčina</Jazyk> </Pôvod></Pôvody>
4. /skratka pre lat. acutus/
<Pôvody> <Pôvod> <Jazyk>latinčina</Jazyk> <Popis_pôvodu> skratka pre výraz "acutus" </Popis_pôvodu> </Pôvod></Pôvody>
- Heslova_jednotka pošle triede TPovody na analýzu slovné spojenie- Tpovody.ANALYZUJ(s) zistí, či sa vyskytuje plus „+“ alebo šípka „->“- ak tam nie je + alebo ->,
- vytvorí objekt inc(number);Povod[number]:= TPovod.CREATE;
- zavolá Povod[number].ANALYZUJ(s)- ak tam je + alebo ->,
- číta celý reťazec - ak príde šípka, pôvod bude očíslovaný a zvýši číslo pôvodu- ak príde plus
- ak naposledy nebola šípka, pôvod nebude očíslovaný- ak naposledy bola šípka, pôvod bude číslovaný a zvýši číslo pôvodu
- ak je koniec reťazca- podľa predchádzajúcej spojky rozhodne o číslovaní pôvodu
TPovody.ANALYZUJ(s)
Analýza - Pôvod
TPovod.ANALYZUJ(s)
1. /podľa franc. fyzika Ampéra/2. /z lat. anno ante Christum (natum)/3. /skratka pre lat. acutus/, /skratka z angl. animal protein factor/4. /lat./
- ak je pôvod číslovaný, zaznamená si číslo- zistí, či má reťazec viac slov- ak má iba 1 slovo, pošle ho na analýzu triede Jazyk a Popis_povodu- ak má viac slov, zistí 1. slovo (podľa, z, skratka)
- podľa –> Popis_povodu.ANALYZUJ(s)- z, skratka –> zo stringu získa informáciu o jazyku
–> Jazyk.ANALYZUJ(string_jazyk) –> všetko ostatné
–> Popis_povodu.ANALYZUJ(string_popis)
Analýza - Pôvod
TJazyk.ANALYZUJ(s) function TJazyk.ANALYZUJ(...);begin if s <> '' then begin if (s[length(s)] = '?') then begin s:= copy(s,1,length(s)-1); jaz:= Form1.SKRATKA(s); jaz:= jaz + '?'; end else jaz:= Form1.SKRATKA(s); nastavene:= true; result:= true; exit; end else begin nastavene:= false; result:= false; exit; end;end;
TPopis_povodu.ANALYZUJ(s) function TPopis_Povodu.ANALYZUJ(...);begin if s <> '' then begin if (s = '?') or (s = 'um.') or (s = 'podľa vlast. m.') then begin if s = '?' then pop:= 'neznámy pôvod'; if s = 'um.' then pop:= 'umelé slovo'; if s = 'podľa vlast. m.' then pop:= 'podľa vlastného mena'; end else pop:= s; nastavene:= true; result:= true; exit; end else begin nastavene:= false; result:= false; exit; end;end;
Analýza - Pôvod
Analýza – Výklady významu
Vyklady_vyznamu.ANALYZUJ(s)
- prechádza string až do konca- ak je na začiatku "1.", Vyznamy budú číslované (=> aspoň 2 významy) - kým sa nedostane k ďalšiemu číslu a nie je koniec riadku,
- do stringu ss načítava znaky- vytvorí inštanciu podtriedy TVyznam -> Tvyznam.ANALYZUJ(ss)
1. lek. prudko prebiehajúci, náhly; prudký (op. chronický)2. naliehavý, pálčivý súrny
Vyznam.ANALYZUJ(s)
- ak sú významy číslované, zapamätá si číslo- kým nepríde bodkočiarka, alebo nie je koniec reťazca
- do stringu ss načítava znaky- vytvorí inštanciu podtriedy TPodvyznam -> TPodvyznam.ANALYZUJ(ss)
lek. prudko prebiehajúci, náhlyprudký (op. chronický)naliehavý, pálčivý súrny
@akútny@ /lat./ 1. lek. prudko prebiehajúci, náhly; prudký (op. chronický) 2. naliehavý, pálčivý súrny
Významy
Podvyznam.ANALYZUJ(s)
- Podvýznam: informácia o štýle, odkaz, pôvod, antonymum- kým nie je koniec reťazca
- nájde podreťazce štýl -> TStyly.ANALYZUJ(string_styl) odkaz ->
TOdkaz.ANALYZUJ(string_styl) pôvod ->
TPovody.ANALYZUJ(string_styl) antonymum ->
TAntonymum.ANALYZUJ(string_styl)- ostatné znaky -> TText_vyznamu.ANALYZUJ(string_styl)
@akútny@ /lat./ 1. lek. prudko prebiehajúci, náhly; prudký (op. chronický) 2. naliehavý, pálčivý súrny
Analýza – Výklady významu
o Pôvod – lat., nem., franc., ...o Štýl – lek., kniž., pren., zried., ...
function TForm1.SKRATKA(s: string): string;var ss, rr: string; zz: char;begin result:= ‚?????'; AssignFile(f3,'skratky.txt'); Reset(f3);
ss:= ''; rr:= ''; while not eof(f3) do begin read(f3,zz); while zz <> '#' do begin ss:= ss + zz; read(f3,zz); end; if ss = s then begin read(f3,zz);
while zz <> '#' do begin rr:= rr + zz; read(f3,zz); end; result:= rr; exit; end else begin ss:= ''; rr:= ''; readln(f3); end; end; CloseFile(f3);end;
admin.#+v administratíve#afgan.#afgánčina#afr.#africké jazyky#
Funkcia SKRATKA
Zhrnutie
Problém- chyby vo vstupných súboroch
- môže sa vyskytnúť - @ab equis ad asinos - lat./, [ábécé, … - varianty, ženské prechýlené podoby bez @ - rozdielne typy pomlčiek - namiesto -> sa vyskytuje -- >, --- >
Riešenie- oprava ručne- programy na opravu niektorých chýb