{{predmet|Pražský závislostní korpus|Markéta Lopatková, Jan Štěpánek|PFL075}}
Poznámky ze ZS 2008/9 -- User:Tuetschek 20:59, 29 Jan 2009 (CET)
Funkční generativní popis
Teorie: FGP -- Funkční generativní popis, a její odlišnosti od praxe, tedy co nemohlo být v PZK
uděláno podle ní.
První popis -- Sgall 1967, potom Panevová 1980 (hl. jde o valenci), potom Sgall, Hajičová a Panevová 1986 (hl. akt. členění). Razí stratifikační přístup: lingvistickým popisem věty je její reprezentace na několika rovinách, představitelé se ale rozcházejí v názorech, kolik rovin máme.
Každá rovina má jednotky elementární (na slajdu: vedou od nich šipky), a jednotky komplexní (k nim vedou šipky), ty jsou svázány relací kompozice, mezi rovinami relací reprezentace (základní jednotka vyšší roviny je reprezentována komplexní na nižší, ta jde rozložit atd. Jen na nejvyšší úrovni to tak nefunguje, skladba je jiná).
FR: rovina fonetická / fonologická (jde o popis mluveného jazyka) -- zákl. jednotka je distinktivní rys, komplexní je hláska
MFR: rovina morfonologická -- zákl. jednotka je morfoném (odp. hlásce), jejich řetězec je morf.
Tyhle dvě roviny byly už docela dobře zpracovány před mnoha lety, dnešní lingvistika už je až tak moc neřeší.
MR: morfologická rovina -- každý morf má funkci nějakého morfému, např. kmenu nějakého slova, nebo tvarům koncovky atp. Morfy dohromady tvoří séma, ty se nějak poskládají, aby tvořily formém: např. předložka + pád.
VČR: větně členská rovina, elem. jednotka je tagmém -- jsou 3 druhy: větné členy, *, sufixy. Skládají se do nějaké abstraktní představy věty (obsahuje kromě slov i vztahy mezi nimi).
TGR: tektogramatická rovina: sémantémy ~ sémoglyfy, funktory (Act, Pat ...), sufixy = gramatémy (vnitřní gramatické kategorie, např. časově proti členské rovině nemám přít. čas, ale současnost, předčasnost a následnost). Jde o rovinu jazykového významu.
Závislostní strom
Reprezentací TGR je závislostní strom -- tj. uzly, hrany, kořen, lin. uspořádání uzlů a jejich ohodnocení. Délce "význačné cesty" (cesty z kořene do uzlu) se říká hloubka (rank). Ohodnocení uzlu je "komplexní symbol" (mívá v sobě jak sémantém, tak funktor, tak gramatémy).
Př (komplexní symbol):Pekař peče housky. péci / \ pekař(ACT) houska(PAT) -- sémantém (funktor) (SG) (PL) -- gramatém
Díky tomu, že ve stromech nejsou cykly, se v nich dá docela rychle hledat.
Popisy vztahů mezi rovinami
Deklarativní popis -- měl by popisovat vztahy mezi rovinami bez ohledu na to, z které roviny se díváme.
Procedurální popis -- "jestliže na této rovině je tohle, budeme reprezentovat na vyšší takhle".
Deklarativní popis se hodí na zkoumání, zda si dvě roviny odpovídají, procedurální k výrobě popisů; naopak to nejde.
Generativní popis je podmnožina procedurálních: ty se dají rozlišit podle toho, zda postupují od hloubkové struktury (generování), nebo od povrchu (analýza, tomu odp. proces anotace). Tedy vznik korpusu je přesně opačný, než co říkala teorie FGP.
Teorie FGP: existuje generativní složka (BKG), která vyrábí tektogramatický popis, plus 4 BKA, které vyrábí povrchovou strukturu -- nebyla to jen teoretická konstrukce, částečně to fungovalo.
Pražský závislostní korpus
Rozdíly teorie a korpusu
Několik příčin rozdílů: časové, finanční, implementační; hodně rozdílů kvůli obrácenému pohledu než FGP.
Jsou 3 roviny popisu + jedna "nultá" (tj. 4):
<#w-rovina> (slovní, nultá)
<#m-rovina> (morfologická)
<#a-rovina> (analytická, původní "větně členská")
<#t-rovina> (tektogramatická)
Nultá rovina obsahuje jen jednotlivá slova (slovní tvary = tokens -- vč. interpunkce), tak jak šla za sebou v novinách. Není to tedy přesně text z novin, prošel už tokenizací (ani vytvoření nulté roviny není triviální). Morfologická rovina zhruba odpovídá, tektogramatická taky, ale analytická původní větně členské z FGP moc neodpovídá.
M-rovina a a-rovina si odpovídají slovo od slova. U nulté roviny a a m-roviny nemusí být vztah 1:1 vždy, kvůli překlepům (např. zapomenutá mezera), ale děje se to jen zřídka, bývá buď 1:m, nebo n:1, když už (teoreticky vyloučit m:n nelze).
PML, schémata
{{TODO|(Teoreticky popsat, co je to PML a co je schéma a instance, viz slajdy)}}
Současné PML umožňuje zapsat morfologické schema kratším způsobem než to, co je na CD PDT 2.0. M-data schema XML se da krom CD najit jeste v adresari tred/resources. Cislo revize schematu je ze 3 cisel. Kdyz se zvysuje cislo na 3. miste, tak se sice zmenilo schema, ale data zustavaji validni ve stejnem pripade jako predtim (schema je jine, ale validuje uplne stejna data). Pokud se meni prostredni, muze se mnozina validovanych dat rozsirit -- tj. stará data není třeba převádět, ale nová na staré schema pasovat nemusí. Pokud se měni první číslo, jde o konec kompatibility.
Novější verze PML schématu používá funkce import
a derive
-- např. importuje wnode.type
a bool.type
z wdata schéma verze 1.0.0 a vyšší (boolovsky typ je proste zbytečné definovat pokaždé; wnode.type
ještě po importu mění - to, co bylo id
, dostává formát pmlref
: tj. na w-rovině mame identifikátor, ze kterého se na m-rovině stává odkaz).
w-rovina
Node <w>
:
token -- obsah (text)
no_space_after -- nepovinné, je "1", pokud za tokenem není whitespace ve zdrojovém textu
m-rovina
Sémata jsou sdružena ne do morfémů jako ve FGP, ale do slov. Text je rozdělen na jednotlivé věty; gramatické kategorie jsou reprezentovány tagy (morfolog. značkami). Má-li nějaká slovní forma teoreticky několik gramatických kategorií (homonymie tvarů), je už vybraný ten správný. Překlepy jsou už opravené. Každý tvar má přiřazené lemma (slovníkový tvar), tam je taky rozlišená homonymie a přidané poznámky o vytvoření slova, např. "oživení" je z "oživit".
Kořenový element je mdata
, obsahuje sekvenci uměle vytvořených "stromů", které jsou úplně lineární -- kořenový element je s
(věta) a ten obsahuje jako děti jednotlivé nody m
(slova) seřazené za sebou podle pořadí ve větě.
Node <m>
:
id
form
-- odpovídá datům na w-rovině, ale má opravené překlepy; pokud došlo k opravě, je přítomen atributform_change
(s hodnotaminum_normalization
,insert
,spell
,ctcd
(oč -> o co))Pozor, hodnoty form_change jsou v btredu přístupné jako seznam (může jich být víc), pro převod na pole se používá <#btred_--_speci.C3.A1ln.C3.AD_funkce>.
lemma
-- odpovídá dokumentaci PDT, lemma and tag structurevysvětlivky (např. geogr. názvy = G), odlišení významů číslem, údaje o odvození slova
stejně jako tag by mělo asi být vlastní XML struktura, ale je převzaté ze starších formátů
tag
-- odpovídá taktéž dokumentaci PDT15 pozic: slovní druh, sub-sl. druh, rod, číslo, pád, rod vlastníka, číslo vlastníka, osoba, čas, stupeň, negace, pasiv/aktiv, + 3 reserved
Zvláštnosti:
Z reserved pozic se používá poslední, ukládá se spousta věcí (styl slova; 1-7 škála toho, jak moc je slovo používané; 8 zkratka; 9 spec. použití (jeho -> něho apod.)
rod je složitější než 4 std + "any", obs. např. spec. "ženský nebo střední" -- to se týká sloves (např. "řekla" ~ ona = sg.f./pl.n.); není to moc dobrá věc, spíš to zvětšuje uměle úspěšnost taggeru
pády jsou kupodivu rozlišovány všechny, bez spec. kategorií (jdou relativně spolehlivě odhadovat)
rod vlastníka: ženský, životný, neživotný/střední -- čeština nic jiného nerozlišuje
čas: spec. hodnota "přítomný nebo minulý"
členění tagů částečně odpovídá mluvnicím, proto např. "někdo" a "některý" jsou spolu, což se nehodí; kategorií je hodně, ale mělo by jich být ještě víc
w.rf
-- odkaz na w-rovinu
V btredu jsou všechny věci na m-rovině přístupné jen přes field #content
. Tj. je nejdřív nutné získat $this->{"#content"}
a nad ním teprv zjišťovat form, lemma, tag nebo w/token (původní forma slova).
a-rovina
Odkazuje jak na w-rovinu, tak na m-rovinu, obsahuje další metainformace a už skutečné stromy. Atributy se dají dobře najít podíváním se na nějaký libovolný uzel v <#Grafick.C3.A9_rozhran.C3.AD>
Jeden běžný uzel obsahuje:
m.rf
-- odkaz na m-rovinuafun
-- analytická funkcePred
-- predikátPnom
-- přísudek jmenny se sponou ("Otec je velký." -> "velký" dostane Pnom, "je" dostane Pred)AuxV
-- pomocné sloveso ("Bude pršet." -> "pršet" je Pred, "bude" je AuxV)Sb
-- subjektObj
-- objektAtr
-- přívlastekAdv
-- příslovečné určení (libovolného typu)AuxT
-- označení zvratných zájmen, u sloves, která se nemohou vyskytovat bez zvr. slov v daném významu (reflexivum tantum) - např. *smát seAuxR
-- "se" ve zvratném pasívuAuxP
-- předložkaApos
-- apozice (přístavek)ExD
-- A technical value for a deleted item; also for the main element of a sentence without predicateAuxC
-- podřadící spojkaAtv, AtvV
-- doplněk; první se používá v případě vyjádřeného jména, druhá u nevyjádř. (Děvčata tancovala [Atv]bosa. / Přišel [AtvV]bos.)AtrAdv, AdvAtr, AtrObj, ObjAtr
-- "kombinované funkce" - "buď/nebo" - zavádí se určitá vágnost, ale můžou se použít jen tehdy, když význam věci vůbec nezávisí na tom, kterou funkci ve skutečnosti daný člen má. Např. Koupil dům pro [AdvAtr]děti. (slovo může být jak přívlastkem objektu, tak příslovečným určením predikátu).AuxO
-- slova, která nemají žádný význam, jen z rytm. důvodů apod. (To [AuxO]vám takhle jdu po ulici)AuxZ
-- slova zdůrazňovací - zvláště", zejménaAuxY
-- částice, které se vztahují k celé výpovědi (narozdíl od AuxZ)AuxG
-- grafické symbolyAuxK
-- koncová interpunkce větyAuxX
-- čárka
ord
-- pořadí ve větě
Kořen stromu (a-root.type
) je zároveň uzel (role="#NODE"
), ma id a obsahuje s.rf
, odkaz na s
na m-rovině. Má i analytickou funkci (AuxS
) a pořadí ve větě (0
). Nakonec obsahuje seznam dětí. Děti mají podobný typ (a-node.type
), místo odkazu na s
mají odkazy na m
. Navíc mají i hodnoty:
is_member
-- má hodnotu1
pro členy koordinace nebo apoziceis_parenthesis_root
-- má hodnotu1
pro kořeny vsuvek
t-rovina
Obsahuje i nody pro nevyjádřené větné členy, které jsou ve významu přítomné. Koordinovat se (na rozdíl od a-roviny) mohou spolu i různé funktory.
Node:
lex.rf, aux.rf
-- dva různé odkazy do analytické roviny, k plnovýznamovým slovům (0-1(?[TRY])) a pomocným slovům (0-n)Nedá se bohužel poznat, který pomocný uzel z aux.rf ovlivnil který atribut daného uzlu t-roviny
Pozor, v btredu hodnoty v aux.rf jsou v perlovském Listu, na převod do pole se používá funkce <#btred_--_speci.C3.A1ln.C3.AD_funkce>
compl.rf
-- spec. seznam odkazů do t-roviny -- "druhá závislost doplňku" (hlavní závislost je přímo ve stromě, druhá je daná tímto odkazem)Obsahuje něco právě když má můj uzel funktor COMPL
coref_gram.rf, coref_text.rf
-- odkazy do tektoroviny(?) (není seznam), koreference gramatické (vztažná slova) a významové (např. od zájmen k tomu, co označují), může vést i do jiného stromucoref_special.rf</tT> -- speciální případy koreferencí:[[wen:Exophora|Exofora]] (odkaz na prvek mimo text)Odkaz na předchozí segment textu, když není jasné, co přesně se myslífunctor -- funktor na tektorovině, vyjadřuje vztah uzlu k jeho efektivnímu rodiči, u "technických" funktorů i k jiným uzlům: {{TODO|(neúplný seznam, doplnit)}}ACT -- aktant - aktor -- ''Otec''.ACT pracuje.PAT -- aktant - patiens -- Vaří ''oběd''.PATADDR -- aktant - adresát -- Poslal dárek ''příteli''.ADDRORIG -- aktant - origo -- Vyrábí nábytek ''ze dřeva''.ORIGEFF -- aktant - efekt -- Jmenovali ho ''předsedou''.EFFRSTR -- volné doplnění blíže specifikující řídící substantivum -- ''velký''.RSTR důmMEANS -- volné doplnění vyjadřující prostředek --Píše ''perem''.MEANSCOMPL -- volné doplnění - doplněk -- Vrátila se ''unavená''.COMPLRHEM -- atomický výraz - rematizátor (vztahuje se na své sourozence vpravo a na rodiče, stojí-li vlevo od nich)) -- ''Jen''.RHEM Karel odešel.úplný seznam viz [http://ufal.mff.cuni.cz/pdt2.0/doc/manuals/cz/t-layer/html/ch06.html manuál]<tt>tfa
-- kontextová zapojenostdeep_ord
-- pořadí na tektorovině; má i spec. lingv. význam: mám-li děti nějakého uzlu, jsou uspořádány podle výpovědní dynamičnosti (vyšší číslo přináší víc nové informace)gram
-- atribut, obsahující tzv. gramatémy; je strukturován docela složitěaspect -- vid
degcmp -- stupeň adjektiva
deontmod = deonticka modalita ~ "normalni" modalita (moznost, povoleni, chteni, museni)
dismod = dispozicni modalita ~ vyjadruji dispozici ("Hokej se mi hraje dobre.")
gender = rod
indeftype = klasifikace neurčitých zájmen, viz manuál
iterativeness = opakovani deje (sedal -> sedaval)
negation = negace
number = cislo (opravdove, fakticke)
numbertype = radova, druhova apod.
person = osoba
politeness = tykani, vykani
resultative = vyjadruje vysledek deje? ("Mam uvareno.")
sempos = dulezite! semanticky slovni druh - je povinny (jakmile nejaky uzel ma gramatemy, musi byt sempos vyplneny), podle nej urcujeme, ktere gramatemy budou mit smysl. obsahuje to hloubkova podst. jm., prid. jm. apod. ~ deli se na jeste dalsi druhy
tense = cas
verbmod = modus (slovesny zpusob)
is_dsp_root
je koren prime reci? (ten by mel v tomhle atributu 1)To je dulezite pro valenci verb dicendi ~ ty potrebuji na misto PAT to, co clovek rekl; ve chvili, kdy je to vyjadreno primou reci, zmizi tam spojka "rekl, ze" (a my se to takhle dovime)
is_generated
-- ma 1 v pripade, ze neodpovida zadnemu slovu z povrchove vety, ze byl do stromu pridanis_member
-- stejne jako na analyt. rovine: pro členy koordinace nebo apozice má hodnotu 1is_name_of_person
-- 1 pro osobni jmenais_parenthesis
-- 1 pro vsuvku; vyznacujeme kazdy uzel vsuvky zvlast, tj. vsuvka nemusi tvorit souvisly podstrom (jako na analyticke rovine, kde se vyznacuje jen jeji koren)is_state
-- pouzival se pro metaforicke pouziti tj. silny atribut, ktery meni vyznam funktoruNapř.: "Byla v jinem stavu." <- "ve stavu" dostane funkci LOC, ale is_state "1", protoze nejde o primy vyznam funktoru
node_type
-- na tektogramaticke rovine jsou nody typovane:complex = nejcastejsi, slovo vznikle z povrchoveho slova
qcomplex = kvazikomplex, byl pridan, protoze povrchove slovo bylo nevyjadreno (ma proto nekt. atributy nevyplnene)
list = spec. uzly, ktere reprezentuji prvky nejakeho seznamu -- nerozebirame-li napr. vnitrni strukturu dlouheho anglickeho nazvu
fphr = cizí fráze
coap = spec. typ pro koordinace a apozice
atom = napr. rematizatory ~ neurcuji se gram. kategorie; vetsinou nejake castice apod.
quot
-- vsechno, co bylo v textu v uvozovkach, ho musi mit vyplneny; seznam struktur obs. typ (title, citace, metajaz. pouziti, other) a identifikator (u vsech uzlu v jednech uvozovkach stejny)Seznam je to kvuli vice vnorenim (napr. pokud nekdo v citaci pouzije nazev apod.)
sentmod
-- větna modalita ~ tj. tazaci, oznamovaci, rozkazovaci (vyplneno jen u slovesa)enunc = oznamovací
inter = tázací
excl = zvolací
desiderative, imperative {{TODO|(nevím hodnoty, v samples se nevyskytují, někde zjistit?)}}
subfunctor
-- blizsi klasifikace funktoru (nektere funktory byly definovany velmi siroce, rozpadaji se na kategorie)napr. funktor TWHEN (cas) a subfunktor after (po necem); DIR3 (kam) & betw (mezi neco)
basic = zakladni vyznam funktoru
byly prirazeny automaticky skriptem na zaklade predlozek, tj. nemaji az tak vysokou vypovidaci hodnotu (to se stalo kvuli tomu, ze to nikdo moc neumi, nedal se vytvorit popis pro anotatory)
t_lemma
-- tektogramaticke lemma = melo by odpovidat slovnikovemu heslu plnovyznamoveho slova, ale nekdy vypada jinak; muze se skladat i z nekolika slov (napr. "tykajici_se")
XSH
Základní
XSH buď načte skript, který mu zadáme jako argument na příkazové řádce, nebo funguje interaktivně jako shell.
help | less
# nápovědaopen sample9.a.gz
# otevření souboru; otevřením dalšího ztrácím předchozí, pokud si ho neuložím do proměnné$doc := open sample9.a.gz
.cd $doc
# přepínání mezi otevřenými soubory
register-namespace pml <nowiki>http://ufal.mff.cuni.cz/pdt/pml/</nowiki>
# alias na namespace, pozor na lomítko na konci, mění významencoding iso-8859-2
# nastavení kódování výstupu
Navigace
ls namespace:tag
nebols
,ls :d2
# zobrazení souboru -- obsahu podelementu, aktuálního elementu, s nastavenou hloubkou prohledávánínázvy podtagů nutné dávat s namespacem!
argumentem (specif. podtagu) je vlastně výraz v jazyce wen:XPath_1.0, kterým vyberu podelement(y)
XPATH: {{TODO|asi popsat mnohem líp, podle Wikipedie}}
//pml:w
# chci všechny elementyw
v namespace pml, je mi jedno, co je jejich rodičem (díky dvěma lomítkům na začátku).//pml:para/pml:w[1]/pml:token
# chci vidět první slovo z každého odstavce (díky[1]
).//pml:token[text()="."]
# vyberu všechna slova, jejichž text je "." (díky funkcitext()
, vybírající text z nějakého elementu).//pml:token[text()="."]/../following-sibling::*[1]
# najde další token po ".", díky funkcifollowing-sibling()
, která vrací všechny následující sourozence; z nich vybereme toho prvního.//pml:token[text()="."]/../following::*[1]
# najde libovolný další element po tokenu s "."//pml:token[text()="Každý"]/../preceding-sibling::*[1]
# předcházející token před "Každý"//pml:w.rf/text()
//pml:w[last()]
# poslední nad každým nadřízeným uzlem(//pml:w)[last()]
# globálně poslední -- pozor na závorky!//pml:w.rf/text()
# vypíše jen text z tagu.//pml:token
# v cyklu apod. tečka označuje aktuální uzel, sama stojící se musí dávat do závorek
count //pml:s
# spočítá výskyty svého argumentu
Výpisy
print
aecho
slouží pro tiskyecho :n
# nezalamovat řádku
quiet
averbose
zapínají/vypínají hlášky samotného XSHsubstring(.,1,2)
# podřetězec, začíná se od jedničkysubstring-after(../pml:w.rf,"#")
# podřetězec od nějakého podřetězce dál (tady od "#")lc(../pml:lemma,1,1))
# lowercase (?)
Cyklus
for //pml:w.rf/text() ls substring-after(.,"#")
# implicitní proměnná "." (tento uzel)for //pml:w.rf/text(){ $dot = . ; ls $w//pml:w[@id=substring-after($dot,"#")] ; }
# uložení proměnné, hledání cílů referencí v jiném souboru ($w
je otevřený soubor)for { glob("sample?.w.gz") }{ open(.); ... }
# otevření všech souborůsample?.w.gz
, nějaká další práce s nimi
Hash
Hash v XSH jde vytvořit, ale ne už upravovat.
$h := hash @id //pml:w
# vytvoření hashe, první hodnota jsou klíče, druhá hodnotyxsh:lookup('h', .)
# hledání v hashi, druhý argument je žádaná hodnota klíče
Redirecty
Výstup každého příkazu se dá přes pipe nebo redirect do souboru někam poslat.
[příkaz] | sort | uniq -c | sort -n
# setřídění počtu výsledků[příkaz] | grep -B1 text
# výběr výsledků
TrEd
TrEd -- grafické rozhraní, btred a ntred -- command-line, dávkové zpracování perlovitých skriptů.
Grafické rozhraní
Dá se otevřít víc souborů, pak můžu hledat ve všech.
Enter/doubleclick
-- zobrazení informací o nodeF3
-- jednoduché hledání podle parametrůCtrl-Shift-A
aCtrl-Shift-T
-- přepínání z tektogramatické roviny na analytickou a zpátkyJ
-- skákání po koreferencích (gramatické koreference = oranžová šipka)Ctrl-Enter
na node na t-rovině -- náhled do valenčního slovníkuShift-F3
-- spusteni Tree QueryShift-H
-- zobrazeni hidden uzlů v query
Zobrazení TFA na t-rovině: bílé uzly jsou kontextově zapojené, žluté nezapojené a zelené kontrastivně zapojené. Na t-rovině se generované uzly zobrazují jako hranaté.
Tree Query
V novější verzi TrEdu je možné použít auomaticky prevod z PML do SQL. Databaze jsou potom rychlejsi pro praci -- vetsina SQL dotazu trva hodne malo.
problemy ale se stromovou strukturou v databazi -- zavislosti reseny spec. cisly uzlu
(l,r)
, platí: , kdeD
jsou potomci.nasledujici stromy jsou ohodnoceny ruznymi cisly, tj. mame unique-id uzlu a jeste muzeme urcit, co je ci potomek
pocty deti: pro kazdy uzel se uklada zvlast, aby se zrychlily dotazy (bez toho bychom museli projit tabulku uplne celou)
ef. deti jsou taky ulozeny zvlast
K SQL hledani pak v TrEdu slouží speciální interface -- Tree Queries: dotaz se dá naklikat, ale zapisuje se i ve spec. dotazovacim jazyce, ktery se pak preklada na SQL dotaz (k tomu je i interpret z prikazove radky, ktery se da pouzivat k vyhledavani misto btredu).
Spuštění Tree-Query: Shift-F3.
Zadne 2 uzly, ktere jsou v klikatku dotazu nakreslene, se nedaji stotoznit.
Cely SQL-like interface funguje i bez nainstalovane databaze -- staci si otevrit nekolik souboru najednou a muzu nad nimi delat dotazy. Dotaz se preklada do TrEdu (Perlu), ale vypada to uplne jinak nez nase kody, pouzivaji se tzv. iteratory. Zatim pritom jeste nefunguje deleni oken vyhledu a zobrazovani vice rovin.
btred a ntred
btred je proti XSH mnohem pomalejší, protože na rozdíl od něj parsuje schéma PML souboru (XSH se k souboru chová, jako by to bylo obyčejné XML). Zrychlení se dá dosáhnout pomocí ntredu, který funguje jako server, čeká na požadavky ze sítě. Spuštění:
ntred -i --local sample?.a.gz
# spuštěníntred --quit
# vypnutí
btred -- parametry
-e
-- parametr evaluace, tj. to, co bude počítat; zbylé parametry vstupní soubory-T
-- pro všechny stromy udělej-N
-- pro všechny uzly daného stromu udělej-I skript.btred
-- spuštění skriptu ("include")-Q
-- quiet-d iso-8859-2
-- jine kódování výstupu
Do skriptu se na první řádek vloží:
#!btred -N -T -e 'moje_hlavni_funkce()'
btred -- Perl
{{TODO|vysvětlit funkce}}
join
map
grep
substr
//
btred -- základní
Odkaz na aktuální nody je řešen spec. proměnnými:
$this
-- "tento uzel" (při provádění pro každý uzel)$root
-- odkaz na kořen aktuálního stromu
Každý node bývá hash/perlovský objekt, nestrukturované věci jsou v něm uloženy přímo jako hodnoty:
$this->{afun}
Pozor na atributy, které mají pochybné názvy, nutné je dát do uvozovek:
$this->{"compl.rf"}
Strukturované atributy mají problém tom, že cestou by vznikaly klíče s undef, takže se na ně používá spec. funkce:
$this->attr("m/tag")
# místo$this->{m}{tag}
z analytické rovinyDá se používat i přímo odkazů do pole, např.
$this->attr("a/aux.rf[1]")
, prvky jsou počítány od 1.
Každý node má funkce pro navigaci:
$this->parent()
- rodič tohoto uzlu$this->following()
- vrací následující uzel při průchodu do hloubky (nebo undef na konci stromu)$this->children()
- vrací seznam dětí uzlu$this->rbrother()
a$this->lbrother()
-- pravý, levý bratr uzlu$this->descendants()
- vrací všechny potomky daného uzlu
Stromy se dají i upravovat, tj. pozor, ať si neničíme data!
$this->cut()
# vyřízne node ze stromu
btred -- speciální funkce
writeln("string")
# spec.funkce btredu, vypsání a odřádkováníFPosition($node)
# vypsání pozice nodu v souboru, dá se potom použít jako vstup pro TrEd:btred -I skript.btred | tred -l -
# pro skript, který generuje zajímavé pozice a TrEd, který je pak zobrazuje
NPosition($node)
# je podobná, ale znamená pro grafický TrEd vyslání dotazu na ntredListV()
# převádí list (perlovský objekt FSlib::List) na normální poleAltV
# převádí "alternative" (perlovský objekt FSlib::Alt) na pole hodnot
PML, PML_A a PML_T
Nejpodstatnější funkce ::
PML::GetNodeByID($id)
# vrací přímo node na základě jeho id, tj. dereferencePML_A::GetCoordMembers($node, $no_recurse)
# pro node, který má afun rovnou Apos nebo Coord vrací seznam členů příslušné koordinace nebo apozice.PML_A::GetEParents($node, \&DiveAuxCP)
# získání efektivních rodičů (bez koordinací apod.); nedá se volat na uzlech, u kterých není otázka po ef. rodičích relevantní, tj. na přímo členech nějaké koordinace; předložkách apod.Některé věci mají víc než jednoho rodiče (závisí na víc jiných věcech), proto vrací pole.
PML_A::GetEChildren($node, \&DiveAuxCP)
# totéž pro efektivní dětiPML_T::GetANodeByID(id/ref)
# vrací analytický uzel, na který vede daný odkazPML_T::IsCoord($node)
# vrací 1, pokud je daný node koordinací (podle funktoru)
Odkazy na celou dokumentaci jsou <#TrEd>.
Category:Matematická%20lingvistika