Verzamelen van nieuwsberichten
Bronnen: verzamelen
Elke directory waarvan de naam met een hoofdletter begint is voor een enkele nieuwsbron.
De onverwerkte berichten worden opgeslagen in een subdirectory jaar/maand/dag voor NieuwsNL en in subdirectory jaar/weeknummer voor de overige bronnen.
Het formaat van de data verschilt per bron. Soms is er voor elk bericht
alleen een XML-bestand (*.xml), een fragment afkomstig uit de
RSS-feed, waar heel de tekst en alle gegevens al in staan. Wanneer de
RSS-feed niet de complete tekst bevat, dan worden de HTML-pagina's van
nieuwe berichten gedownload, en wordt daar de tekst uit gehaald. Dan
krijg je bestanden zoals *.json en/of *.txt.
Als er fouten bij het verzamelen zijn dan zijn er bestanden op *.err
en mogelijk *.html.
Gewoonlijk als er iets mis gaat probeert de software een uur later
dezelfde berichten weer te verwerken. Om dat te voorkomen kunnen
bestanden handmatig hernoemd worden van *.err naar *.skip. Voor
berichten van een type waarvan bekend is dat ze geen tekst bevatten
worden automatisch bestanden op *.skip gemaakt.
Verwerking
Elke dag voor NieuwsNL en alleen op dinsdag voor de overige bronnen worden de teksten verwerkt. De teksten worden omgezet naar getokeniseerde zinnen met labels, door Alpino geparst, en voorzien van metadata.
Dit gebeurt door de scripts txt2corpus.sh van elke bron. De scripts
variëren per bron omdat het formaat waarin de teksten aanwezig zijn
verschillen per bron.
De resultaten staan in de subdirectory's corpus van elke bron.
Analyse
Op woensdag worden de geparste zinnen van de afgelopen week geanalyseerd. (De data voor NieuwsNL worden hierbij samengevoegd in één week.) Er worden queries uitgevoerd, tellingen gedaan, ranglijsten gemaakt. Voor sommige queries wordt een top 20 samengesteld van meest voorkomende items die nog niet eerder in de top 20 stonden.
Voor de analyse worden bronnen samengevoegd in onderdelen: algemeen,
amsterdam, groningen, literatuur, vlaanderen. De resultaten worden
bij elkaar opgeslagen in directory data.
Uit de analyse worden de data gehaald die nodig zijn voor de
webapp, en opgeslagen als json, in subdirectory data/json.
Dit alles gebeurt door het script collect.sh
Je kunt de analyse ook handmatig doen, met het script query.sh
Uitvoering
Alles gebeurt vanuit cron. Foutmeldingen en waarschuwingen worden per mail verstuurd door cron.
crontab van p209327@colossus
Is /net/corpora schrijfbaar?
# m h dom mon dow command
2 * * * * /net/aistaff/kleiweg/services/nfs/test.sh
Berichten verzamelen
# m h dom mon dow command
3 * * * * /net/corpora/nlnieuws/AT5/at5
4 * * * * /net/corpora/nlnieuws/BuurtAdam/buurtadam
5 * * * * /net/corpora/nlnieuws/BuurtGrn/buurtgrn
6 * * * * /net/corpora/nlnieuws/GG/gg
7 * * * * /net/corpora/nlnieuws/HLN/hln
8 * * * * /net/corpora/nlnieuws/LitNL/litnl
9 * * * * /net/corpora/nlnieuws/NieuwsNL/nieuwsnl
10 * * * * /net/corpora/nlnieuws/NOS/nos
11 * * * * /net/corpora/nlnieuws/NU/nu
12 * * * * /net/corpora/nlnieuws/Oog/oog
13 * * * * /net/corpora/nlnieuws/Parool/parool
14 * * * * /net/corpora/nlnieuws/RO/ro
15 * * * * /net/corpora/nlnieuws/RTVNoord/rtvnoord
16 * * * * /net/corpora/nlnieuws/Sargasso/sargasso
17 * * * * /net/corpora/nlnieuws/Sikkom/sikkom
18 * * * * /net/corpora/nlnieuws/Tzum/tzum
19 * * * * /net/corpora/nlnieuws/VRT/vrt
Nieuws verwerken: tekst omzetten naar zinnen, parsen, metadata toevoegen
NieuwsNL elke dag, overigen alleen op dinsdag
# m h dom mon dow command
0 1 * * 2 /net/corpora/nlnieuws/AT5/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/BuurtAdam/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/BuurtGrn/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/GG/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/HLN/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/LitNL/txt2corpus.sh
0 1 * * * /net/corpora/nlnieuws/NieuwsNL/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/NOS/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/NU/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/Oog/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/Parool/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/RO/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/RTVNoord/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/Sargasso/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/Sikkom/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/Tzum/txt2corpus.sh
0 1 * * 2 /net/corpora/nlnieuws/VRT/txt2corpus.sh
Ging alles goed: zo niet, dan kunnen er nog lockfile zijn
# m h dom mon dow command
50 0 * * * find /net/corpora/nlnieuws -name lock
Op woensdag alles verzamelen: queries uitvoeren, data die nodig is voor webapp omzetten naar json
# m h dom mon dow command
0 1 * * 3 /net/corpora/nlnieuws/collect.sh
crontab van f109308@colossus
Json-bestanden voor de webapp overzetten naar het webplatform
# m h dom mon dow command
30 0-23/4 * * * rsync -e 'ssh -F /net/aistaff/alfa/.ssh/config' -a --no-g /net/corpora/nlnieuws/data/json/ webalfa:/home/www/f109308/site/wvdm/data