softwarovÝ projekt slovník cudzích slov

23
SOFTWAROVÝ PROJEKT Slovník cudzích slov ci: RNDr. Stanislav Krajči, PhD. iteľ: Lucia Gotthardová

Upload: ilar

Post on 22-Jan-2016

46 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: SOFTWAROVÝ PROJEKT Slovník cudzích slov

SOFTWAROVÝ PROJEKTSlovník cudzích slov

Vedúci: RNDr. Stanislav Krajči, PhD.Riešiteľ: Lucia Gotthardová

Page 2: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 3: SOFTWAROVÝ PROJEKT Slovník cudzích slov

• 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

Page 4: SOFTWAROVÝ PROJEKT Slovník cudzích slov

Štruktúra

Page 5: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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;

Page 6: SOFTWAROVÝ PROJEKT Slovník cudzích slov

Výklady významu

Analýza

Page 7: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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;

Page 8: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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;

Page 9: SOFTWAROVÝ PROJEKT Slovník cudzích slov

@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ť

Page 10: SOFTWAROVÝ PROJEKT Slovník cudzích slov

@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

Page 11: SOFTWAROVÝ PROJEKT Slovník cudzích slov

@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

Page 12: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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;

Page 13: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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;

Page 14: SOFTWAROVÝ PROJEKT Slovník cudzích slov

@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

Page 15: SOFTWAROVÝ PROJEKT Slovník cudzích slov

@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

Page 16: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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>

Page 17: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 18: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 19: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 20: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 21: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 22: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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

Page 23: SOFTWAROVÝ PROJEKT Slovník cudzích slov

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