-
Notifications
You must be signed in to change notification settings - Fork 0
/
donnees.sql
2110 lines (1900 loc) · 75.2 KB
/
donnees.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
set datestyle to 'european';
DROP TABLE IF EXISTS imported_data;
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
-- Table d'importation des données brutes espagnoles
CREATE TABLE imported_data
(
cote text,
type text,
datatype text,
dates text,
titre text,
sous_titre text,
auteur text,
destinataire text,
sujet text,
description text,
notes text,
resume text,
editeur text,
localisation text,
droits text,
ayants_droit text,
format text,
langue text,
etat_genetique text,
relations_genetiques text,
autres_ressources_relation text,
nature_document text,
support text,
etat_general text,
publication text,
representation text,
contexte_geographique text,
lieu_expedition text,
type_publication text,
titre_publication text,
lieu_publication text,
numero_publication text,
periodicite text,
directeur_publication text,
auteur_analyse text,
date_analyse text,
auteur_description text,
date_creation_notice text,
auteur_revision text,
date_revision_notice text,
auteur_transcription text,
__dummy text
);
DROP TABLE IF EXISTS imported_en;
-- Table d'importation des données brutes anglaises
CREATE TABLE imported_en
(
cote text,
type text,
datatype text,
dates text,
titre text,
sous_titre text,
auteur text,
destinataire text,
sujet text,
description text,
notes text,
resume text,
editeur text,
localisation text,
droits text,
ayants_droit text,
format text,
langue text,
etat_genetique text,
relations_genetiques text,
autres_ressources_relation text,
nature_document text,
support text,
etat_general text,
publication text,
representation text,
contexte_geographique text,
lieu_expedition text,
type_publication text,
titre_publication text,
lieu_publication text,
numero_publication text,
periodicite text,
directeur_publication text,
auteur_analyse text,
date_analyse text,
auteur_description text,
date_creation_notice text,
auteur_revision text,
date_revision_notice text,
auteur_transcription text
);
-- Importation du CSV. Pourquoi en 2020, ce logiciel n'accepte pas les chemins relatifs ????
COPY imported_data
FROM 'E:\Esp-fotos.csv'--'D:\Boulot\L3\BASE_DE_DONNEES\PROJET\Esp-fotos.csv' 'D:\projects\S5\S5_BBD\Esp-fotos.csv'
DELIMITER ';'
CSV HEADER;
COPY imported_en
FROM 'E:\Ang-fotos.csv'--'D:\Boulot\L3\BASE_DE_DONNEES\PROJET\Ang-fotos.csv' D:\projects\S5\S5_BBD\Ang-fotos.csv
DELIMITER ';'
CSV HEADER;
------------------------------------------------ FONCTIONS ------------------------------------------------
/*
Fonction servant à parse la colonne format.
Nous avons décidé de ne pas subdiviser cette colonne au final (voir justification 1FN).
*/
CREATE OR REPLACE FUNCTION parse_format(t text)
RETURNS text[] AS
$$
DECLARE
-- 9 valeurs
parsed text[];
BEGIN
IF t IS NULL
THEN
RETURN NULL;
END IF;
-- Tous les caractères "blancs" sont remplacés par des espaces, on enlève ceux des extrémités
t := LOWER(TRIM(blank_to_space(t)));
parsed := regexp_matches(t,
'^(((\d{2,4})[[:blank:]]*[x×][[:blank:]]*(\d{2,4}))[[:blank:]]*((\d{1,3}([\.\,]\d{1,2})?)[[:blank:]]*([kmg]o))?)?([[:blank:]]*\[.*\])?$');
IF parsed IS NULL -- Si le 1er parsing n'a pas marché
THEN
RETURN NULL;
ELSIF array_length(parsed, 1) != 9 -- Si le parsing a partiellement match. Le 1 représente la dimension (ici 1ère dimension).
THEN
RETURN NULL;
ELSE
RETURN parsed;
END IF;
END;
$$ LANGUAGE plpgsql;
/*
Fonction utilitaire qui extrait l'id numérique de la cote.
Au final, nous avons utilisé la cote car le premier enregsitrement (exemple de Mme Chantraine) a un format totalement
différent de MX-F-<nombre>
*/
CREATE OR REPLACE FUNCTION cote_to_id(cote text)
RETURNS int AS
$$
BEGIN
RETURN CAST((regexp_split_to_array(TRIM(cote), 'MX-F-')) [ 2] AS int);
END;
$$ LANGUAGE plpgsql;
/*
Supprime les caractères blancs du début et de la fin d'une chaîne de caractères.
Caractères supprimés :
0xC2
0xAO
0x20 (espace)
0x0A
0xE2
0x2006
0x0D
Ces caractères ont été détectés dans le fichier.
*/
CREATE OR REPLACE FUNCTION trim_blank(t text)
RETURNS text AS
$$
DECLARE
t_returned text;
BEGIN
-- Remplacement en début de chaîne de caractères
t_returned := regexp_replace(t, '^[\xC2\xA0\x20\x0A\xE2\x2006\x0D]+', '');
-- Remplacement en fin de chaîne de caractères
t_returned := regexp_replace(t_returned, '[\xC2\xA0\x20\x0A\xE2\x2006\x0D]+$', '');
IF char_length(t_returned) = 0
THEN
RETURN NULL;
ELSE
RETURN t_returned;
END IF;
END;
$$ LANGUAGE plpgsql;
/*
Remplace les caractères blancs d'une chaîne de caractères part un espace.
Caractères supprimés :
0xC2
0xAO
0x20 (espace)
0x0A
0xE2
0x2006
0x0D
Caractère de remplacement :
0x20 (espace)
Ces caractères ont été détectés dans le fichier.
*/
CREATE OR REPLACE FUNCTION blank_to_space(t text)
RETURNS text AS
$$
BEGIN
RETURN regexp_replace(t, E'[\\xC2\\xA0\\x20\\x0A\\xE2\\x2006\\x0D]+', ' ', 'g');
END;
$$ LANGUAGE plpgsql;
------------------------------------------------ NETTOYAGE DE LA TABLE ------------------------------------------------
UPDATE imported_data
SET __dummy=blank_to_space(__dummy);
------------------------------------------------COTE------------------------------------------------
-- On retire les caractères en trop avant et après la cote.
UPDATE imported_data
SET cote=TRIM(cote);
UPDATE imported_en
SET cote=TRIM(cote);
-- Test, on vérifie que toutes les cotes sont uniques et qu'elles vérifient bien le bon format.
-- SELECT COUNT(DISTINCT cote)=1122 FROM imported_data WHERE cote ~ '\w{1,3}-\w{1,3}-\w{1,3}';
------------------------------------------------TYPE------------------------------------------------
-- On retire les caractères en trop avant et après le type.
UPDATE imported_data
SET type=TRIM(blank_to_space(type));
UPDATE imported_en
SET type=TRIM(blank_to_space(type));
/*
Pour les données en espagnol :
On sait, par analyse, que tous les documents commençant par MX-F- sont du type "Fotos".
On peut même partir du principe que
MX = Margarita Xirgu
F = Fotos
Ici, on évite les incohérences/erreurs en forçant Fotos.
*/
UPDATE imported_data
SET type='Fotos'
WHERE cote LIKE 'MX-F-%';
------------------------------------------------DATATYPE------------------------------------------------
/*
On retire les caractères en trop avant et après le datatype.
On passe datatype en minsucule pour uniformiser la casse, qui était différente.
*/
UPDATE imported_data
SET datatype=LOWER(TRIM(blank_to_space(datatype)));
UPDATE imported_en
SET datatype=LOWER(TRIM(blank_to_space(datatype)));
------------------------------------------------DATES------------------------------------------------
/*
Pour les données en espagnol :
On retire les caractères en trop avant et après la date.
Toutes les dates inconnues sont passées à "NULL".
Correction des erreurs pour certaines dates.
Certains enregistrements avaient du texte invalide dans cette colonne.
Ces textes sont des informations redondantes (déjà dans colonne notes).
Décalage de la colonne titre pour "MX-F-20" corrigé.
*/
UPDATE imported_data
SET dates=TRIM(blank_to_space(dates));
UPDATE imported_data
SET dates= NULL
WHERE LOWER(dates) = 'desconocido'
or LOWER(dates) = 'indeterminado'
or LOWER(dates) = 'gunther gerzso'
or LOWER(dates) = 'victorio macho';
-- Corrections individuelles
UPDATE imported_data
SET dates='1906-1920'
WHERE cote = 'MX-F-20';
UPDATE imported_data
SET dates='1950-1970'
WHERE cote = 'MX-F-132';
UPDATE imported_data
SET dates='1996'
WHERE cote = 'MX-F-33';
UPDATE imported_data
SET dates='1980-2000'
WHERE cote = 'MX-F-1042';
UPDATE imported_data
SET dates='1910-1940'
WHERE cote = 'MX-F-1063';
UPDATE imported_data
SET dates='1910-1925'
WHERE cote = 'MX-F-30';
UPDATE imported_data
SET dates='1992-2020'
WHERE cote = 'MX-F-1058'; -- '19920-2020' -> '1992-2020'
UPDATE imported_data
SET dates=regexp_replace(dates, '\.$', '');
-- Certains enregistrements ont une date qui finit par ".". On le supprime.
/*
Pour les données en anglais :
Ce sont des doublons (parfois erronnés) de la colonne date des données espagnoles.
*/
UPDATE imported_en
SET dates= NULL
WHERE TRUE;
-- Test, vérifie que tous les enregistrements sont au bon format.
SELECT COUNT(*) = 0
FROM imported_data
WHERE dates !~ '^\d{4}-\d{2}-\d{2}$'
AND dates !~ '^\d{4}$'
AND dates !~ '^\d{4}-\d{4}$';
------------------------------------------------TITRE------------------------------------------------
/*
Titre pour "MX-F-20" actualisé (NULL -> 'Magarita Xirgu').
On retire les caractères en trop avant et après le titre.
*/
UPDATE imported_data
SET titre='Magarita Xirgu'
WHERE cote = 'MX-F-20';
UPDATE imported_data
SET titre=TRIM(blank_to_space(titre));
-- Faute : Mragarrita -> Margarita
UPDATE imported_data
SET titre='Caricatura Margarita Xirgu'
WHERE titre = 'Caricatura Mragarrita Xirgu';
UPDATE imported_en
SET titre=TRIM(blank_to_space(titre));
-- Problème : d au lieu de t dans les données. S majuscule/minuscule à street.
UPDATE imported_en
SET titre='Margarita Xirgu Badalona Street'
WHERE LOWER(titre) = 'margarida xirgu de badalona street';
-- Plein de fautes, espace manquant
UPDATE imported_en
SET titre='Drawing from a representation'
WHERE titre = 'Draw from a represatation'
OR titre = 'Draw froma represatation';
-- On remplace acting par performing
UPDATE imported_en
SET titre=regexp_replace(LOWER(titre), 'acting', 'performing');
-- On remplace mragarita par Margarita
UPDATE imported_en
SET titre=regexp_replace(LOWER(titre), 'mragarita', 'Margarita');
UPDATE imported_en
SET titre='Brochures and documents'
WHERE titre = 'brochures and document'
OR titre = 'folletos y documentos';
UPDATE imported_en
SET titre='sculpture'
WHERE titre = 'escultura';
-- Un texte en espagnol s'est retrouvé dans les titres anglais
UPDATE imported_en
SET titre='"only a theater actress" estela medina. national theatre of catalonia'
WHERE titre = '"solo una actriz de teatro" estela medina. teatre nacional de cataluña';
-- Le titre anglais carmen est le même que le titre espagnol
DELETE
FROM imported_en
WHERE titre = 'carmen';
-- Le titre anglais calle xirgu est le même que le titre espagnol
DELETE
FROM imported_en
WHERE titre = 'calle xirgu';
------------------------------------------------SOUS-TITRE------------------------------------------------
-- On retire les caractères en trop avant et après le sous-titre.
UPDATE imported_data
SET sous_titre=TRIM(blank_to_space(sous_titre));
-- "MX-F-556" a un sous-titre vide mais non NULL.
UPDATE imported_data
SET sous_titre= NULL
WHERE char_length(sous_titre) = 0;
-- Test, on vérifie bien que seuls un enregistrement a un sous-titre.
SELECT COUNT(sous_titre) = 1
FROM imported_data;
------------------------------------------------AUTEUR------------------------------------------------
/*
Pour les données en espagnol :
On retire les caractères en trop avant et après l'auteur.
On passe à "NULL" tous les auteurs inconnus
*/
UPDATE imported_data
SET auteur=TRIM(blank_to_space(auteur));
-- Un des auteurs a des caractères blancs au début (codes ASCII 0xC2, 0xAO et 0x20), que TRIM n'arrive pas à enlever.
UPDATE imported_data
SET auteur=trim_blank(auteur);
-- On fait une comparaison avec le texte en minuscule pour ignorer la casse
UPDATE imported_data
SET auteur= NULL
WHERE LOWER(auteur) = 'indeterminado';
-- Correction manuelle de l'enregistrement "MX-F-438"
UPDATE imported_data
SET auteur='Antonio Bueno'
WHERE auteur = 'Antoinio Bueno';
-- Nom imcomplet, "MX-F-314"
UPDATE imported_data
SET auteur='Amparo Climent Corbín'
WHERE auteur LIKE 'Amparo Climent%';
-- Problème de casse
UPDATE imported_data
SET auteur='Frederico Garcia Lorca'
WHERE LOWER(auteur) = 'frederico garcia lorca';
-- Certains enregistrements ont un auteur qui finit par ".". On le supprime.
UPDATE imported_data
SET auteur=regexp_replace(auteur, '\.$', '');
UPDATE imported_data
SET auteur='Revista Mundo Nuevo'
WHERE LOWER(auteur) = 'nuevo mundo'
OR LOWER(auteur) = 'nuevo mundo revista';
/*
Pour les données en anglais :
*/
UPDATE imported_en
SET auteur=TRIM(blank_to_space(auteur));
UPDATE imported_en
SET auteur= NULL
WHERE LOWER(auteur) = 'undetermined';
-- Il manque une partie du nom de famille
UPDATE imported_en
SET auteur='Amparo Climent Corbín.'
WHERE auteur = 'Amparo Climent.';
-- Un nom de famille a été traduit et un autre contient une faute
UPDATE imported_en
SET auteur='Antonio Bueno'
WHERE auteur = 'Antonio Good'
OR auteur = 'Antoinio Bueno';
-- On corrige la casse
UPDATE imported_en
SET auteur='Frederico Garcia Lorca'
WHERE LOWER(auteur) = 'frederico garcia lorca';
-- On corrige la casse et on traduit revista en magazine
UPDATE imported_en
SET auteur='Revista Mundo magazine'
WHERE LOWER(auteur) LIKE 'nuevo mundo%';
-- On supprime les points à la fin
UPDATE imported_en
SET auteur=regexp_replace(auteur, '\.$', '');
-- On supprime tous les enregistrements qui sont similaires à ceux des données espagnoles
UPDATE imported_en B
SET auteur= NULL
WHERE B.auteur = (SELECT A.auteur FROM imported_data A WHERE B.cote = A.cote);
------------------------------------------------DESTINATAIRE------------------------------------------------
-- Il n'y a pas de destinataires
------------------------------------------------SUJET------------------------------------------------
/*
On retire les caractères en trop avant et après le sujet.
Correction d'une erreur pour "MX-F-185"
*/
UPDATE imported_data
SET sujet=TRIM(blank_to_space(sujet));
-- Un des sujets a des caractères blancs au début (codes ASCII 0xC2, 0xAO et 0x20), que TRIM n'arrive pas à enlever.
UPDATE imported_data
SET sujet=regexp_replace(sujet, '^[\xC2\xA0\x20]*', '');
UPDATE imported_data
SET sujet='Margarita xirgu'
WHERE cote = 'MX-F-185';
-- Tout ce qui est indeterminé devient NULL
UPDATE imported_data
SET sujet= NULL
WHERE LOWER(sujet) = 'indeterminado'
OR sujet = 'Indeterminadp';
UPDATE imported_data
SET sujet='Cartel exposicion sobre Margarita Xirgu'
WHERE sujet = 'cartel Margarita Xirgu';
UPDATE imported_data
SET sujet='Figurina'
WHERE sujet = 'Figurines';
UPDATE imported_data
SET sujet='Foto de Margarita Xirgu'
WHERE sujet = 'foto de Margarita xirgu'
OR sujet = 'Foto de Margarita xirgu'
OR sujet = 'Foto de Margarita Xirgu'
OR sujet = 'Foto de Margarita Xiru'
OR sujet = 'foto deMargarita Xirgu'
OR sujet = 'Foto Margarita Xirgu'
OR sujet = 'Fotoe de Margarita Xirgu';
UPDATE imported_data
SET sujet='Foto de Miguel Xirgu'
WHERE sujet = 'foto de Miguel Xirgu'
OR sujet = 'Foto de Miguel xirgu'
OR sujet = 'Foto de Miquel Xirgu'
OR sujet = 'Miguel Xirgu';
UPDATE imported_data
SET sujet='Homenaje a Margarita Xirgu'
WHERE sujet = 'Homenaje a Margarita Xirgu'
OR sujet = 'homenaje a Margarita Xirgu'
OR sujet = 'Foto de Miquel Xirgu';
UPDATE imported_data
SET sujet='Margarita Xirgu'
WHERE sujet = 'Magararita xirgu'
OR sujet = 'Margarita Xirgu'
OR sujet = 'Margarita Xiirgu'
OR sujet = 'Margarita xirgu'
OR sujet = 'Magararita xirgu';
UPDATE imported_data
SET sujet='Margarita Xirgu Actuando'
WHERE sujet = 'Margarita Xirgu actuando';
UPDATE imported_data
SET sujet='Margarita Xirgu de Elektra'
WHERE sujet = 'Margarita Xirgu Elektra';
UPDATE imported_data
SET sujet='Medea Cartel'
WHERE sujet = 'Medea';
UPDATE imported_data
SET sujet='Teatro Solis'
WHERE sujet = 'Teatro Solís';
UPDATE imported_en
SET sujet=TRIM(sujet);
------------------------------------------------DESCRIPTION------------------------------------------------
-- Caractères blancs au début (codes ASCII 0xC2, 0xAO, 0x20 et 0x0A), que TRIM n'arrive pas à enlever.
UPDATE imported_data
SET description=trim_blank(blank_to_space(description));
-- On retire les caractères en trop avant et après la description.
UPDATE imported_data
SET description=TRIM(description);
-- Maintenant qu'on a supprimé des caractères blancs, on met à NULL les descriptions vides;
UPDATE imported_data
SET description= NULL
WHERE char_length(description) = 0;
-- Certains descriptions commencent par des tirets (suivis de caractères blancs), on les supprime
UPDATE imported_data
SET description=regexp_replace(description, '^-[[:blank:]]*', '');
------------------------------------------------NOTES------------------------------------------------
/*
On retire les caractères en trop avant et après les notes.
*/
UPDATE imported_data
SET notes=TRIM(blank_to_space(notes));
UPDATE imported_data
SET notes= null
WHERE LOWER(notes) = 'indeterminado';
UPDATE imported_en
SET notes=TRIM(blank_to_space(notes));
UPDATE imported_en
SET notes= null
WHERE LOWER(notes) = 'undetermined';
------------------------------------------------RESUME------------------------------------------------
/*
On retire les caractères en trop avant et après le mot.
*/
UPDATE imported_data
SET resume=TRIM(blank_to_space(resume));
-- Aucune donnée
------------------------------------------------EDITEUR------------------------------------------------
/*
On retire les caractères en trop avant et après l'éditeur.
Correction des erreurs pour certains éditeurs.
*/
UPDATE imported_data
SET editeur=REPLACE(editeur, ':', '');
UPDATE imported_data
SET editeur=REPLACE(editeur, '|', '');
UPDATE imported_data
SET editeur=REPLACE(editeur, ',', '');
UPDATE imported_data
SET editeur=REPLACE(editeur, ' ', '');
UPDATE imported_data
SET editeur=REPLACE(editeur, 'fonfo', 'fondo');
UPDATE imported_data
SET editeur=REPLACE(editeur, 'espectateur', 'spectateur');
UPDATE imported_data
SET editeur=REPLACE(editeur, 'Jose', 'José');
UPDATE imported_data
SET editeur=REPLACE(editeur, '. ', '.');
UPDATE imported_data
SET editeur=REPLACE(editeur,
'Responsable del archivo Familia Margarita Xirgu (Xavier Rius Xirgu Ester Xirgu Cortacans Natalia Valenzuela) Proyecto e-spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)',
'Responsable del archivo Familia Margarita Xirgu (Xavier Rius Xirgu Ester Xirgu Cortacans Natalia Valenzuela)Editor Proyecto e-spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)');
UPDATE imported_data
SET editeur=REPLACE(editeur,
'Responsable del archivo Indeterminadospectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)',
'Responsable del archivo Indeterminado spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)');
UPDATE imported_data
SET editeur=REPLACE(editeur,
'Responsable del archivo IndeterminadoEditor Proyecto e-spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)',
'Responsable del archivo Indeterminado Editor Proyecto e-spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)');
UPDATE imported_data
SET editeur=REPLACE(editeur,
'Responsable del archivo Fondo Margarita Xirgu del Instituto del Teatro de la Diputación de Barcelona.Editor Proyecto e-spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)',
'Responsable del archivo Fondo Margarita Xirgu del Instituto del Teatro de la Diputación de Barcelona.Editor Proyecto e-spectateur AAP 2020 (Responsable científico Alumno Alan Gil Master LEA Amérique La Rochelle Université)');
UPDATE imported_data
SET editeur=regexp_replace(editeur, '[:blank:]*[eE]ditor[:blank:]*', ' # ');
UPDATE imported_data
SET editeur=TRIM(blank_to_space(editeur));
------------------------------------------------LOCALISATION------------------------------------------------
/*
On retire les caractères en trop avant et après le mot.
On passe les localisations inconnues à "NULL".
Correction des erreurs pour certaines localisations.
*/
UPDATE imported_data
SET localisation=TRIM(blank_to_space(localisation));
UPDATE imported_data
SET localisation= NULL
WHERE LOWER(localisation) = 'desconocido'
OR LOWER(localisation) = 'indeterminado';
UPDATE imported_data
SET localisation='Punta Ballena'
WHERE localisation = ' Punta Ballena (Maldonado) Uruguay'
OR localisation = 'Punta Ballena Uruguay';
UPDATE imported_data
SET localisation='Teatro Solís de Montevideo'
WHERE localisation = 'Teatro Solís, Montevideo (Uruguay)';
-- Suppression du point à la fin du texte
UPDATE imported_data
SET localisation='EMAD: Escuela Municipal de Arte Dramático de Montevideo'
WHERE localisation = 'EMAD: Escuela Municipal de Arte Dramático de Montevideo.';
UPDATE imported_data
SET localisation='Madrid'
WHERE localisation = 'Madrid'
OR localisation = 'Madrid España';
UPDATE imported_data
SET localisation='Mérida'
WHERE localisation = 'Merida'
OR localisation = 'Mérida'
OR localisation = 'Merida España'
OR localisation = 'Meridaa';
UPDATE imported_data
SET localisation=regexp_replace(localisation, '[[:blank:]]+España$', '');
-- "MX-F-449" a une localisation qui est erronnée (c'est la description, dupliquée).
UPDATE imported_data
SET localisation= NULL
WHERE localisation = 'figura de cera de Margarita Xirgu';
UPDATE imported_data
SET localisation='Teatro Solís de Montevideo'
WHERE contexte_geographique = 'Teatro Solís de Montevideo'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Granada'
WHERE contexte_geographique = 'Granada España'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Sevilla'
WHERE contexte_geographique = 'Sevilla'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Molins de Rei'
WHERE contexte_geographique = 'Molins de Rei'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Punta del Este'
WHERE contexte_geographique = 'Punta del Este'
and localisation IS NULL;
UPDATE imported_data
SET localisation='intendencia Maldonado'
WHERE contexte_geographique = 'intendencia Maldonado'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Punta Ballena'
WHERE contexte_geographique = 'Punta ballena Uruguay'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Plaza Margarida Xirgu Barcelona'
WHERE contexte_geographique = 'Plaza Margarida Xirgu Barcelona'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Colección de escenografía del Instituto del Teatro de la Diputación de Barcelona.'
WHERE contexte_geographique = 'Colección de escenografía del Instituto del Teatro de la Diputación de Barcelona.'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Buenos Aires'
WHERE contexte_geographique = 'Buenos Aires Argentina'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Madrid'
WHERE contexte_geographique = 'Madrid España'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Girona'
WHERE contexte_geographique = 'Girona'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Barcelona'
WHERE contexte_geographique = 'Barcelona España'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Guimera'
WHERE contexte_geographique = 'Guimera'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Zaragoza'
WHERE contexte_geographique = 'España Zaragoza'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Sala Margarita Xirgu,Teatro Español, Madrid'
WHERE contexte_geographique = 'Sala Margarita Xirgu,Teatro Español, Madrid, España'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Teatro Goya de Barcelona'
WHERE contexte_geographique = 'teatro Goya de Barcelona'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Montevideo'
WHERE contexte_geographique = 'Montevideo'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Puerto Rico'
WHERE contexte_geographique = 'Puerto Rico'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Teatro romano de Merida'
WHERE contexte_geographique = 'Teatro romano de Merida'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Museo de Badalona'
WHERE contexte_geographique = 'Museo de Badalona'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Badalona'
WHERE contexte_geographique = 'Badalona España'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Montevideo'
WHERE contexte_geographique = 'Uruguay Montevideo'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Cataluña'
WHERE (contexte_geographique = 'España Cataluña' or contexte_geographique = 'Cataluña España')
and localisation IS NULL;
UPDATE imported_data
SET localisation='Montevideo'
WHERE contexte_geographique = 'Uruguay Montevideo'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Mérida'
WHERE contexte_geographique = 'Mérida España'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Valencia'
WHERE contexte_geographique = 'Valencia'
and localisation IS NULL;
UPDATE imported_data
SET localisation='Montevideo'
WHERE contexte_geographique = 'Uruguay | Montevideo'
and localisation IS NULL;
UPDATE imported_en
SET localisation=TRIM(localisation);
UPDATE imported_en
SET localisation=NULL
WHERE LOWER(localisation) = 'undetermined';
------------------------------------------------DROITS------------------------------------------------
/*
On retire les caractères en trop avant et après les droits.
Correction des erreurs pour certains droits.
*/
UPDATE imported_data
SET droits=TRIM(blank_to_space(droits));
UPDATE imported_data
SET droits='Archives familiar de Margarita Xirgu – Licencia Licencia Creative Commons CC-BY-NC-ND (Attribution-Non Commercial-No Derivatives 4.0 International)'
WHERE droits =
'Archives familiales Margarita Xirgu – Licencia Licencia Creative Commons CC-BY-NC-ND (Attribution-Non Commercial-No Derivatives 4.0 International)';
-- Supprime les éventuels caractères '$' à la fin du texte.
UPDATE imported_data
SET droits=REPLACE(droits, '$', '');
------------------------------------------------AYANTS-DROIT------------------------------------------------
/*
On retire les caractères en trop avant et après les ayants-droit.
*/
UPDATE imported_data
SET ayants_droit=TRIM(blank_to_space(ayants_droit));
-- Aucune donnée
------------------------------------------------FORMAT------------------------------------------------
/*
On retire les caractères en trop avant et après le format.
On passe les formats indéterminés à "NULL".
On supprime les formats erronnés. La colonne format ne définit pas le format de fichier (doublon avec nature_document).
Correction des erreurs sur "MX-F-247", dupliqué de notes
*/
UPDATE imported_data
SET format=TRIM(blank_to_space(format));
UPDATE imported_data
SET format= NULL
WHERE format = 'Indeterminado';
-- On supprime les extensions de fichier (avec ou sans point) dans la colonne format car doublon et non consistent.
UPDATE imported_data
SET format=regexp_replace(LOWER(format), '\.?(j[[:blank:]]?[p]?[e]?g|png|pdf)', '');
-- Si certains formats sont vides, on les met à NULL. Important après l'opération précédente.
UPDATE imported_data
SET format= NULL
WHERE char_length(format) = 0;
-- Les formats de tailles de fichiers sont parfois incohérents : jko, lko, kpo pour ko.
UPDATE imported_data
SET format=regexp_replace(LOWER(format), '(([a-z]k)|(k[a-z])|(?![gmk])[a-z])o', 'ko');
-- Un enregistrement a un format différent : "33ko 305 × 500", on réorganise en 305x500|33ko
UPDATE imported_data
SET format=regexp_replace(blank_to_space(LOWER(format)),
'(\d{1,3}([\.\,]\d{1,2})?[[:blank:]]*([kmg]o)),?[[:blank:]]*((\d{2,4})[[:blank:]]*[x×][[:blank:]]*(\d{2,4}))[[:blank:]]*$',
'\5x\6 \1');
-- Un enregistrement a l'unité de taille de fichier manquante : "411x640 39"
UPDATE imported_data
SET format=regexp_replace(blank_to_space(LOWER(format)),
'^(\d{2,4}[[:blank:]]*[x×][[:blank:]]*\d{2,4})[[:blank:]]+(\d{1,3}([\.\,]\d{1,2})?)[[:blank:]]*$',
'\1 \2ko');
-- Un enregistrement a un format invalide : "320x400 pg", on enlève les lettres à la fin et on garde juste la résolution <largeur>x<longueur>
UPDATE imported_data
SET format=regexp_replace(blank_to_space(LOWER(format)),
'^((\d{2,4})[[:blank:]]*[x×][[:blank:]]*(\d{2,4}))[[:blank:]]+[a-z]*$', '\2x\3');
-- Correction manuelle d'un format invalide
UPDATE imported_data
SET format='456x640 28ko'
WHERE cote = 'MX-F-813';
-- Correction manuelle d'un format invalide
UPDATE imported_data
SET format='881x5991 1mo [0,5mpx]'
WHERE cote = 'MX-F-622';
-- L'enregistrement "MX-F-557" a pour format 350178 ce qui est erronné
UPDATE imported_data
set format='350x178'
WHERE cote = 'MX-F-557';
-- L'enregistrement "MX-F-503" a pour format 350178 ce qui est erronné
UPDATE imported_data
set format='350x257'
WHERE cote = 'MX-F-503';
-- Le seul document texte a un format très différent, on le stocke dans les données supplémentaires
UPDATE imported_data
SET format='[' || format || ']'
WHERE cote = 'AS-AA1-01';
UPDATE imported_data
SET format=regexp_replace(format,
'^((\d{2,4})[[:blank:]]*[x×][[:blank:]]*(\d{2,4}))[[:blank:]]*((\d{1,3}([\.\,]\d{1,2})?)[[:blank:]]*([kmg]o))?([[:blank:]]\[.*\])?$',
'\2x\3 \5\7\8');
-- Texte dans le format qui est le même que dans notes.
SELECT cote, format
FROM imported_data
WHERE parse_format(format) IS NULL
AND format IS NOT NULL;
SELECT regexp_replace('476 × 464231,5 ko [sjask56]',
'^((\d{2,4})[[:blank:]]*[x×][[:blank:]]*(\d{2,4}))[[:blank:]]*((\d{1,3}([\.\,]\d{1,2})?)[[:blank:]]*([kmg]o))?([[:blank:]]\[.*\])?$',
'\2x\3 \5\7\8');
SELECT regexp_matches('[131 f., 139 p. numeradas 1-6, 5-6, 7-57, 2 pág. s.n., 58-116, 107, 117-137, 220 x 350 mm]',
'^(((\d{2,4})[[:blank:]]*[x×][[:blank:]]*(\d{2,4}))[[:blank:]]*((\d{1,3}([\.\,]\d{1,2})?)[[:blank:]]*([kmg]o))?)?([[:blank:]]*\[.*\])?$');
------------------------------------------------LANGUE------------------------------------------------
-- La langue est inutile, voir justification.
------------------------------------------------ETAT GENETIQUE------------------------------------------------
-- L'état génétique est inutile, voir justification.
------------------------------------------------RELATIONS GENETIQUES------------------------------------------------
/*
On retire les caractères en trop avant et après les relations génétiques ainsi que les "$".
Correction des erreurs pour certaines relations génétiques.
UPPER met en majuscule les lettres. Cela est primordial car certaines relations génétiques sont écrites : mx-f-XXXX
au lieu de MX-F-XXXX.
*/
UPDATE imported_data
SET relations_genetiques=UPPER(TRIM(blank_to_space(relations_genetiques)));
UPDATE imported_data
SET relations_genetiques=REPLACE(relations_genetiques, '$', '');
UPDATE imported_data
SET relations_genetiques=regexp_replace(LOWER(relations_genetiques), 'mx-(\d{3,4})/?', 'MX-F-\1', 'g');
UPDATE imported_data
SET relations_genetiques='221/222/223'
WHERE relations_genetiques = '221/222/222';
UPDATE imported_data
SET relations_genetiques='MX-F-221/MX-F-222/MX-F-223'
WHERE relations_genetiques = '221/222/223';
UPDATE imported_data
SET relations_genetiques='MX-F-579/MX-F-612/MX-F-827/MX-F-828/MX-F-829/MX-F-830/MX-F-831/MX-F-832/MX-F-833/MX-F-834/MX-F-835/MX-F-836'
WHERE relations_genetiques = 'Mx-579-Mx-612/827/828/829/830/831/832/833/83/835/836';
UPDATE imported_data
SET relations_genetiques='MX-F-603/MX-F-651'
WHERE relations_genetiques = 'MX-603/M-651'
OR relations_genetiques = 'Mx-603/Mx651';
UPDATE imported_data
SET relations_genetiques='MX-F-971/MX-F-972/MX-F-973/MX-F-974/MX-F-975/MX-F-976/MX-F-977/MX-F-978'
WHERE relations_genetiques = 'Mx-971/972/73/974/975/976/977978';
-- UPDATE imported_data SET relations_genetiques='MX-F-579/MX-F-612/MX-F-827/MX-F-828/MX-F-829/MX-F-830/MX-F-831/MX-F-832/MX-F-833/MX-F-834/MX-F-835/MX-F-836' WHERE relations_genetiques='MX-579/612/827/828/829/83/831/832/833/834/835/836';
UPDATE imported_data
SET relations_genetiques='MX-F-133/MX-F-135/MX-F-136/MX-F-137/MX-F-138/MX-F-139MX-F-/140/MX-F-154/MX-F-426'
WHERE relations_genetiques = 'Mx-133/Mx-135/Mx-136/-Mx-137/Mx-138/Mx-139/Mx-140/Mx-154/Mx-426';
UPDATE imported_data
SET relations_genetiques='MX-F-1000'
WHERE relations_genetiques = 'Mx-1000';
UPDATE imported_data
SET relations_genetiques='MX-F-1082/MX-F-1083/MX-F-1084/MX-F-1085/MX-F-1086/MX-F-1087'
WHERE relations_genetiques = 'Mx-1082/1083/1084/1085/1086/1087';
UPDATE imported_data
SET relations_genetiques='MX-F-164/MX-F-165/MX-F-168/MX-F-169/MX-F-170/MX-F-187/MX-F-188'
WHERE relations_genetiques = 'Mx164/165/168/169/170/187/188';
UPDATE imported_data
SET relations_genetiques='MX-F-884/MX-F-885/MX-F-1004'
WHERE relations_genetiques = 'MX-884/Mx-885/Mx-1004';
UPDATE imported_data
SET relations_genetiques='MX-F-1080/MX-F-1081/MX-F-1093/MX-F-1095/MX-F-1096'
WHERE relations_genetiques = 'Mx-1080-81-93-95-96';
UPDATE imported_data
SET relations_genetiques='MX-F-164/MX-F-165/MX-F-168/MX-F-169/MX-F-170/MX-F-187/MX-F-188'
WHERE relations_genetiques = 'mx164/165/168/169/170/187/188';
UPDATE imported_data
SET relations_genetiques='MX-F-950/MX-F-953'
WHERE relations_genetiques = 'MX950/953';
/*
On retire les caractères en trop avant et après les autres relations.
*/
UPDATE imported_data
SET autres_ressources_relation=TRIM(blank_to_space(autres_ressources_relation));
/*
On retire les caractères en trop avant et après la nature du document.
Correction des erreurs pour certaines nature de document + simplification du nom.
*/
UPDATE imported_data
SET nature_document=UPPER(TRIM(blank_to_space(nature_document)));
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'JPE', 'JPG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'JPGG', 'JPG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'JPEG', 'JPG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'JPGG', 'JPG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'JPGGG', 'JPG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'PNE', 'PNG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'PNGG', 'PNG');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'ARCHIVOS', '');
UPDATE imported_data
SET nature_document = REPLACE(nature_document, 'ARCHIVO', '');
UPDATE imported_data
SET nature_document=regexp_replace(nature_document, '^.*PDF.*$', 'PDF');
UPDATE imported_data
SET nature_document = TRIM(nature_document);
/*
On retire les caractères en trop avant et après le support.
*/
UPDATE imported_data
SET support=TRIM(UPPER(blank_to_space(support)));
/*
On retire les caractères en trop avant et après le mot.
On passe les états indéfinis à "NULL".
Correction des erreurs pour certains états.
*/
UPDATE imported_data
SET etat_general=TRIM(LOWER(blank_to_space(etat_general)));