1 / 23

SOFTWAROVÝ PROJEKT Slovník cudzích slov

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 :

ilar
Download Presentation

SOFTWAROVÝ PROJEKT Slovník cudzích slov

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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úboru • Vytvoriť DTD súbor. DTD = definícia typu dokumentu

  3. Vstup a štruktúra • 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

  4. Štruktúra

  5. Výklady významu TVyznam = 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; 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; 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;

  6. Výklady významu Analýza

  7. 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;

  8. Prepis procedure 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 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; 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;

  9. Výslovnosť @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;

  10. Pôvod @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;

  11. Opozitum @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;

  12. 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;

  13. 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;

  14. 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 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;

  15. 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;

  16. 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>

  17. Analýza - Pôvod 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> TPovody.ANALYZUJ(s) • 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

  18. Analýza - Pôvod • TPovod.ANALYZUJ(s) • /podľa franc. fyzika Ampéra/ • /z lat. anno ante Christum (natum)/ • /skratka pre lat. acutus/, /skratka z angl. animal protein factor/ • /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)

  19. Analýza - Pôvod 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; 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;

  20. Analýza – Výklady významu @akútny@ /lat./ 1. lek. prudko prebiehajúci, náhly; prudký (op. chronický) 2. naliehavý, pálčivý súrny Vyklady_vyznamu.ANALYZUJ(s) - prechádza string až do konca - ak je na začiatku "1.", Vyznamybudú čí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áhly prudký (op. chronický) naliehavý, pálčivý súrny Významy

  21. Analýza – Výklady významu @akútny@ /lat./ 1. lek. prudko prebiehajúci, náhly; prudký (op. chronický) 2. naliehavý, pálčivý súrny 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)

  22. Funkcia SKRATKA admin.#+v administratíve# afgan.#afgánčina# afr.#africké jazyky# • Pôvod – lat., nem., franc., ... • Š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;

  23. 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

More Related