VISLCG esialgne kasutusjuhend

Sisend

Kohordi esimesel real on sõnavorm nurksulgudes ja jutumärkide vahel „<sõnavorm>“

Järgmistel ridadel on sõnavormi tõlgendused. Tõlgenduste rida algab tühikutega. Esimesel kohal tüvi jutumärkide ja nurksulgude vahel, järgnevad märgendid.

Märgendites ei tohi olla sümboleid ;=()#|

Näide sisendist

"<s>"
"<Kumb>"
  "kumb" <kumb+0>  P inter rel sg nom .cap  <Correct!>
"<mees>"
  "mees" <mees+0>  S com sg nom  <Correct!>
  "mesi" <mesi+s>  S com sg in 
"<on>"
  "ole" <ole+0>  V main indic pres ps3 sg ps af .FinV .Intr  <Correct!>
  "ole" <ole+0>  V aux indic pres ps3 sg ps af .FinV .Intr 
  "ole" <ole+0>  V main indic pres ps3 pl ps af .FinV .Intr 
  "ole" <ole+0>  V aux indic pres ps3 pl ps af .FinV .Intr 
"<parem>"
  "parem" <parem+0>  A comp sg nom  <Correct!>
  "parem" <parem+0>  D 
"<->"
  "-" <-> Z Dsh 
"<sel>"
  "see" <see+l>  P dem sg ad  <Correct!>
"<iginaiselikul>"
  "igi_naise~lik" <igi_naise~lik+l>  A pos sg ad .lik  <Correct!>
"<dilemmal>"
  "dilemma" <dilemma+l>  S com sg ad  <Correct!>
"<ei>"
  "ei" <ei+0>  D 
  "ei" <ei+0>  V aux neg  <Correct!>
"<ole>"
  "ole" <ole+0>  V main imper pres ps2 sg ps| af .FinV .Intr 
  "ole" <ole+0>  V main imper pres ps2 sg ps neg .FinV .Intr 
  "ole" <ole+0>  V main indic pres ps neg .FinV .Intr  <Correct!>
  "ole" <ole+0>  V aux imper pres ps2 sg ps af .FinV .Intr 
  "ole" <ole+0>  V aux imper pres ps2 sg ps neg .FinV .Intr 
  "ole" <ole+0>  V aux indic pres ps neg .FinV .Intr 
"<eestlaste>"
  "eestlane" <eestlane+te>  S com pl gen  <Correct!>
"<jaoks>"
  "jaoks" <jaoks+0>  D 
  "jaoks" <jaoks+0>  K post .gen  <Correct!>
  "jagu" <jagu+ks>  S com sg tr 
"<ühest>"
  "ühest" <ühest+0>  D 
  "ühene" <ühene+t>  A pos sg part  <Correct!>
  "üks" <üks+st>  N card sg el l 
  "üks" <üks+st>  P indef dem sg el 
"<vastust>"
  "vastus" <vastus+t>  S com sg part  <Correct!>
"<.>"
  "." <.> Z Fst 
"</s>"

Lauselõputunnused on üherealised.

Käivitamine

Sisend loetakse standardsisendist

Reeglite fail antakse ette lipuga --grammar

Väljund kirjutatakse standardväljundisse.

Vajalikuks võivad osutuda lipud --debug (annab hoiatuse, kui mingi reegel üritab <Correct!> märgendiga rida eemaldada) ja --trace (näitab rakendatud reeglite järjekorda). Selgitused allpool.

cat sisend | vislcg –-grammar reeglid.txt |less

Reeglite faili sektsioonid

DELIMITERS – lauselõputunnused;

DELIMITERS = "<s>" "<p>" "</s>" "</p>" ;

SETS – hulkade defineerimine

LIST >>> = >>> ;
LIST <<< = <<< ;
LIST Koolonid = Col Scl ;
LIST Kvm = Com Col Scl Z ;
LIST Sid|Kvm = (J crd) ("kui" J) Com Col Scl Z;
LIST Clb = <clb>;
LIST Sides = "et" "nagu" "kui" "kuni" "kas" "kes" "mis" "kus" "kuid" "aga" "siis" "kuigi" "kuidas" "otse_kui" "sest" "ja" "ning" "ega" ("või" J) "ehk" "kui_palju" ;
LIST Tud = (partic past imps) tud;
LIST Ja = "ja" "ning" "ega";
LIST JaVoi = "ja" "ning" ("või" J) "ega";
LIST SbPrNom =(S nom) (P nom) (N card nom);
LIST InfSupiin = inf sup;

