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
|
1 : nieuwe namen
|
||||||
2 : nieuwe woorden
|
2 : nieuwe woorden
|
||||||
3 : nieuwe woorden met postag en lemma
|
3 : nieuwe woorden met postag en lemma
|
||||||
4 : bestaaande locaties
|
4 : bestaande locaties
|
||||||
5 : bestaande personen
|
5 : bestaande personen
|
||||||
6 : bestaande organisaties
|
6 : bestaande organisaties
|
||||||
7 : bestaande andere namen
|
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