mkdir -p ~/opt cd ~/opt git clone --depth=1 github:rug-compling/Alpino.git export ALPINO_HOME=$HOME/opt/Alpino export LD_LIBRARY_PATH=$ALPINO_HOME/TreebankTools/IndexedCorpus export SP_CSETLEN=212 export SP_CTYPE=utf8 cd Alpino # oud: module load Go Tk/8.6.12-GCCcore-11.3.0 Boost/1.79.0-GCC-11.3.0 Python/2.7.18-GCCcore-11.3.0-bare module load Go Tk/8.6.12-GCCcore-11.3.0 Boost/1.79.0-GCC-11.3.0 Python/3.10.4-GCCcore-11.3.0 # niet langer nodig: #LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/cvmfs/hpc.rug.nl/versions/2023.01/rocky8/x86_64/amd/zen3/software/GCCcore/11.3.0/lib64 make make install
Ergens wordt env.sh gesourced, dat ervan uitgaat dat bin/Alpino al
bestaat. Dit is een bug.
Alpino draaien:
export ALPINO_HOME=$HOME/opt/Alpino PATH=$ALPINO_HOME/bin:$PATH module load Tk/8.6.12-GCCcore-11.3.0 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/cvmfs/hpc.rug.nl/versions/2023.01/rocky8/x86_64/amd/zen3/software/GCCcore/11.3.0/lib64 Alpino
Voorbeeld met LassyLarge/WR-P-P-G
Op habrok:
mkdir /scratch/$USER/SUITES
Op colossus:
cd /net/corpora/LassyLarge/WR-P-P-G/SUITES scp *sents* habrok:/scratch/$USER/SUITES
Op habrok:
# voor corpora met meer dan 5000 zinnen per set cd /scratch/$USER/SUITES gunzip *.gz for i in *.sents; do j=`basename $i .sents`; split --additional-suffix=.sents -l 5000 -a 1 $i $j; rm -f $i; done gzip *.sents cd $ALPINO_HOME/Suites ln -s /scratch/$USER/SUITES Machine cd $ALPINO_HOME/Treebank/Machine make jobs PATTERN=WR-P-P-G ENHANCE=LL,UD
Let op het laatste argument voor make jobs. Met ENHANCE=LL,UD
geef je aan dat er metadata moet worden toegevoegd behorend bij het
corpus Lassy Large (LL), en dat er Universal Dependencies (UD) moeten
worden ingevoegd.
Die metadata is gedefinieerd in
$ALPINO_HOME/TreebankTools/enhance/enhance.go. Hieraan kunnen
definities voor andere corpora worden toegevoegd, met een extra map
sourcesXX en een extra case regel in het switch statement.
Code: misplacedheads-in.go
Nodes met een index, nodes die eigenlijk op meerdere plaatsen in de boom horen, maar op maar één plaats worden weergegeven. De vraag is, wat is de natuurlijke plaats van deze node?
Elke pijl staat voor een pad van lengte 1 of langer, tenzij anders aangegeven:
Er zijn verschillende situaties mogelijk.
a, b en c zijn relevant. Het maakt uit of je de onderste node aan
de bovenste node hangt via het linker of het rechter pad, omdat je
wilt weten of de onderste node links of rechts van de middelste
node hoort.d, e en f, waar zich niks bevindt tussen linker en
rechter pad is het de vraag of het relevant is. Het hangt vooral
af van de lengte van de paden. Situatie d komt vaak voor, en dan
lijken beide plaatsen in de boom even goed. Komt situatie e ook
voor? Bij situatie f is het voorstelbaar dat de keus voor links of
rechts wel uitmaakt.g, ongeacht of er wel of geen nodes zitten tussen de
paden in de onderste helft, doet de bovenste helft er niet toe. Dit is
van belang als je type categorie en relatie in beschouwing neemt om
de gevallen die gefixt moeten worden te beperken. Als je
bijvoorbeeld alleen kijkt naar heads van een conjunctie, dan is het
voor de onderste node alleen relevant of de middelste node de
categorie conj heeft.De kwestie van misplaced heads in conjunction, speelt dat ook in andere situaties, waarin het niet om een conjunctie gaat, of niet om heads?
Ook in AlpinoGraph kun je aan een node met meerdere parents niet zien
wat de natuurlijke positie van die node in de zin is. Maar hier is het
deel van een groter probleem. Je kunt aan de dochters van een node
ook niet eenvoudig zien in welke volgorde die horen, van links naar
rechts, zoals dat in Alpino wel makkelijk is te zien, omdat elke
dochter een positie heeft. In AlpinoGraph kun je de volgorde alleen
achterhalen door te sorteren op id van de dochters. Dat maakt zoeken
erg lastig.
Hoe kan de situatie in AlpinoGraph verbeterd worden? Je zou de relaties kunnen nummeren, voor elke node de relaties naar de dochters nummeren vanaf 1, en de laatste relatie een extra attribuut om aan te geven dat het de meest rechtse is.
Los je hiermee een reëel probleem op?