Sulgudes olevad märgendid peavad esinema korraga.

LIST nimi = element1 element2 ... ;
element1 -> märgend | (märgend1 märgend2) |"tüvi"

SET võtmesõnaga algav deklaratsioon lubab tehteid hulkadega. Kirjeldus hiljem.
Märgendit võib kasutada ilma hulgana deklareerimata, sel juhul peab ta olema sulgudes, vt allpool.

CONSTRAINTS – reeglite sektsioon

Hetkel aktuaalsed 2 liiki reeglid
SELECT TARGET CONDITION;
REMOVE TARGET CONDITION;

TARGET on märgend või märgendite kombinatsioon, võib kasutada ORi;
CONDITION on kontekstitingimused, mis peavad olema täidetud;

Näide

SELECT (@IMV) (0 (inf)) (-1 (FinV))
                        (NOT -1 ("ole"))
                        (NOT -1 (InfP))
                        (NOT -1 Ühepöördeline)
                        (NOT -1 Emotsioonv)
                        (NOT -1 Sobivusv)
                        (NOT -1 Vajadusv)
                        (NOT -1 Suutelisusv)
                        (NOT -1 TeisedDaInfv);
Vali tõlgenduserida, mis sisaldab märgendit @IMV, kui kohordil on märgend inf, eelneval kohordil on märgend FinV ja eelneval kohordil pole märgendeid, mis kuuluks neisse hulkadesse)
REMOVE (@IMV) OR (@ICV) (0 (sup ill))(1 MaVerb LINK NOT 0 Öeldis);
Eemalda tõlgenduserida, mis sisaldab märgendit @IMV või @ICV, kui kohordis on rida, mis sisaldab märgendeid sup ja ill, järgmine kohort sisaldab hulka MaVerb kuuluvat märgendit ning samal real ei tohi olla hulka Öeldis kuuluvat märgendit
SELECT (@P>) (0 NimKv OR ArvKv OR KvAdv)(1C (@Q<))(2 (post));

END - lõpp



Kontekstitingimustes on vaja näidata uuritava sõna asukoht antud sõna suhtes. Selleks kasutatakse suhtelist adresseerimist, antud sõna paikneb positsioonil 0, parempoolsesse konteksti jäävate sõnade positsiooniks on nende kaugus antud sõnast, s.t vahetult järgneva sõna positsioon on 1, sellele järgneva sõna positsioon on 2 jne. Kui sõna paikneb antud sõna vasakpoolses kontekstis, on tema positsiooni numbriks nende sõnade vaheline kaugus miinusmärgiga, s.t vahetult eelnev sõna asub positsioonil -1, tollele eelnev sõna positsioonil -2. 

Kui otsitava sõna täpne positsioon ei ole teada, kasutatakse määramata positsioone: vajalikku kohorti otsitakse alates antud positsioonist kuni lause lõpuni. Määramata positsioone tähistatakse tärniga positsiooninumbri ees. Näiteks aadress *-1 tähendab, et otsimist tuleb alustada vasakult esimesest sõnast ning liikuda otsides nii kaugele lause alguse suunas kui võimalik.

Samuti on vaja kontekstitingimustes ära näidata, millisesse hulka antud positsioonil olev sõna kuulub. Kolmas oluline kontekstitingimuse osa on tingimuse polaarsus (polarity), s.t kas sõna hulka kuulumise tingimus on vajalik, või selle tingimuse eitus: antud positsioonil olev sõna ei tohi kuuluda antud hulka.

Seega saab kontekstitingimust esitada kolmikuna:

(<polaarsus> <positsiooninumber> <hulga nimi>)

Kui tingimus ei tohi olla täidetud, siis peab tingimus algama sõnaga NOT. Kui antud positsioonil asuv sõna peab kuuluma hulka, siis tingimuses polaarsuse osa puudub.

Tabel 2.2. Näiteid kontekstitingimustest

Tingimus

Selgitus

(-1 Adj)

Vahetult eelneval sõnal leidub selline tõlgendus, millel on hulka Adj kuuluv tunnus.

(NOT 2 Verb)

Ülejärgmisel sõnal ei leidu hulka Verb kuuluvat tunnust.

(0 Pron)

