README
This commit is contained in:
145
README.md
Normal file
145
README.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user