v0.4.1, 2024-06-12
alto - ALpino TOolkit
alto (optie | actie | bestand) ...
alto is een toolkit voor het werken met Alpino dependency structures, kortweg Alpino-bestanden. Je kunt losse bestanden samenvoegen tot een corpus, je kunt een corpus omzetten naar een ander soort corpus, je kunt zoeken, transformeren, visualiseren, etc.
-e expression : show macro-expansion, and exit
-f : overwrite existing files
-i : read input filenames from stdin
-m filename : use this macrofile for xpath (or use environment variable ALTO_MACROFILE)
-n : mark matching node
-o filename : output
-r : replace xml in existing dact file
-v name=value : set global variable (can be used multiple times)
-1 : use XPath version 1 for searching in DACT files
-2 : use XPath2 and XSLT2 (slow)
-2p : use XPath2 (slow)
-2s : use XSLT2 (slow)
-w : suppress warnings
ds:ud : insert Universal Dependencies
ds:noud : remove Universal Dependencies
ds:extra : add extra attributes: is_np, is_vorfeld, is_nachfeld
ds:minimal : removes all but essential entities and attributes
fp:expression : filter by XPath expression
tq:xqueryfile : transform with XQuery xqueryfile
ts:stylefile : transform with XSLT stylefile
tt:template : transform with template
Tq:xqueryfile : like tq, match data as input
Ts:stylefile : like ts, match data as input
ac:item : item count
ac:line : line count
ac:node : count of cat, pos, postag, rel
ac:word : count of lemma, root, sense, word
ac:nw : combination of ac:node and ac:word
vt:type : save tree as image, type is one of: dot, svg, png, eps, pdf
vm:type : save subtree as image
vu:type : save Universal Dependencies as image, type is one of svg, png, eps, pdf
vx:type : save Extended Universal Dependencies as image
De argumenten voor alto bestaan uit opties, acties en bestandsnamen. Je kunt deze door elkaar gebruiken. Acties worden uitgevoerd in de volgorde waarin ze zijn gegeven. Bestanden worden verwerkt in de volgorde waarin ze zijn gegeven.
De verwerking verloopt zo:
( input1, input2, ... ) -> actie1 -> actie2 -> ... -> output
Namen van opties beginnen met een minus. Namen van acties beginnen met twee letters en een dubbele punt.
alto -o output.dact *.xml : Plaats alle XML-bestanden *.xml in het DACT-bestand output.dact. Wanneer de optie -o ontbreekt gaat de uitvoer naar stdout.
alto input.dact -o output.data.dz : Zet DACT-bestand input.dact om naar een compact corpus.
alto input1.data.dz input2.data.dz -o output.dact : Voeg meerdere compacte corpora samen in één DACT-bestand.
find . -name '*.xml' | alto -i -o output.zip : Met optie -i lees je namen van invoerbestanden van stdin, één naam per regel.
alto -o corpus.dact file.xml -r : Gewoonlijk worden geen bestanden overschreven. Het is wel mogelijk om een XML-bestand in een bestaand DACT-bestand te vervangen of toe te voegen. Hiervoor moet je de optie -r gebruiken.
Geldige namen voor invoer:
*.xml : los XML-bestand met één geparste zin
*.dact (of *.dbxml) : een DACT-bestand is een snel doorzoekbare collectie van XML-bestanden
*.data.dz (of *.index) : een compact corpus is een gecomprimeerde verzameling XML-bestanden
*.zip : een verzameling XML-bestanden in een ZIP-bestand
naam van een map : een directory met daarin losse XML-bestanden en/of DACT-bestanden, compacte corpora, ZIP-bestanden, of subdirectory's
Je kunt ook één of meer xml-bestanden uit een corpusbestand (DACT, compact, ZIP) selecteren als invoer:
input.dact::file1.xml::file2.xml::file3.xml
Geldige namen voor uitvoer:
*.dact (of *.dbxml) : als de uitvoer bestaat uit XML-bestanden kun je die opslaan in één DACT-bestand
*.data.dz (of *.index) : een compact corpus is bedoeld voor het opslaan van XML-bestanden van geparste zinnen, maar je kunt er ook andere bestanden in opslaan
*.zip : voor het opslaan van bestanden in één ZIP-bestand
*.txt : alle uitvoer wordt samengevoegd en opgeslagen in één doorlopend tekstbestand
naam van een map : de verwerking van elk individueel XML-bestand wordt als los bestand opgeslagen in de directory
alto input.dact -o output.dact ds:ud : Voeg Universal Dependencies toe.
alto input.dact -o output.dact ds:noud : Verwijder Universal Dependencies.
alto input.dact -o output.dact ds:extra : Voeg extra attributen toe: is_np, is_vorfeld, is_nachfeld.
alto input.dact -o output.dact ds:minimal : Verwijder entity's en attributen tot alleen dat overblijft wat door de minimale Alpino-plugin voor TrEd wordt gebruikt. Zie: https://www.let.rug.nl/vannoord/alp/Alpino/tred/
alto input.dact -o output.dact fp:'//node[@root="fiets"]' : Maak een subcorpus met alleen de XML-bestanden die een match hebben voor de XPATH-expressie //node[@root="fiets"].
alto input.dact fp:'//node[@root="fiets"]' tt:%f : Doorzoek een corpus en print de uitvoer op stdout. De transformatie tt:%f zorgt ervoor dat niet de inhoud van het XML-bestand geprint wordt, maar de naam van het XML-bestand.
alto input.dact fp:'//node[%my_macro%]' tt:%f -m macrofile : Zoek met gebruik van een macro. De macro my_macro is gedefinieerd in macrofile. Je kunt ook de environment variabele ALTO_MACROFILE gebruiken om naar het macrobestand te wijzen. De optie -m heeft voorrang. : Voor de syntax van het macrobestand, zie: https://rug-compling.github.io/dact/manual/#macros
alto -e '//node[%my_macro%]' -m macrofile : Dit laat de XPath-expressie zien na substitie van macro's. Gebruik dit om te testen.
Je kunt de actie fp: meerdere keren gebruiken, eerst met een simpele expressie om het zoeken te beperken tot een klein aantal XML-bestanden in het corpus, daarna een tweede, mogelijk tijdrovende expressie voor het eindresultaat.
Een aantal opties beïnvloeden het zoeken en filteren:
-m filename : Lees definities van macro's uit bestand filename.
-n : Plaats een speciale markering op de nodes die matchen. Deze markering kan in een later stadium gebruik worden voor een transformatie. Zo'n markering ziet er zo uit: : <node...><data name="match"/>...</node>
-1 : Als default wordt bij het zoeken in een DACT-bestand door het eerste filter gebruik gemaakt van XPATH versie 2. Dit is gewoonlijk het snelst, maar niet altijd correct. Met de optie -1 zorg je ervoor dat eerst alle bestanden uit het DACT-bestand worden gelezen, en daarna gefilterd met XPATH versie 1.
-2p : Als default wordt XPATH versie 1 gebruikt wanneer er niet rechtstreeks in een DACT-bestand wordt gezocht. Met deze optie zorg je ervoor dat altijd XPATH versie 2 gebruikt wordt. Dit is aanzienlijk trager dan zoeken met versie 1.
-2 : Dit combineert de opties -2p en -2s (zie beneden).
Zoeken met XPATH versie 1 gebeurt door libxml2. Zoeken met XPATH versie 2 gebeurt door XQilla. Deze library is veel langzamer dan libxml2. Daarom is de default om XPATH 1 te gebruiken, tenzij je zoekt in een DACT-bestand.
Het lezen van een DACT-bestand gebeurt met weer een andere library, DbXML. Die library kan een DACT- bestand niet alleen openen, maar tegelijk ook doorzoeken met XPATH. Wanneer er weinig XML-bestanden in het DACT-bestand zitten die voldoen aan de XPATH-expressie, dan kan DbXML gewoonlijk heel snel de kanshebbers localiseren, en alleen die testen. Voor het testen gebruikt DbXML op zijn beurt XQilla, maar door de voorselectie kan dit vaak veel sneller dan alles doorzoeken met libxml2.
Voorbeelden met DACT-bestand:
alto corpus.dact fp:'expressieA' fp:'expressieB' : Zoeken met DbXML naar expressieA, XPATH versie 2. : Resultaat doorzoeken met libxml2 naar expressieB, XPATH versie 1.
alto corpus.dact fp:'expressieA' fp:'expressieB' -1 : Zoeken met libxml naar expressieA, XPATH versie 1. : Resultaat doorzoeken met libxml2 naar expressieB, XPATH versie 1.
alto corpus.dact fp:'expressieA' fp:'expressieB' -2 : Zoeken met DbXML naar expressieA, XPATH versie 2. : Resultaat doorzoeken met XQilla naar expressieB, XPATH versie 2.
Voorbeelden met ander bestand:
alto corpus.zip fp:'expressieA' fp:'expressieB' : Zoeken met libxml naar expressieA, XPATH versie 1. : Resultaat doorzoeken met libxml2 naar expressieB, XPATH versie 1.
alto corpus.zip fp:'expressieA' fp:'expressieB' -2 : Zoeken met XQilla naar expressieA, XPATH versie 2. : Resultaat doorzoeken met XQilla naar expressieB, XPATH versie 2.
alto input.xml tq:style.xq : Transformeer de invoer (in dit geval een enkel XML-bestand) met XQuery dmv het script style.xq.
alto input.xml ts:style.xsl : Transformeer de invoer met XSLT dmv het stylesheet style.xsl.
alto input.dact fp:'//node[@root="fiets"]' Tq:style.xq : Transformeer de gematchte subtree met XQuery dmv het script style.xq.
alto input.dact fp:'//node[@root="fiets"]' Ts:style.xsl : Transformeer de gematchte subtree met XSLT dmv het stylesheet style.xsl.
Een aantal opties beïnvloeden de transformatie:
-n : Zie boven, onder kopje Zoeken en filteren.
-v name=value : Definieer de globale variabele name met de waarde value. Je kunt deze optie meerdere keren gebruiken. De variabelen filename en corpusname worden automatisch gezet.
-2s : Gebruik XSLT versie 2. Default is versie 1. Versie 2 is aanzienlijk trager.
-2 : Dit combineert de opties -2s en -2p (zie boven).
alto input.dact fp:'//node[node[@root="fiets"]]' tt:'%f\t%S\n%M\n' : Voor elke match voor de XPATH-expressie, print de bestandnaam, de zin met het matchende deel gemarkeerd, en daaronder de dependency structure van de match.
De volgende vlaggen kun je altijd gebruiken:
\t : Tab.
\n : Newline.
%% : Het procent-teken.
%c : De naam van het corpus.
%f : De naam van het XML-bestand.
%F : Als de invoer een DACT-bestand is, een compact corpus, of een ZIP-bestand, dan gelijk aan %c::%f, anders gelijk aan %f.
%b : De inhoud van het XML-bestand.
%I : De sentence-ID.
%s : De zin.
%o : Alle comments, gescheiden door \n\t.
%d : De metadata.
%u : De Universal Dependencies. Wanneer de input al UD bevatten worden die gebruikt, anders worden ze berekend. Het gebruik van alleen tt:%u is sneller dan de combinatie ds:ud tt:%u.
De volgende vlaggen kun je gebruiken na zoeken met XPATH. Wanneer er meerdere machtes zijn in hetzelfde XML-bestand, dan worden de resultaten apart getoond, behalve voor de vlag %j.
%i : ID van de matchende node.
%j : IDs van alle machtende nodes, gescheiden door een spatie.
%S : De zin met de woorden onder de matchende node gekleurd.
%m : De gematchte subtree als XML-fragment.
%M : De gematche subtree als een dependency structure.
%w : De woorden onder de matchende node.
%l : De lemma's onder de matchende node.
%p
: De waardes van pt
van de woorden onder de matchende node.
%P
: De waardes van postag
van de woorden onder de matchende node.
Je kunt in een vlag een getal zetten om aan te geven hoe breed de uitvoer moet zijn. Met een minus ervoor wordt de tekst links uitgelijnd, zonder minus rechts. Een voorbeeld:
tt:'%-14f %8I'
alto corpus.dact fp:'//node[@pt="vnw"]/@lemma' ac:item : Met ac:item tel je varianten. Dit voorbeeld telt alle lemma's die een voornaamwoord zijn.
Bovenstaand voorbeeld telt elke match, en elke match bestaat uit één regel. Bij de volgende voorbeelden gebruiken we een transformatie met XQuery uit het bestand mwu.xq met deze inhoud:
for $x in //node[@cat='mwu']
return fn:concat(fn:string-join($x//node[@word]/@word, ' '), ' ')
alto corpus.dact fp:'//node[@cat="mwu"]' tq:mwu.xq : Dit geeft een lijst met alle multi-word units in het corpus. Sommige XML-bestanden bevatten meerdere multi-word units, en die worden onder elkaar weergegeven. In dit voorbeeld valt dat niet op.
alto _corpus.dact fp:\fI'//node[@cat="mwu"]'_ tq:mwu.xq ac:item : Wanneer je gaat tellen zul je zien dat sommige items uit meerdere regels bestaan, en ook die items worden als geheel geteld.
alto _corpus.dact fp:\fI'//node[@cat="mwu"]'_ tq:mwu.xq ac:line : Als je telt met ac:line dan wordt elk item gesplitst in regels, en de regels worden apart geteld. Dat is wat je in dit voorbeeld waarschijnlijk wilt.
alto corpus.dact fp:'//node[@root="fiets"]' ac:node : Met ac:node tel je de volgende attributen van de matchende node: cat, pos, postag, rel
alto corpus.dact fp:'//node[@root="fiets"]' ac:word : Met ac:word tel je de volgende attributen van de matchende node: lemma, root, sense, word
alto corpus.dact fp:'//node[@root="fiets"]' ac:nw : ac:nw combineert ac:node en ac:word.
alto -n corpus.dact fp:'//node[@root="fiets"]' vt:png -o output : Met de actie vt:png maak je een PNG-afbeelding van de boom van de zin. In dit voorbeeld doe je dit alleen voor de zinnen die voldoen aan de XPATH-expressie, en de optie -n zorgt ervoor dat de matchende nodes in de boom een kleur krijgen. In dit voorbeeld worden alle PNG-afbeeldingen opgeslagen in de directory output. Behalve png kun je ook deze uitvoerformaten kiezen: dot, svg, eps, pdf.
alto corpus.dact fp:'//node[@root="fiets"]' vm:png -o output : Met de actie vm:png doe je bijna hetzelfde als met vt:png, naar nu sla je alleen de subboom op van de matchende node. De optie -n heeft geen effect.
alto corpus.dact vu:png -o output : Met vu:png maak je een PNG-afbeelding van de Universal Dependencies. Bevat de invoer al UD, dan worden die gebruikt, anders worden ze alsnog afgeleid. Bestanden waarvoor het afleiden van UD mislukt worden overgeslagen. Behalve png kun je ook deze uitvoerformaten kiezen: svg, eps, pdf.
alto corpus.dact vx:png -o output : Met vx:png maak je PNG-afbeeldingen van de Extended Universal Dependencies. Verder is dit voorbeeld gelijk aan het vorige.
ALTO_MACROFILE : Bevat de naam van het bestand met macrodefinities. Genegeerd als de optie -m gebruikt wordt. : Voor het gebruik van macro's, zie: https://rug-compling.github.io/dact/manual/#macros
TEMP : Naam van directory waar alto tijdelijke bestanden opslaat.
TMP : Wordt gebruikt in plaats van TEMP als die variabele leeg is.
Peter Kleiweg