Antud sõnal leidub hulka Pron kuuluv tunnus.

(*1 Prverb)

Alates järgmisest positsioonist kuni lause lõpuni leidub mõni sõna, millel leidub hulka Prverb kuuluv tunnus.

(NOT *-3 Adv)

Antud sõnast 3 sõna võrra vasakule jääv sõna ning kõik sõnad sellest kuni lause alguseni ei sisalda hulka Adv kuuluvaid tunnuseid.



<s> Kümne	  minuti	  pärast	     peab	      ta	    minema     hakkama .  < /s>
N S K V P V V
gen gen post .gen sg ps3 sg nom sup ill sup ill
prep .part sg gen
-2 -1 0 1 2 3 4



Kui analüüs on sõna pärast juures, siis positsioonid tähendavad järgmist

0 -- kontrollitakse kohorte (K post .gen) ja (K post .part)

1 -- kontrollitakse kohorti (V sg ps3)

2 -- kontrollitakse kohorte (P sg nom) ja (P sg part)

jne

-1 -- kontrollitakse kohorti (S gen)

jne

*1 – kõik kohordid alates positsioonist 1 kuni lause lõpuni (peab, ta, minema, hakkama, .) -- parempoolne kontekst

*-1 – kõik kohordid alates positsioonist -1 kuni lause alguseni (minuti, kümne) – vasakpoolne kontekst

@1 – lause esimene kohort ehk kümne


Kui positsiooninumbrile järgneb C, siis toimub kontekstitingimuste kontroll ettevaatlikus režiimis (careful mode):

(-1 C (gen)) -- eelneva sõna kõik kohordid sisaldavad märgendit gen

(@3C (K)) -- lause kolmanda sõna kõik kohordid sisaldavad märgendit K


Tingimust saab eitada võtmesõnaga NOT

(NOT 1 Verb)


Barjäärid

(*-1 Nom BARRIER Verb) – vasakus kontekstis leidub kohort, mille mõni märgend kuulub hulka Nom ning otsimist vasakule tehakse seni, kuni tuleb lause piir (algus) või mõni kohort, mille mõni märgend kuulub hulka Verb.

(NOT *-1 Nom BARRIER Verb OR Koma) – vasakus kontekstis pole kohorti, millel leiduks märgend hulgast Nom. Otsitakse kuni lause piirini või kohordini, mille mõni märgend kuulub kas hulka Verb või hulka Koma.


Viidad

(*-1 Subst LINK -1 Adj) – Vasakus kontekstis leidub kohort, mille mõni märgend kuulub hulka Subst ja sellele omakorda vahetult eelnev kohort on märgendiga hulgast Adj.

(*1 A LINK 1 B LINK *1 C)

(*1 A BARRIER X LINK 1 B) - enne Ad pole Xi

(*1 A LINK *1 B BARRIER X) – Xi pole Aja B vahel

(*1 A BARRIER X LINK *1 B BARRIER Y) – enne A-d pole Xi ja A ja B vahel pole Yit

(*1 A BARRIER X LINK *1 B BARRIER X OR Y) – enne Ad pole Xi ja A ja B vahel pole ei X ega Y


Jätkuv otsing

* abil otsitakse kohorti kuni esimese tingimuse poole täitumiseni

** abil otsing jätkub, kui mõni viidatingimus polnud täidetud.


Kui tahetakse rõhutada, et märgendid peavad kuuluma samasse tõlgendusse, kasutatakse + tehet:

(1 A + B) leidub tõlgendus, mille märgendid kuuluvad nii hulka A kui hulka B


Tehted hulkadega

OR – hulkade ühend;

SET PS = (P) OR (S); <--> LIST PS = P S;

+ - hulkade liitmine

LIST NiNaTaGa = term ess abes kom;

SET PS4viimast= PS + NiNaTaGa; <--> LIST PS4viimast = (P term) (P ess) (P abes) (P kom) (S term) (S ess) (S abes) (S kom);


- hulkade vahe

LIST Esimene = A B C D E F;

LIST Teine = E F;

SET Vahe = Esimene – Teine; <--> LIST Vahe = A B C D;


Programmi lipud

--trace kirjutab iga rea algusesse, millist reeglit rakendati koos reeglitefaili reanumbriga.
--debug annab lause alguses hoiatuse, kui mõni reegel kustutab <Correct!> märgendiga rea. debug-rezhiimis reegleid ei rakendata.