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
|
||||
```
|
||||
@@ -15,7 +15,7 @@ gebruik:
|
||||
1 : nieuwe namen
|
||||
2 : nieuwe woorden
|
||||
3 : nieuwe woorden met postag en lemma
|
||||
4 : bestaaande locaties
|
||||
4 : bestaande locaties
|
||||
5 : bestaande personen
|
||||
6 : bestaande organisaties
|
||||
7 : bestaande andere namen
|
||||
@@ -1,232 +0,0 @@
|
||||
Vragen:
|
||||
|
||||
- hoe data range selecteren (bv alles van maart 2026)
|
||||
|
||||
- website met lijstjes top-N (20?)
|
||||
- nieuwe namen
|
||||
- wel of niet onderverdelen naar categorie?
|
||||
- nieuwe woorden
|
||||
- met postag
|
||||
- bestaande namen
|
||||
- personen
|
||||
- plaatsen
|
||||
- organisaties
|
||||
- misc
|
||||
|
||||
- queries worden nog beetje aangepast denk ik
|
||||
|
||||
"nieuw": nu: niet in Alpino, later (ook): niet in top-N van vorige maand.
|
||||
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[((@cat="mwu" and node[@pt="spec"]) or (@pt and @*="eigen" and not(@rel="mwp"))) and not(@his="normal") and not(@his_1="decap" or @his_1="0")]' tt:%w |sort | uniq -c |sort -nr | head -n 20
|
||||
|
||||
"nieuwe namen"
|
||||
|
||||
445 Straat van Hormuz
|
||||
433 Jetten
|
||||
309 AI
|
||||
301 Høiby
|
||||
250 Odido
|
||||
190 Zelensky
|
||||
174 Rob Jetten
|
||||
153 VRT NWS
|
||||
134 Jeffrey Epstein
|
||||
130 Anthropic
|
||||
125 Schulting
|
||||
115 GroenLinks-PvdA
|
||||
109 TikTok
|
||||
106 Xandra Velzeboer
|
||||
106 Kyiv
|
||||
106 JA21
|
||||
104 Starmer
|
||||
98 Marius Borg Høiby
|
||||
95 Revolutionaire Garde
|
||||
94 Jens van 't Wout
|
||||
|
||||
|
||||
"nieuwe woorden":
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[@his and not(@rel="mwp" or @cat="mwu") and not(@his="normal" or @his="name" or @his="prefix_name" or @his_1="decap" or @his_1="0" or @his="skip" or @his="robust_skip" or @his="w_dia" or @his="wo_dia" or @his="within_word_conjunct")]' tt:%w |sort | uniq -c |sort -nr |head -n 20
|
||||
|
||||
150 Trump-regering
|
||||
141 coalitieakkoord
|
||||
126 zeestraat
|
||||
122 Golfregio
|
||||
107 massastart
|
||||
96 Amerikaans-Israëlische
|
||||
92 ballistische
|
||||
90 datalek
|
||||
85 kabinet-Jetten
|
||||
82 lng
|
||||
74 droneaanval
|
||||
68 vergeldingsaanvallen
|
||||
61 tussenronde
|
||||
59 Iranoorlog
|
||||
58 vrijgave
|
||||
56 speelzand
|
||||
55 regering-Trump
|
||||
54 sprintrace
|
||||
54 ploegenachtervolging
|
||||
|
||||
liever met postag en lemma erbij:
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[@his and not(@rel="mwp" or @cat="mwu") and not(@his="normal" or @his="name" or @his="prefix_name" or @his_1="decap" or @his_1="0" or @his="skip" or @his="robust_skip" or @his="w_dia" or @his="wo_dia" or @his="within_word_conjunct")]' tt:"%w \t %l \t %P" |sort | uniq -c |sort -nr |head -n 20
|
||||
|
||||
150 Trump-regering Trump_regering N(soort,ev,basis,zijd,stan)
|
||||
141 coalitieakkoord coalitie_akkoord N(soort,ev,basis,onz,stan)
|
||||
126 zeestraat zee_straat N(soort,ev,basis,zijd,stan)
|
||||
121 Golfregio Golf_regio N(soort,ev,basis,zijd,stan)
|
||||
107 massastart massa_start N(soort,ev,basis,zijd,stan)
|
||||
96 Amerikaans-Israëlische Amerikaans_Israëlisch ADJ(prenom,basis,met-e,stan)
|
||||
90 datalek data_lek N(soort,ev,basis,onz,stan)
|
||||
90 ballistische ballistisch ADJ(prenom,basis,met-e,stan)
|
||||
82 lng lng N(soort,ev,basis,onz,stan)
|
||||
74 droneaanval drone_aanval N(soort,ev,basis,zijd,stan)
|
||||
72 kabinet-Jetten kabinet-Jetten N(soort,ev,basis,onz,stan)
|
||||
66 vergeldingsaanvallen vergelding_aanval N(soort,mv,basis)
|
||||
61 tussenronde tussen_ronde N(soort,ev,basis,zijd,stan)
|
||||
59 Iranoorlog Iran_oorlog N(soort,ev,basis,zijd,stan)
|
||||
56 speelzand speel_zand N(soort,ev,basis,onz,stan)
|
||||
55 regering-Trump regering_Trump N(soort,ev,basis,zijd,stan)
|
||||
54 vrijgave vrij_gave N(soort,ev,basis,zijd,stan)
|
||||
54 sprintrace sprint_race N(soort,ev,basis,zijd,stan)
|
||||
54 ploegenachtervolging ploeg_achtervolging N(soort,ev,basis,zijd,stan)
|
||||
53 staatsmedia staat_medium N(soort,mv,basis)
|
||||
|
||||
"bestaande locaties":
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[(@neclass="LOC" and @his="normal" and not(@rel="mwp")) or (@cat="mwu" and node[@pt="spec" and @neclass="LOC"] and @his="normal")]' tt:%l |sort | uniq -c |sort -nr | head -n 20
|
||||
|
||||
|
||||
3910 Iran
|
||||
2180 Nederland
|
||||
1929 VS
|
||||
1610 Israël
|
||||
1218 Midden-Oosten
|
||||
1128 Oekraïne
|
||||
942 Verenigde Staten
|
||||
874 Rusland
|
||||
823 Amsterdam
|
||||
776 Europa
|
||||
668 DEN HAAG
|
||||
563 België
|
||||
555 China
|
||||
445 Milaan
|
||||
429 Frankrijk
|
||||
389 Duitsland
|
||||
380 Brussel
|
||||
374 Dubai
|
||||
368 Libanon
|
||||
364 Groningen
|
||||
|
||||
"bestaande personen":
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[(@neclass="PER" and @his="normal" and not(@rel="mwp")) or (@cat="mwu" and node[@pt="spec" and @neclass="PER"] and @his="normal")]' tt:%l |sort | uniq -c |sort -nr | head -n 20
|
||||
|
||||
1812 Trump
|
||||
531 Donald Trump
|
||||
327 Khamenei
|
||||
309 Epstein
|
||||
267 Verstappen
|
||||
229 Andrew
|
||||
208 Máxima
|
||||
187 Ali Khamenei
|
||||
161 Orbán
|
||||
146 Trumps
|
||||
133 Mette-Marit
|
||||
133 Keijzer
|
||||
126 Willem-Alexander
|
||||
126 Kok
|
||||
122 Charles
|
||||
118 Stolz
|
||||
113 Harald
|
||||
111 Poetin
|
||||
97 Van Persie
|
||||
94 Wilders
|
||||
|
||||
|
||||
|
||||
"bestaande organisaties":
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[(@neclass="ORG" and @his="normal" and not(@rel="mwp")) or (@cat="mwu" and node[@pt="spec" and @neclass="ORG"] and @his="normal")]' tt:%l |sort | uniq -c |sort -nr | head -n 20
|
||||
|
||||
|
||||
|
||||
2575 ANP
|
||||
547 Ajax
|
||||
449 Instagram
|
||||
421 EU
|
||||
357 Defensie
|
||||
349 Feyenoord
|
||||
348 D66
|
||||
346 VVD
|
||||
329 PSV
|
||||
305 Hezbollah
|
||||
303 Tweede Kamer
|
||||
303 NEC
|
||||
296 AZ
|
||||
265 CDA
|
||||
263 OM
|
||||
237 NU.nl
|
||||
232 NOS
|
||||
231 BBC
|
||||
224 Kamer
|
||||
219 Openbaar Ministerie
|
||||
|
||||
|
||||
"bestaande andere namen (boeken, films, events, .. )":
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[(@neclass="MISC" and @his="normal" and not(@rel="mwp")) or (@cat="mwu" and node[@pt="spec" and @neclass="MISC"] and @his="normal")]' tt:%l |sort | uniq -c |sort -nr | head -n 20
|
||||
|
||||
|
||||
361 Spelen
|
||||
289 Olympische Spelen
|
||||
278 Eredivisie
|
||||
244 X
|
||||
222 Winterspelen
|
||||
177 Champions League
|
||||
147 Formule 1
|
||||
143 Premier League
|
||||
137 X.
|
||||
112 Oscars
|
||||
102 Grand Prix
|
||||
100 Paralympische Spelen
|
||||
90 Facebook
|
||||
78 Eurovisie Songfestival
|
||||
76 WhatsApp
|
||||
75 Parijs-Nice
|
||||
70 Tweede Wereldoorlog
|
||||
67 Oscar
|
||||
66 The New York Times
|
||||
62 AEX-index
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* deze misschien niet? */
|
||||
"nieuwe adjectieven, deelwoorden en werkwoorden":
|
||||
|
||||
find /net/corpora/nlnieuws/ -name '*data.dz' | xargs alto fp:'//node[@pt and @his and not(../@his="normal" or @rel="mwp" or ../@his="name" or ../@his_1="decap") and not(@his="normal" or @his="name" or @his="skip" or @his="robust_skip" or @his="w_dia" or @his="wo_dia" or @his="decap" or @his="within_word_conjunct") and not(@pt="n") ]' tt:"%w %P" |sort | uniq -c |sort -nr |head -n 20
|
||||
|
||||
96 Amerikaans-Israëlische ADJ(prenom,basis,met-e,stan)
|
||||
90 ballistische ADJ(prenom,basis,met-e,stan)
|
||||
41 radicaal-rechtse ADJ(prenom,basis,met-e,stan)
|
||||
29 Israëlisch-Amerikaanse ADJ(prenom,basis,met-e,stan)
|
||||
27 pro-Iraanse ADJ(prenom,basis,met-e,stan)
|
||||
25 Belarussische ADJ(prenom,basis,met-e,stan)
|
||||
22 radicaal-linkse ADJ(prenom,basis,met-e,stan)
|
||||
21 Omaanse ADJ(prenom,basis,met-e,stan)
|
||||
19 pro-Palestijnse ADJ(prenom,basis,met-e,stan)
|
||||
16 partijloze ADJ(prenom,basis,met-e,stan)
|
||||
15 Eindhovense ADJ(prenom,basis,met-e,stan)
|
||||
14 cybercriminele ADJ(prenom,basis,met-e,stan)
|
||||
14 bestverkochte WW(vd,prenom,met-e)
|
||||
12 onbevestigde WW(vd,prenom,met-e)
|
||||
12 kindgebonden WW(vd,prenom,zonder)
|
||||
12 AI-gegenereerde WW(vd,prenom,met-e)
|
||||
11 toekomstbestendig ADJ(vrij,basis,zonder)
|
||||
11 omhooggegaan WW(vd,vrij,zonder)
|
||||
11 Iraans-Koerdische ADJ(prenom,basis,met-e,stan)
|
||||
11 antifascistische ADJ(prenom,basis,met-e,stan)
|
||||
Reference in New Issue
Block a user