190 likes | 337 Views
Slovník slovenského jazyka. Riešiteľ: Zuzana Gallová Vedúci projektu: RNDr. Stanislav Krajči, PhD. Cieľ projektu:. Vytvoriť xml súbor ktorý bude obsahovať dáta zo SSJ Vytvoriť dtd súbor. Pre vytvorenie programu bolo potrebné:. zistiť čo môže obsahovať heslová jednotka
E N D
Slovník slovenského jazyka Riešiteľ: Zuzana Gallová Vedúci projektu: RNDr. Stanislav Krajči, PhD.
Cieľ projektu: • Vytvoriť xml súbor ktorý bude obsahovať dáta zo SSJ • Vytvoriť dtd súbor
Pre vytvorenie programu bolo potrebné: zistiť čo môže obsahovať heslová jednotka definovať výskyt jednotlivých častí heslovej jednotky (napr. výskyt koncoviek) Výsledná štruktúra bola základom pre návrh triedového modelu.
Trieda CSlovnikSlovenskehoJazyka CSlovnikSlovenskehoJazyka=class private HeslovaJednotka: array of CHeslovaJednotka; number:integer; public constructor CREATE; function ANALYZUJ(s:string):boolean; procedure ULOZ(var f:text); end;
CHeslovaJednotka CHeslovaJednotka=class private HesloveSlovo:CHesloveSlovo; Variant:CVariant; NerovnocennyVariant:array of CNerovnocennyCariant; Vyslovnost:CVyslovnost; Odkaz:COdkaz; GramatickaCharakteristika:CGramatickaCharakteristika; Povod:CPovod; Vyznamy:CVyznamy; variantt:boolean; public constructor CREATE; function ANALYZUJ(s:string):boolean; procedure ULOZ(var f:text); end;
Triedy nižšie od heslovej jednotky obsahujú premennú “nastavene” typu boolean. Cautor=class private AutorStr:String; nastavene:boolean; public constructor CREATE; function ANALYZUJ(s:string):boolean; procedure ULOZ(var f:text); end;
Základné procedúry a funkcie procedúra PREPIS - spustí sa celá analýza a prepis - načíta sa celý riadok a po slovách sa posiela na analýzu Každá trieda obsahuje: funkciu analyzuj procedúdu ulož
funkcia ANALYZUJ function CGramatickaCharakteristika.ANALYZUJ(s:string):boolean; begin if(Koncovky.ANALYZUJ(s)=true) then begin nastavene:=true; result:=true; exit; end; if(Rod.ANALYZUJ(s)=true) then begin nastavene:=true; result:=true; ... Zložitejšia analýza slova na vstupe sa vykonáva na nižších úrovniach stromu tried, kde sa slovo analyzuje podľa znakov. Napr koncovky.
Procedúra ULOZ Volaním procedúry ULOZ najvyššej triedy, sa rekurzívne volajú procedúry nižších tried na uloženie, kde v najnižších triedach sú uložené príslušné stringy. Procedure CHeslovaJednotka.ULOZ(var f:TEXT);varbegin writeln(f,' <HESLOVA_JEDNOTKA>'); HesloveSlovo.ULOZ(f); Vyslovnost.ULOZ(f); GramatickaCharakteristika.ULOZ(f); ... writeln(f,' </HESLOVA_JEDNOTKA>');end;
Implementácia rôznych problémov Určovanie citátov – problémom je zistiť kde citát začína Vo význame sme mali ‘:’ - - môže ísť citát, môže ísť aj popis slova - citát vôbec nemusí byť v riadku - keď ide popis slova, jednotlivé popisy môžu byť oddelené znakom ‘;’tu sa môže stať že za nejakým popisom pôjde citát - na konci popisu môže byť dvojbodka a zase nevieme či ide za ňou citát Citát sa môže nachádzať aj ak nemáme pred ním znak ‘:’.
Riešenie tohto problému: Ak načítam prvé slovo ktoré neviem nikam zaradiť, tak prechádzam daný riadok až kým nenarazím na: - zátvorku - string v zátvorke skontrolujem - môže ísť o meno autora. Ak ide, tak máme citát ak nie tak ide o obyčajný popis. - dvojbodku – nejde o citát, možno pôjde ale až za dvojbodkou teraz ide popis - @ - narazili sme na variant slova, čiže nemáme meno autora, tak nejde o citát - číslo – môže zaznamenávať, že ide ďalší význam takže nejde o citát Ak sme mali dvojbodku tak môže nasledovať citáta prechádzam daný riadok až kým nenarazím na: - bodkočiarku - v citáte sa bodkočiarky nenachádzajú takže ide o popis - zátvorku - skontrolujeme či ide o meno autora a ak áno tak máme citát, ak nie, skontrolujem ďalšiu zátvorku Za citátom môže ísť ďalší citát.
function CPopis.ANALYZUJ(s:string):boolean; var j,i,q:integer; begin if (s[dlzka]=':') or (s[dlzka]=';') then begin AsiCitaty:=true; for i:=zzac+1 to length(r) do beginif (r[i]=';') or (r[i]=':') or (r[i]='@') or (r[i] in poradie) then beginCitatNie:=true;AsiCitaty:=false; for j:=1 to dlzka do begin veta:=veta+s[j]; end;....
if (r[i]='(') then begin p:=i; while (r[p]<>')') do begin inc(p); Aautor:=Aautor+r[p];end;AAAutor:=Form1.ZISTI_AUTORA(Aautor); if (AAAUtor='<>') then begin CitatNie:=true; for j:=1 to dlzka do begin veta:=veta+s[j]; end; .... else beginCitatNie:=false; for j:=1 to dlzka do beginveta:=veta+s[j];end;
Funkcia na rozpísanie mena autora: -keď narazím vo význame na zátvorky, tak daný string pošlem tejto funkcii -dáta sú v súbore v takomto tvare: (Taj.)#Tajovský# while (rrriadok[p]<>'#') do begin zzaznam:=zzaznam+rrriadok[p]; inc(p);if (zzaznam=s) then begin inc(p); while (rrriadok[p]<>'#') do begin result:=result+rrriadok[p]; inc(p); end;
Implementácia variantov: Prvým druhom variantu, môže byť variant, ktorý sa nachádza za heslovým slovom za spojkou ‘i’. Ide len o samostatný tvar variantu bez popisu. pr.: adopcia i @adoptácia@, -ie ž. ... Druhý druh variantu, je variant menejcenný. Ide o zastarané slová a nachádzajú sa v zátvorke s celým popisom slova. Zisťujem to tak, že za zátvorkou je skratka star..Potom volám analýzu gramatickej charakteristiky atď. Pr.: almara i @armara@, -már (star. i almária i armária, -ie, -ií) ž. ľud. ... Ďalším variantom, je variant, ktorý má samostatný popis. -Variant beriem ako novú heslovú jednotku a pri analýze postupujem rovnako. -Pri výpise prídem na to či daný objekt bol pôvodne variant alebo heslové slovo pomocou booleovskej premennej - variant, ktorá zaznamenáva či išlo o variant alebo nie. Pr.: Abdéra, -y ž. mesto v Trácii, starogrécke Kocúrkovo;@Abderita@, -u m. obyvateľ Abdéry;
Výpis variantu alebo heslovej jednotky procedure CHeslovaJednotka.ULOZ(var f:TEXT); beginif variantt then writeln(f,' <Variant>') elsewriteln(f,' <Heslová_jednotka>'); HesloveSlovo.ULOZ(f); Variant.ULOZ(f); Vyslovnost.ULOZ(f); Odkaz.ULOZ(f); GramatickaCharakteristika.ULOZ(f); Vyznamy.ULOZ(f);if variantt then begin writeln(f,' </Variant>'); end; end;
Delenie významov na podvýznamy ak ide v popise charakteristika slova ak máme napr. citát a za ním ide iný popis ak máme ľubovoľný popis a niekde za ním je dvojbodka, tak popis pred dvojbodkou je už iný podvýznam
Záver Problémy: zdrojové súbory sú v zlom stave a môže sa stať napr. že namiesto 6. p. (šiesty pád) sa v zdrojovom súbore nachádza in. p. pri načítavaní slov zo vstupu keď sa dostanem na koniec riadku, niekedy to načítava ďalej rôzne znaky množstvo výnimiek v SSJ a tiež slovník dodržiava len najzákladnejšiu štruktúru ktorá je definovaná v úvode, a to nie stále.