From 9c5de8868f0fc5008476ccd6a3690ec428e18305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Math=C3=A9o=20GUILBERT?= Date: Thu, 23 Oct 2025 23:18:36 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20:=20Update=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 99 ++++++++++++++- ...epartition-exemples-par-periode-50-ans.png | Bin 0 -> 40074 bytes work.ipynb | 116 ++++++------------ 3 files changed, 137 insertions(+), 78 deletions(-) create mode 100644 images/repartition-exemples-par-periode-50-ans.png diff --git a/README.md b/README.md index 60b87c8..3b0018f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ - [ ] Introduction du rapport - [ ] Toute la première partie d'essaies (*Méthodes de classification essayées* & *Observations initiales*) - [ ] Comparaison de perf entre 10 ans et 50 ans (dans *Recalibrage et optimisations*) -- [ ] Intégrer des morceaux de code dans les parties nécessaires +- [ ] Mettre le code de la méthode clean_text initiale - [ ] Mentionner la réduction des données parce que prétraitément très long *Mathéo GUILBERT* @@ -63,9 +63,23 @@ Avant de construire des représentations et d'entraîner des modèles, j'ai appl La suppression des numéros de pages est une étape délicate car leur mise en forme dépends de l'ouvrage et de l'éditeur le plus souvent. J'ai quand même repéré un écriture récurente : *-- [NUMERO DE PAGE] --*. J'ai supprimé ces cas là. +Voici le code qui permet ce tratement : + +```py +# CODE EN ATTENTE +``` + +Soit dit en passant, cette étape est très longue et pour réduire ce temps de traitement et aller plus vite sur la classification elle même, j'ai travaillé sur un echantillon du jeu de données. + +```py +reduced_ds = ds['train'].shuffle(seed=42).select(range(5000)) # Echantillon réduit +cleaned_ds = reduced_ds.map(clean_text, remove_columns=reduced_ds.column_names) +``` + ## Méthodes de classification essayées + ### Observations initiales @@ -73,6 +87,7 @@ La suppression des numéros de pages est une étape délicate car leur mise en f Après ce premier aperçu, plusieurs choix d'optimisation ont été faits : +* augmentation de la qualité des données par radicalisation du prétraitement des données * élargissement de la granularité temporelle : plutôt que prévoir par décénies, j'ai augmenté en périodes de 50 ans. Ce choix vise à capter des tendances lexicale et stylistiques plutôt que des variations annuelles insignifiantes. * changement de la métrique d'évaluation : j'ai utilisé la différence moyenne entre la date réelle et la date prédite (MAE temporelle en années) — c'est plus pertinent que la précision (*accuracy*). @@ -80,16 +95,96 @@ Après ce premier aperçu, plusieurs choix d'optimisation ont été faits : * recherche de la plage d'années la plus pertinente pour la clarification. Avec cela j'espère pourvoir améliorer les performances et retrouver des périodes qui s'approchent des mouvements littéraires connus. -**TODO :** Remplis ici : résultats comparatifs avant/après agrégation en 50 ans, et évolution de la métrique moyenne (graphique à insérer). +### Pré traitement plus radical + +Malgrés le prétraitement déja appliqué aux données, il reste beaucoup d'impuretés. En plus de cela le prétraitement était de loins l'étape la plus longue du processus de classification car je cherchais des expressions dans les textes pour les enlever. + +Pour optimiser ce temps et l'efficacité de l'entrainement, j'ia simplifié les critères de prétraitement : + +* traitement des dates identiques au précedant +* suppression de tous les sauts de lignes et tabulations +* normalisation des caractères en minuscule +* suppression de tous les caractère non alphabetique (comme précédemment) + +**Résultat :** tous les textes sont réduit à une suite de mots spérés par des espaces. + +```py +def clean_text(example): + """ + Nettoie le texte d'entrée + """ + text = example["complete_text"] + date = example.get("date", None) + + # --- Nettoyage de la date + if "-" in str(date) and date is not None: + parts = str(date).split("-") + if (parts[1].isdigit() and len(parts[1]) == 4) and parts[0] == "????": + date = str(parts[1]) + else: + date = str(parts[0]) + + # --- Nettoyage de texte + text = (text.replace("\\n", " ") + .replace("\\r", " ") + .replace("\\t", " ")) + + text = text.lower() + + text = re.sub(r"[^a-zàâäæçéèêëïîôùûüœ\s]", " ", text) + + text = re.sub(r"\s+", " ", text).strip() + + words = text.split() + filtered_words = [word for word in words if word not in french_stopwords] + text = " ".join(filtered_words) + + return {"text": text, "date": str(date)} +``` ### Impacte de la granularité temporelle Pour grouper les données facilement, j'ai fais une méthode `create_period_label`. ```py +def create_period_label(example, period_length=50): + """ + Crée une étiquette de période basée sur l'année de publication. + """ + try: + year = int(example['date']) + start_year = (year // period_length) * period_length + end_year = start_year + period_length - 1 + return {"period": f"{start_year}-{end_year}"} + except (ValueError, TypeError): + return {"period": None} + +dataset_with_labels = cleaned_ds.map(create_period_label) + +df = pd.DataFrame(dataset_with_labels) + +grouped_texts = df.groupby('period')['text'].apply(list) + +period_counts = grouped_texts.apply(len).sort_index() + +plt.figure(figsize=(10, 6)) +period_counts.plot(kind='bar', color='skyblue', edgecolor='black') + +plt.title('Nombre de textes par période', fontsize=16) +plt.xlabel('Période', fontsize=12) +plt.ylabel('Nombre de textes', fontsize=12) +plt.xticks(rotation=45, ha='right') +plt.grid(axis='y', linestyle='--', alpha=0.7) +plt.tight_layout() + +plt.show() ``` +![Répartition des exemples par période de 50 ans](images/repartition-exemples-par-periode-50-ans.png) + +Ci-dessous le graphique d'évaluation des prédictions nous montres + ### Visualisations des différences entre périodes Pour comprendre quelles caractéristiques distinguent les périodes, j'ai généré des nuages de mots par période. Méthode : calcul de TF‑IDF par groupe temporel, puis génération d'un WordCloud à partir des mots les plus importants (somme des scores TF‑IDF sur la période). diff --git a/images/repartition-exemples-par-periode-50-ans.png b/images/repartition-exemples-par-periode-50-ans.png new file mode 100644 index 0000000000000000000000000000000000000000..66a7d6c915c786d261c7e8adecab65bb8c4c2610 GIT binary patch literal 40074 zcmeFac{tW<_dblITavqkP`Fc+3}sB_Arzr9&kZtVh)kJ_C_vLoy;&|^Gj(x|&W5ByCDW+tHKh;m-sPwsiXFii; zR0@S(ru@z_?Uon`%h$bbu>_A?wb+QVSd_gr_KpoJB<+7f`AKtcP>vd#F~y~^LpSyw zX=X;9B&?7*^hxm0Wt1w0!0hGvjl2Afc@cLg1E%=-7rUuAUcC}>XsFxdb2Dcupp~_d zz{4j*i~jtB3Z=$=bdSVef5jaT<2E?N;EG3p+Wli_KYncf*_u*@Ul$Rg8NxG(e*3G1 z2VQd@g}xs8=OxI+=z8@%zx_2&+|_XA8Rt3F-_IuW8c+T0RS2~(qTIHZsE-o<^<=n> zq*cey7imV@EmSibG(_g#uJkq3@-bm>6|FzQ5Z+n$@w_o|Q#YDZb891hn!(nK^?aR) z*SORO(Ox-t&4N8&waD=Oh_j4Zzg)C-n9lAjOXx_~6{*djG*U=W(FfId)U>>XSy68ErsO#i=IXO8e+mg5}hDt>l(Ccd{w@Ep43cE5=+uGWy zJU_iaF`%#F$J%pe=Tj2U9eE#TpCJFL?DoFq!n&8L_S_0ruRd?c6;&2q;B*q~$TuG> zR!P%X{?GUnwJxjy(qw5=$d`1q5 z4oMSmhNo*6tUNpW4&I<6ReiF2?9yV0t~2uDq%_=KPoEm~e_XD3O1`r_>yn~yM7)Y? zwkO-<^D_!nt^1d*U%zf?xez1vIOksX2|uljJJp}5bR$DU)k>VVZynt! zFV4E`Y<6gx3vEti-oAZ1;N?s9f~gEDUB_nUtgl~I2VF#9#10<6SW!{IZPGFIh1Og! zpIAeOdob_*2>h#&ZA?K<-U{!AzlW%Bu|a?$TKAw%ai8vX`iA(*Y{?F`S(?7+TdenF zXF5GCZEww*_pbF2JV*R84*o*_tc&<|w{k)|c1tN}w}E zm4luA-HinKlI>}8+u4CMIwp62@0G`7!fW5+{D{ctB457zy133_XX5_KWOcgNc5^zn z_DZ%{|He$gtgyw9XjQcby1;g}cp}Q-FJ|GL%ZUn{Su-cvW!~mt|$l!gLSXP zN%5F;)XlEeE_9n*7_9>z`|M6ku90iT)_Hlb*lB0I(dEf8Mt2k;fuGQd8VnkY$BpaP zpODcP>(^2`?8j89-hJU2`K$oNph)euvzeQ~X)v6RV$e%j@1zxaG_OA63eCnhGIE#7=rbGmV>bPw5@WAQ+dgC7mg6}qs< z$U+DKFgR6QS}xnmX&TuXtSOhgDUAhRet4^zt^+P{UtGMb)NPNn@3HPed#l=va2^w; z%(sP+a=B@mxpbU&WaQ-Jz$L%<9^YJy-q8}?m`q9k^7*rRaQhqC5OCDx>0VW$)u-gl z$#HC%+Db|f=08(u1}o>9^}{&&9pldc|9wuw^OC^$A*Hw=c5TGDWH2LjroTWJUMNK8 zp^==NkG?t#i(VLW$SV&IkEEoe>E7I2))W}Eqy+QYV77pLQv*et;E0*5De%PY%~g8d zd!g>8y*bmJx-O>C>$xS{Y5MALv!vt4O4i3CzC5SZ4A!qKhNuHm0$vq9rM2_2c9!7_ z!D`zkucoFjDGz^TPQrQt(x#Jr72!UOe7M7M%U9zhL#l?aC>Gv9U4rU}Z2F zc%vO0-LvoDz2;aCef8(GeAtCrj_L9#Luc@|&26kz1HVCC==nWF2kgGT32D3CmQ$B4 z@#KIJI1a=H>rQRHdtL8|NNLo9+w-j^iX2vx_ob_6N(r~Ytieb;(Xwt=UYK#k-{ZVC zyl+zmUMqhrxT~uRj{4H@O!ked3n9&B|=-KF+u91lb4JbT}8+CdW{G1jUGT9 zWz&wjtZzNtlMOScySqE1Br);ZOIdc}?#z%6Uoui5D0QWG2-!?^c^zV8t^K(6)q7g3 zhqjSTGv`2e;b4Zo?7e&Uw6ywQ(9Gy}mOFK8-*2v#?DWsDX5JrkTCJ8dpY5cipddYd zQOS%yrCCr&sDEPdO?-S}M5SiVJ)`c7H~Q-I&TBWrCUOO)U#S*I^Inmaby%HY6Um${ zm@N)?EMXR^WR)29_j3O4-vgF|vy zO};g~Ug5Qe2)XrS+HD`*d%rCRIs*@Xq>(ercL_lxd+b=>4wG_PULZVLZdyTPJF7=m zM^nlw-+5(rkb_LXZZ1a48Rq|o=sbhQDDcE}$Kt&tl!1YPRah8Yn3H^?y=>|NwHb7F zL-?CA_KtSkjg5`zx+TS0lguR+qc>@J@A<#p$)AYI+&4ENva>$gD-zCY8Xge9C;;Kv z+n^9hW(2Xjm{VGJRbO;2~t8M3e1Dqv?Q zf>N`xmf&Xj`s$emjX9fRVF_|!w^mV@jEsysIjHLE=_S~QG96iQ>k;O~Nl~w3VnmCL zmID-oUu@fOy9|3!wK002A;b#jld|TXYxjiI!(6?C!+D-0n=5`BMgXFEV@9ffG|^Od zru59iKj4ZBeWEtLc*`p_7GF0lu ztdQ-vZrL5+@2^T5n$I>C&We00hBDlDZ-cb*R z#rGKhiMVyJMH?38R}~dS*DKDBlg!M$)K$(hGc&z|L|x5-qe7`*JXpb*b0en<^`l>B zWpSTB-#ojjiry!JUAw)$h`*_BbGynPGdU4XMM=5gSiH7oXC0?XS7!G9-Uc7M_pfF{eu$wZ7-FU1?Mpi^$bbjlO>D9 z>%*>&-y*FVKCsqe*L_m^+mddSH&WBpk5MUA+2)9QL6EOWCs|(%GcR738W6G^m8mjf zR)|WKTD-!(;2&T`g-^)B0du4fV<1{;=;m*Toz5L(I(c$!8(Sa2M}iTL&36=f7$^0- zta<>#e*lLGw!6{!uE@#8V^Ih7$5EH9IdyU&?{@y^!_!}2o9i(3#F4)enTXwt(Y^7P z$v5%3{XeMbyer&!QW&QsRDL$S@Rqs?EKqIo-NirN6|})L9I7pFchq)XyWAGF5S!ok z;oVRj#=KW(z2UQ_S^gzD^O6d!B1QXVEu!uH>`Om%cQm4ynVBc1G8==XJ5p5BA*q18 zDns{vyw2HpHV&uNep}Ba5{&b_w{BwkQ;~;D-`?LWuc7tXm}H=?S4~wr2t)ATPz!p@i<2-bJnny*}tQ7_;u5kmQmYkz!j&4uvw!8lmK;n>Fa z1aZ{5NASy+v2+Z*3l4gld)b1tMu#U7_JJYKfFVyZC`gw+07J67E9$mst{c*22$;FZ z%Xn=nc#Q`zU46++?DB33qFP9EjdSg7ySVr7&)qq>(q9#qf8hGlr%#6`z=o~C-KROi zb)A;m7wTWF*o)Jw6kHlJf_#rzx1Vky3V$;e;>6_urfSs&_sGFwlM+p(V*l+|wgdUA z0}c+$lgbJ5$JbRZO?wU)#;t?JPgI^6Z0Ui_2a<5B)tUa4#uE>hC#@H#Dw0J!KZv~k z9HsY})Ra4#%fMFz5m7(V-o}vbgov5}uQ?(lWAvgLm=GCvwZ zRqyTXJu)()P)w2WXv=9MP=Ct>V)9r~%%x)THs`c;$g$XJlOfBi@*}9ZV8pLI_E{i* zudwY*pJmi)+)PVLi^;ouSaZR5ZHjhSvzD`%(0m0sCgI|PZ~j}n*Re+{vEn2yV%}R%pBI_vR9~XwJTP36f&7?vnZ$r)a#Y%*m1+fY1v$AaR`B(WkcVo{&c$+DHr!O=RkojuMLuf@`Sk=J z(&`Tj_A8$MLJPpwZrEd(BTqG&z1L50!OQV#b90<@2#4;>;ySDsdL+oGmed+lgE5bfjsH^@>iD-4EgTe$bvg^CDe=lT@=-G3nAH6887e?6iv$jb!$; ziH_}xRSv|y^djsc(k;H@FiSAyL+k`7B^_5o9eareSJ!3&eW}HfNLg~T?6-VKmc)>ji$;G<5y3o*2 zcX#)RXcyr-vYVNW!Z$>&H48`dto6@28>n~iPed+4K&!z5{2Oql&Z4Owlbw#>HafiU zToQoEN9!NrWknB(yPbg`V5{Bla@+=%jK(OTv0iK&+1n%H$1Ygt0ZLzC&V}XcEhN(b zS~PRbf+hl^x4`IB$@FF0kjQD9rFi;@VOhV1o4g}F(+$?&nfG%UotPlOJbU(Rygq`8 z^QE8g#tPO zR9W`?3M_gXRt#;MZv9~W=g0V4=&W>fbYS2B7STB^UE8GKS!jMGV4Iviz#nHA6&=kn z7%u3ra&NOYEj5*O{l>xNa`I@$h0E(iw>E>gK7anaVESpYSJVRyBeD``1SCrkP&p~? zF9I0!-idoYfG518360R{)F?F}|G7Ilgq zYCmYc1SWx1hK|QLu#fXzOMErF|5Ug#8m2;e@kX+vtS(@oeFu(Ol#}vlS=I9_?CpkR zDM#V@U4$T6C@&)iKvT5R^MX;D7x;)mUH+vCa)q{c+M3SjO#t(NidJiNvDcjwy|z;4 zIXN%_eC7jFBGx|!OLl;zfOYNeX7*{sh9WN#HFIZ9g=lf!tqUD4_XH%Sjg6woZ$*~$ zGjY!3%jIMuRf8e%OxUe0$IaX=xzKaN;}PcA-a#x=m3lA(X{_Cc6d9F1mU`N(&!x58y(l zjziipxpbYPsrT&ecH7IHWBiQ*vx4ig_P{i?=9=rSe;)}NF!>9V{$!a}5|q%p~b#@yAnmkW|yJPX_h4B3shaz=pV z0bsYjy~->Xs#h{8s+0H?7Q8M14MMAZt?&b87QpRnh`9>U!oYQOf4J?LGY51Q*WEh9 z!Q!IA4N~}~g$U9x&US4p`zT0or-1sI?)q?BOG^vDJs8EQU0GFVeKcUjoHcpK61?aK zWEe#cm+!DBD>!eh%^O77j|1Mh2V(^*2+Zmhh^PWHc@kz{LIML196iTyhgn(YG#{Vp zxcqW|EImw?9qcwOw;_XzZ4%7_!uCA;{>E+3K3>zFEXZL28Bg|P{{W{7Vbf&F9RNhZ z)hNgXsE%FxV;c~P!otM>Qy8Uu)Uu70_udE~>oydyojC^P2TR<(bqiLCxy`{H;n5o$ z9%$roFe*Tp9X@>cqs{b1NW1|kxtDzBDopr#vnto^?c2Ao*sbRDnwfNG=z~2Gb1OvM z+aWr!d|>b1y?I~2iYh~!yLNvHDUKa+C@B^7ZD;T`0y880ftEO-@WaBRb z0@4c?u57ZsUojf%HJzxBux;RGF&0B;r44;uK6fupP!R@`#VA+J3qr~-bzTEKZavpPm`eQ;|?^8p+!p%0b$HI zrF8_ka;Oe6d4uuK%|Hcl0nX;hH1nZ>1Lx#i4b9X(g|QPn0rruUO|Vt!7cXrQ0R*Ng z#ZAG#`Q!g|lIxk~!ua@;92~O%BRumlzfsoirSO}Dg#~fvqO6T+w=>Ox92||<&+Y&% z{(j081`ZB|=Of0wfrifCnlQB)a6#l6(NmKXf8WVM&5V-%;scqVr>)K1tj#z`FPthL z#rqpeeT}?{>3XbvoAD=)zaQX3$q>G;Hr?ag!?1Jqh>37qx7#EYoNH5`Qi9UL$Ngsa z4~*CNC*>Fqz3ktZcf~Y<9?6<__SqX&mcMR*PxuJZD;bO$=ik;rDWw3 z`>9z^1F5p!%l!3lc$C)@I5RQT!%K=MkLcGYxPHPtDgRT-<0QskUoUwL7~+Z!amf#- zwf6sd*HTG*(-ZogeHHqjA`ksCXDq-3vTzejtS;?4uV1wTy+Bvq7a1mIZ4dP_{(fCw zVs!oEB@I;Nl?so)?@))v8KzzhRd@LBhZzC0{+>Vsm2md+^55qQvd3JFp9*(y+&6(t8fN#w=C(W_KK9&sM(24VoaBb=C1{7y|(Y zMxDWn@&utTu&T%qDdoZh{pi6jLSTltpG|$g3g?%{$fxST#Ow>a!lghc50mooVGXa= zTU+!vo4TC_+s6^s>!U56Bys?eP&%y;RD->n!-|jt2cBf~fWOQ|0wW>> zpq9M0wg%v(_oM0NUs`}c;C9_aOP#+#LGQxO)*|GLJ-Oy3cJsFiO6s0a#?~1$?*>HC zWr*S_jlo=uL-G(`pX+d!OeUv5IlIvMN5|CE6eO)VQ1pXr{JLpN{AGZGQ2lI&r*Qyh z18Jh<3KbQVEo8+&oksAQYJ9kL>B^NFD3FgzK*lO3BZJ`Mkbr>2wi^oV$;xMigo+-~ z7-CrL*vWRYEXCun8ciyWMWXW5MI&V5sOpv9LUs)t$=!MyOa&xg0Am)RR#UwPVTo!p zpoH#@KC6;Cx4FH-v{B|k0_9uz$O{3U6vy(GyjFihZFxODI zNi9UX$jo6c!o+m9{0Zq++*_=2+`Ftff5p~LoiOSrE>>}K<}*-oWUIaCxMm?^oIQIH zT`zm(3Y5><3T(~!y-vvn10?O*b66aKrC@ZR%FXiiOI`6-BmhnY>!+!G5JxowW|XG0 zuW__hZHP45Udyo@tMR#!3-uio2EYtv_U@fKqhn*l7$6a*q8>dW zz)0HIkhhAtTrG>^LsQ@W#k%l%IHfVQ``)Tx5ic`aibeC}bDPG1=z9vaELw$@ zulg6eK5D}$9EG_y%`IcC2@3Gf1U=9CDXEkG2TxLd_kZ!?nujh8KR^FFZ-i(yh61kE zDzk*m@+B*q`tBXQoyXB#Rj)A41NuAn{G%yr{Kze;Lx>8-SI8c91qUD5V(8a7JWTzC zHe%ylFHgycuYg9*J*Z#GJ2(_<=rrBZ6-T{x()W9K&J>sC5XLf;n$*X+)}2CI1VN%D zHM^JX&6_v2efOokDcN$&2j9_D=ehxKRI)Ma&0!lgjal$GCGG`Y&3op|cZA0>je*)u zb|c_RwE-eylO|lIop=c59nCc+qNk!1`}0nR?~L=6BT?dW zMSP>G2SKeN#KbfX%zKW4zR3A_n8*B4|1n!_`BoJ3S)GQ>J+pjd5;xI_5ERII@dmFJ z#FMAvPtwtE{g6a%C=_zp^AFj5TqTeMxRA2!HNky#oQ0&F$h7!(}E+4|le@?&i@Uqd*qr)AVheIPFcz9okaoPEoG-4(n++z*{W|iIl=^WZC z95Q^FG!HM0%Xw(z8a#sQkV0HRQb`={$vXAP5r;(jpn7O4d+O*ug66{j_1GnL3f>&{+2dx2fS?u)FGFSbA3qaqP%~v7L7%${ z7U<^TGrfFH7x$gHK*051C;s9lng!z{X2d3$#ZqRyi|J5cHue3eP^MiIVuv1hZ+fe7b=43I?;C2D7PL$~(AgHZlBI zep!6{Rzg6b+E%T>gg=vZZx~UwAiZNKNm;;`fq*YlPG~`a1c6^Mc+HV-TwRTJVUUsR zqjek@&$|SPe(;rZ2MJ?O0dBYgI8*u1I~>^gZDs#wc>Wole`e4Bj@hH6%FV&XrVVN5 zGm5jtn==K5^>40sHj67wP6<-)&UG#-hVbZo>PFF+yFe@$#TSh4EbH#HgN*6vH4TlP z5*L?}!P&+2o-Cux+m#1b8I3S~B73E9?;HtSyZf@;Y|kj*h)`WO!jNB0A`=!`H4`9>55#VFjxg6GfALk=1c1L70@ z)jlhI;9|Q$Jn%pyi?VF{hMqevZqflsWUC!2I%_ffQ|})9!&Dj&f|!|HbYn&p0m?G zmL6gT>wOQqwCLmG1IgtmqV_3vDnQ33CZ6WvTC94(D01`8HRorPCu&B9EqA{OCkn8WcfPY#K-C>UXv#L@FyQO)7`i z@PWRRuEN8u!gAml5i0k`y?6aW;K4Trmpz76@7BTENL6Q5!sHJhvjr7Gr(3ta?rb&g zR2j0n(0;RO6jBAUAF@m1KR-z!^1^w&QdiL5MuQT?xugV&j{x=-)*T-ck+QI}+x+>v zJkXGmB9IX9Y9rJ_AsszH!~G44Rt|u3Y|v&GL`jC9h;b6(TsRI~SSl!@`UHb}6H^Np zQ28`UB-i2$Du-~{kZ~*kH71qk=NT2L5lqS*o@>%Mla@QMpT1^cthP7Xglb?mhmOs? zm#EGTXSUzD%^pb_Bkt98N7-OjV*Ud3*Rc@YmCfzpZL=TE;(4Z}KDhLtbP=4pF(j1u z1R9w~;GMcqq4CcIF~@4bAkV$7bA^MZLK>)C($INaN@WMdkE6!<3^A$SpkacPC1d(__h!>lbFJLGbdXU8f${iP8S3jxl1nsaDNhg zj+wbKBNbq5mFIxds&;f^uEVMsrsC0F5|9g6e61i}ZvxrcAh_ooS0b2uS+8ezc1wyu zKDYM{yPInYn47!BQ0G%>!;pn!net5sh>W=0lWjFY?~3`uE{CR9MtvGMVe1Ehom83`aEeMGmu88o$rz)kdf zlICZjgF;e0;5CNLB*%8hc5*wS=4ZUYDMF$1B-^=*;tj z*nnW=(BS;eVgcsNn8+xC&Csl&^RI=hINPI&0L1Dq-K&c(9Nh--0*u0(U-*XV^N%fM z65>~N9rW)W#nwMBE6GP#57r-u1}>?+nAQmC88B>){R~rW+8{VEP!N>kA3l6A*vKEp zH1`P)S5MDDy}c%bb-gC6MtTui99U*KwiS?m0_p@a;Hl8!Q(Ye<2I{M-s%mS=#Yaa+ zyM&<1DDE{ib+16$*($?%`(Z%>#C9~Q%a)6i6F&XgwHN)F@M}y3Oq%H^I1wW$CguiI zK@!{}69|%c(MFxasX~`Og%Ih|&~2LV3ke|zaUf*C;k?uHt;I42lh%y=^qRS~GwOww z+8Qdu0O@lbDANW)gO%5odX5!Lgz-ecDbebg-81$NP37T~*mm0KC}xrFs9@zhyRnM} z6CbP#S~B+Q+L=$szNt-6h>nViY7jAAkoA#aI4;B5f?;Hg+h4*xN|KYp5bgrA1DGlZ zF62yd7aZ5-U{xFd#X$fEws`l?m%mL>nUfVil&F;0a$tx&fQ^$ED5^Y(^VL%HFQp&{bmjEj6(S{UoUA znAGIGT}}2Pu_o6|$9^nGINH1~@BWIx5hUX@cx9~uQUOq#&GfAI?r9b8l5W|pS2A3L zko@g}6$N1*<8DHRaHHBEx$oTaJb3&g#NBOY7nu^0S!0aWg}YDOaZuM3a>m>rwNq#m zRB&5l;?|)dp}djZ0TDhf&{-;!P?iZv=%2)e!Y2UPNzZV%N|r)h3eL@U`U0XZUIBqk z;ACwSo*Nosj4N1=p2T7G5Lj4sl9{Z;7!Je2DfHM73#tc0&XNXJzVW$lg2F5EvYEeD&E@bXk1P)e`HHlvk7AL~h zg!OC1Y?rMny5>8Pl3^*%iUi97_Jt}eAdr#XeN)IyR@>NgH*2ovZX_;XI~SmAXD z2r!7ZlO!6DjssuJd9#f0&(Cn|%`pY$5p*EYLJm2Dv(Z2<+um4S+}tj1%>}3DWM)o~I&Jc&!D3Ih1vT~Z zkIr<>+;@)#$!MypVjX?{YtjodVGeX?Bond=tX7uNzDCqe(2_>tS zw>L?C@*n*7`c-aSP{lq@FoP)rriNT-HOgVes5$l$=-bLUrv8wrB|jZUTF^!-KP1xE zS#Ipnz%K4U%4!QG4vebxur`}JNoAcsF2yT^QunHjQ`m8WVPJIN!a-<-0+q~u5)uGu zV21*Q{Ao~XL83ey^1#54vg}p)T_xNUq67JaLtdU7sT(J_DCBO_0nVV40#bXWpQf`( zye*IVydIL)xP`MrDELlsXA2dXw3~r9E|r-H=#UKO;B(R8GM`4MgA3{2V)7F8f-?@+ zOH}0H_$yb@K$v{j9*uLN@}Oi*$Lc{@#&ha61MUsp!X&<$#Jwmvlm!=Mm^g<&+u2R& z(Aofk9u(!%5HuhKb{?1`x@V&>j)??XENV!Y(=-M9|#=F^B)ZKC1Tc7hos|A)noP*U2=4mg2&$AFtj`e29n1x^R8RU62We zLrpB~Ac4kiioOcr2ozZ2ULagbYIX#PF04;2zUA|Kve3SM{<~%VP`HXO?JKZ^xU|0V z^Jg}-_Y8vJ92!}td3igwn>0|X3T}sRM4cVTdS*U6;yg~61p^K_J=DI2`|_>IijAQq7`t!FWK|Qv|&2{5Zu#m$_e0)5}@IL+d z8A#&>6e}P`LWT$N5Be`Jf=UgDX=oyWDwph^;}|H@K3bbVP7j?7vrE&U8LO+VPC8Vh z;YD+vga}u08#)ESKP0(Y3+*Kdsb?cYc;B|j)EVs=D4pGq)GqRIS9;z4w!rpyON7Bpc3!9UwIrN z_n%`Ma0ZY;0NQPg;7dR1FhR#nbNg+UlX~ID3J4NC3eR(oF3jYocvv(lQWN7Y1fhui6b4N>EBkfW5Eq^HUS>h$2z!C1otpkpRr@j0BQ>ChZ|7E#cBGsZRHT zao4vJ55mK&6D{Ql`&bp1o3|i&sBdTxez=qvk#Jm?mrZi*#<$&SMvMj+qrIlK`jEwI zFlE%IcSy5ScfOUuP7kCEu(ot~RF#FRyg;|2kbpdBPe=_)$%zOE#H zNK|S(xX7qqQl1#K1Iaz&n~MG5nv;~{Tc|vwngXK-sW+^P(6RyLw`b3vTlZ#_SH}I< zIy0nf_E3<8XiQ6oG*EZMULv7t5WFL!;pIP)|8wcE2LDRY3|(X#;@ypmen-#8LJPB- zsHl@zZIqA$h&w?aJCtMO=_gHc2z%t=PrIvt-Ln@gEeW+w?`EIC!JOdd&lggxCHhMX z02372%>brAmi$WC=^@Bbq0I(B|5#a==Yh*4hb#qcfBK9WGK?fv&V+qP73c*L{1H$C zlNCaQfK$Oj%~>l;%Rb%-PWa-}i|P-4+QJ6epZ~ zl6m;(Puc;r7djrHk^9|fFz|+lE?HqDH&>>2mJ&qTz2MF=f4H*|H&8Z}K&icV*>SdQ zxFNv8=Du>^7;cnZMcbkLmC_NAi5YU<9Ri39vwc>LSLNlgfTV;#F>YUDirreLbG6tx zaukD`pp~%X)15utDkgeXQNMX>$ulEx9;oK@KdnsP->r924D^wudHl!w?Am=gNDCo- z$3_h7aPx8iVT{w?)}h>o2$EiK-bwFzpqQYs_NHzf$YtFl_BD3l+({7HidOHahaDlH*k!Y~ zUVG9Z4B$R8c?E?*`^gm`W)ISESIw@9EHz0`_>`U^Gs0+b%0I!eDtZuS`XV*BZV<-r z&Q8rN!}HJ`Y|*hxgbDtUQbRZ%;G>W(v`B5#2S5X$MwoNXT{gt@@#^8!h<3^he0+SZ zdvp8xv?@KGj{AnV;xmAz5SL4kfeM?4hsSXV`lCVop=?*u`!EY_Mtg1q2|R*l{39Z0 zqy6>rhbW`{hwLsghdWrl;5tLd0#Z=~fk98afc4}9=;%UV{iy^qg!$37?ME7mVNFmz zM-URpOG(#j*iF0)I*6s_F?p@89u^kXU`$^BYI$N3C8-P3;Ow(; zXtP=l)O2**s^)Xr*v9rGm}MM?PWiyVBim13eW%Dq8$1;E#mO9@)5-lB1u3cWV_pI# z#QK+-1$lU^#qaQ~-uRopwi9(dmrQx+_p|zBMKw?ySA+ABT;UxBgHQ4sF^Tq==dQ#s z=vTP;Zc?9I|lmMann66Z71LPP|e=`O8T`Hu5jRyZ3%>k`u14!z27?ao@INYC~dPZoMi z=!G*f&)ry#z;}fHeA(ToTe9|<1BB<%4m0`CF9`iJ-tLyLRRqX0Tt=SriN~%-@>{_( zb^!324HVi#za^w=Kt_cM4!5i7_5;lcf+kqrbD+fqc!{8G&`_E6WPOM3fcJ0&q(J<_ z!dPeqNV7Yj;q@%KAr3e3ps)9+GIg^ek0GPpqg}Ti`T7+L@kW_Aj0S03iQqBewVlzj zABP)%hHfU{QN+C>BahW)08z(4{}5aX01D{u$I=;0n_@me@nd2OTt;Y2+G*6 z35%zZXo9rINGVHkE0Ok~LJ{FABq^}DMB~AxAom+_>p_$j26(IQl>cLnf3kpFXF+X-eZ`GYI3q7px8b^J{)a*sYv7GsB zY~$9UU3>t#X&@_kyI^e0y)zo1z*@TjSYWypnqV!V??K$FJJY~+vaNas`bo|D>^?mL zK2I0B5CZII%61d15@zZu^76j@jI_|nBjUIb91;RuD-fmjB$z>~h`87PPdSv}+?x-8 z_aV)ymK^|zj$AEkXy$oc?B!b4)0qYhe!kri!OChNA!<;4`xS{_rK*0n@j*`A$*doCcCWIGr z*Z8OncoF_PH%cYWs-6)KyC%Rs1o_)5y)G$zqfEI@Ql^Z?xcJ)PXMR@oUEKxiUg$$X z-+~UF1v4orDd=T)q;+vCX4|B1+{VCB!t|KS)o5Yh zT7?)H%RiL_x3;!|mT<=Ddy)UJP>xwhf2Q5o$E?&cAW_X$Sv8727%x+@X|waJNndq- zdWbmw@nc|X4=OF}?S)1yBr5_fIQ#VTDis@~;qC|3g)`j{bqJ=siYu~mFI`dnp+<(OUY*@J z7|f{9DQX-Z1F zc+6|#CaF?FHx`F9dkEW*gIuG|fc~s|7p*f{Oig2_<(mj^DpnX^P>a{o%ryaQz9a| zWfVt_$i2GQKC!r6va`C=r;zk3mm9)Io+|m7LmvdV{^!$h+3@MHsv{;$Y%E*@EG z&;A~c?eE>20$po)H6^PWnwFOKUwJ)+{a}WS*j-26&3&M9?F_8Y@ExFD&0uqsf6skj z39EhfBpKsgRbOBK;1e5UQFrwEF2U9axY`=FNrDVE80a-CfGuN8Vflu54gUxF++GgO zx~vU*rWoh7+tRT~E^CK#;W&pb@Y@J+l-rZ!7r&)dq8C+VB?|WMqAMLOt;q0j7LlMg zD@hSsS;55QOu(Wj4SS`0SJLn@{>Ywy19gh97#SuK7;CP<{pfm0 zP>n|wW>?2SQf?*u9$c0w+3W};EwXXXfiYz7EJ%Y*B41I)eyR7u$4$p;aDfWxuM42i z>jHc8K=R@1=a+sXp`o5{P>Wn5pEZ-R%)Nbgo>n4nL)`T1ZH!|flok%omOzVPFuQiR zI=23gHhnr?+{)*|&nGO{?5TGptgA@# zSN*$u1D`B(RM;7E#HxLWRZ|}SvTC5ASsACEFEZIRk;#7Q=i4Ggi9VY%A-F0jK(%DVpjlG^{pIiabF#RMa#Mp}0Wa&-$WBx2(I8Y1Wv zV`ANdyCY~FVe|-o9s+tivTJi9pJJ`&#u{+>Zo;Sui-?B0c-YIf9VUgDUmk zkjd`g0_T*P@!x$38UX(pxPJx?^lbmkIGDr#%s6DR&U)Imu8rtWG-}eIE}U@=P*(w9 zGuXpR4Jakp>tJGHqIYj?eLYfWaddPG`BQ5+)Jv!}lz za2rMQ7EplwRvRj6YNtuKV2cEh7Xi>VhC3i#53mKqiA~sM29|O}(*?;LG|7P2Lm$)@ zJsQTCEQ2AOXw$6*RuW~2zoX_muW_hxlAQVSTYnQ4xZARfR3D!Mm6 z2KhbG&L4>xefKvnt>g(&K>5aeVU)jr6Kw7TuL6I9#b`sAQpf?LzkzqGK;TE%FBFZ=1^Ll*flC@?TmP#Kg;g|sNb zI|{%V?iB)kpEzpMRg^*T;iSraKXhzXR-5qKyu1seEyF?w8pp*IuD@T22SiG@)&fmx z5`er%Pt7JEJxi2;%sHTai88R8YeKqm>S`?uYuv=ryL(0vpa^RJ1?%iMF$ekCUF*3C-6jWOS3^UHB{&Ty>BH1 zs(XmMe43gU)D{7PCm19ByLS&0mzAK)9Fo7w#?^U^J(sbV8xq5H-QSyN_kXh3>;S`x&(ZOAUKPnpM9%1tpzHHIVP}TTd!sD%f)SIQ2^LHebiao~X@GNmaYK z+V$LD^@C<`_W#$WC*}VE-2cx_Pyd?%|L$lk!X6WvSr76fzbmktokFMppsGR)kdZjH z)iP%hQ&U}i-+?G%cX#vtMa zKr{lI2PVFx%1SioD9(@;3dL=-Aj(5LH)%{k`72>cTI4XiR%-!UsX(bw5M;d2Fa>xw z$nURqs&=N|+o>k)%X&4u<`SB4JtK-^2!ucK+s&G{V1vZ%xpFe-id?Q{j$Q(w4iN#i zpB484sVHor3S?+IEuYzx^&}GslZfDb5HZ1)8NlSgyd5tmzp7S)q+x{^NC$uX1s{w> zx#@)-J^i->Rk$`MG!KG~hOPTeR(qi_TZEw-y{{f$rUUuv2>sxattlgUne^$2g-&E4}{+WIM zONtFUtWcK#;QqHthA%@G)hVBzBQVE~7`hu;bfy5>1stO)+gSK_F#%HcMAMEZ$zr|G zE3l}ipN-bh#;+s6CjM1xJm3{6XS^NzrcKk$xM3-7YBH;H=disE0Kf4JqP)m}}2nQ>d5} z?Y0FvWG^8f2TZ|`B91Bebr=CVDkQ`06s3rD?&A}9?n0zCUK60*rj>WGW6B!?o8=q85*eccX)_(0Ciqy!=cWY9CcbK!K8!28c>}Mn-KDGK!aUqyMhe*ufu@s zg4)IHtoNQntfS>x`g#`+X4m&X;le=~hqqRZzlXuc0VXVcy^9I|I*d3(DrH&9Sy#k5 zBLsv8cahq!vHjPfhr@>vSNe7MpP~O>J@jfv^H6_j0lInqafAQu5x|v^AU{7pY$gxn z))!C2=meJjoa_Hi)wm_@hpmdfFrQSL$@|QF@4kNfRs{|MvlC$k!UB8(0_Pvl z`&Dj2Dk3aIxIrssfkzsSXDV?I`O&4t(3E__x|X3JgBQO(_+E4GJn<_6-Mxfr@_6z2p^r}yqGYTz z-0(?b#K>bziJy{w;3kMj#q8d`V~vJ|fbgV;tNZC|M@iz_iJI_eZV`UFN_;5p@XL!Q z-Jiste30i$b``m^B;5IRb@{q0o-MJA%+CH>fgL)cdknn}#qgby^tmE4>5r!An-=fV zSyZ7o;}f1KL>S{NIut(@-m# zGR)1R{@Z)db6hG9+tDUqsNWeMWbtz8RG6Cp4svMLwEp@)I6Pw?1A@gSyR1)7%MaN~W5YUK9 z_}~?t!Q4_3zwYVYq<3==Px+xljPj-ZapUMSrYBvkzLj7(ZHVp39cVEbOXrBc>x%ib z^pF_hk)9`5dh70Wjrj8M!{U$MZ0}JbapT?*Kxyp7|FrOqkiqlWp~v5a2)*1Zh`g?8 zIKU`lq+ACA(dSt(NfP3Q{yzJOYEfCqGB?{I_33sVw7VUG!uwByb9DZ-fI4q?8q4*gJO%*; zB1YN_o-KK9PY7H7?R3lwUitWQUnRJ1dXlzmnTzD?e{>v+4a{~ucBPew=CI73-(2Mp z_dXhK{GMR{u9$+OM!A~G@hw8e#n2xG;vA4B3kVc|LLp};O+_rrg4MC@BtANhn=%ID z#x3g8vVHb1SAL=EFLUbLiz_nsn(oB+n<>Az@`0O-j7(KgaSgjUOMdw9cw=<>+qbZp zS#M;y#@^;WH^qTt_*JjDsej(;?{TQ&kcmGWDs$>2uOVlPS#Gk-8@2G>?(X%qH9az7 z4{;}_ZD=9lo_Mb!#%&v;#xKZz)m8N1snck2Q3(Pg*Q0N;ss7KGdT&$|u0oNNb!9O; zoJL)}8@lFRRLn#16et>5-b3Q;?d^|tHf!tZM(6DS0C|{WpLu)lB@nxR|NH^bJ;t0?o-I&B#1R04^mr z@lF&o7lHh>rnc50t%pVB#}}%;oR_)r6Zw`Yg@s$7R5|~gS722;;>l6uv;{lC#vqqU zq7`%6$X;HRrE4Rq+hkRsO%c{_HIz#q`?3(+VA_YK3Gsis@|G z7#t7~_mN^g>P-^2Wzu~KLoM;sJl)(CcD}mV%2HC}(4lcFWcBH$R^Rn=&sXoWCpq+f zvwzoDbMC-*6=C&Ov@8$weX%4bU#&@4J)#7A8XhQbI_w>YCS~H-*=c|EEZG>kh`Yv$ zZbV1Cc=2gu9&Bn@eWkaBr9Lw=(_U}@x`Z#YkRLs2XkZ}COX~w0jq1HVutR{)fJf+x zhsGli#Y5rY6Jz{?f-cFb^xVzlPLM`6ZH^Xk@%41UnxEX(U2{=Uq4cY)t*P0dD%Lzv za@e)W44+2yF_UO7n)c@pZc;Z9!yj8=uH3z&dH>^p#^M?483iHv+ zRo2cKwRjBN#t?fA39?8({QM!-DvH8K)1aFCrD)*Q4~g5@*pN`MS2THuzjkvIBk^-< zDPE^CH9UE14j)BI2x05jN(KvB6Srvi9$X;H;-)+kJU%=;3_I~6?ky*`w6dad<3??D z^=l^vx122Z&&(40L=D?uU1=gTq`md?$K$v7Eyr*x&6_tLWIk|9qo8P>0%A@0FY~~w zkkJXo9A^l#v9?|Y$rcSZsIGQ%Np-KN;rRb?A2%w4$Iij$+~ycg$Dihn*9>p1_(Zg8 z<-bgR9ag)1r2;Z`IxziTzZ7*9f`uxxGDMO5*RPPFNn*ll(Ms;$M@2^X_joas(!t8p zJtCV({MQg77r82t;~BBH&ph_tM}QmG-8<=#;rowI&7W!`{QY^N$;7VQA;znpKFglR ze<5@7vnpB0K|D|6!`D<*JKy^X%m*u;KAH1?nxS4Kz63UZl8+WX zPD!~^N$=uVwRmMBANJ`6U1mjO;`{gL#wl<3h1kSNNYOO3bcFltIvt1~wlCzBMa1HyRuk3ZnDU z*OME>!ds)9I0SfkRa8}xE*)N8UKnQRF}|#z;F8XDW$_cRq&+=7W@cuf40;h1^y zui*b@>M0(koA~+pbv88}h5v#IY^no3N_6m;-Tc=}j#B?mYhNBtW!trnEy>h2lri(v zWZXz(tSCe(qB4|Xhm09|2-z7bBB4kKB~z4;giOhhjSNkO6f$ILK;n1qp7(vf_kF+b z&tJ#kcphwf-}iN|Yh7!d>s;sJ$eBaClZ1rCUw{3jtgL+O*au+9U9VqP@Y<5K_-2_V zcQgu;*lAxBB4sr@V@>GY*z4Cb3ktpt4LySF@ZY2?a>EsVzt!Y}BciS3k&+LuT3c1r z)MyN9Gg$~M^#`r&s8xV8?jA^r{o0fDqp_x@27FOD+e)DxQ6(jF3kx5xAgX@Nva!q-AelSMO$p>Eov@d2c=CuOMl+`8~B_%$f&uD3Bl@;dYxd5?ZtGyzi!jfqC zfyig*^|s2j6cmJK&we*2%5&<8$I{wCurmAhodKrx=YwzFzKx@iTTpN_S7c6Zu9ue= zWT(G<`-Xd`(W)MIogTW#%foZ{$PtWb(wF3lPfWbLQ=FGK5w}`iUf$5qP%@Kg{?}m# zhs?OR17z~X0$uzs9^#cNEr8oIOZK@|xnrd@{@03!5TTzvkC9A7y|ZV}GN%JdZ@s17 z`T8|!+qT0lruTap$;Yc;OD;yF8aq#DQRhNewM++!@-1}JCR|H%#kgy5ZJHw z%93*Br{dybK>uKNTj0=Yp^LlywqhzCa#?6C`-+am`JE8ODk&+!kh1oU4sq=*6;r;3 zZ8MNs$LpnkN`hkdV|Mm!h5sX*G8h}OX~*|@1xptH&|zkO_!E4EI6l%T)w`kNN91|@ z`0=4bhtPm=L(|{W$46C9RzgDG(()&Cw&>|G!ip_BCr4bv=rVoBQs9n@L9#DfTfcw% zCIpdTkPXl&Wy#LYZfk2xp`!05VT;vlWxtrzi#YyTEC%pMFdv$MpPQy^&nhUWw0q7# zF*7rZNldhKb;BhI`z`(5=VH2?yXh+p=m^AQ8!VFsAk=r3od$o zRP7qD|4k1a>S}NIK))tDXKjiLCPG1MjDL;zsANAKxz9%gd>sd1&=0`5aBaH25zQM4 zii&GkSZYST2h8>Sn2NbA0SS)4fB@kg=P2^(n>ID|_uC#h@~)}rG(_vlsPEprYi%_- zH}?9+=0HecW5SaB(K0hU3M`9_O(oR)4;<*kO6DCYh?_QT;$miGe1+PVqT?%}?v*gJqet_yvg#FD&@whYKJM`y{oEKFwGg1y zw?$rF1Rf9Dk6EaM<_+5P`qIcc_@X^OCsCp>yc)IsGVf!I#rgJan(j&OJwIhp(KIy5 zca$~I8O}*>c)Qo$+BzvD_9=m=W;!@_oZdMa&n zC>ora(spPho;Wdtg*Vu>D>mul*~{S2VdE6!ssHT`F?iTT6OI>-83i&;n#{5z=8KZZA}y|7i%S6Tsi7IMiHQ&47!V1Sn+N_S5W>%|%r6jJeaxB|A?iMNkg#dw5;qj||Mo0^goPlVwn zc#jiinKl^zFV{|Z=kM>2f+!5>4dmt#`XtI78yguZ1kvF229h_GTXFQ z2RCgJ5)uMZxVXV>?Vx4tm4&M*DaTMD*<-(VFUvg}bskPmMURg=DO3>2pL%~ee){xV zcuP#yVUv`QAZTwlnJ?_x25vXPGk<^ef&ok=fS5ZfyO`4uvAzu!t+v(WqR!aGUp+KR zTVDmgSTO|l!t57mP06OIcsPR}zM@-nX~D~r`7#dJs1#Ozf^tYj`!-cH$_W#NO_-R3 zMb%VPqAp#^xqlxEbLHVfrCJ3DV^;s_>FU}uRI?@Xp=j%xOTG%A+~sFvJVNPtY-|jQ z4yeF_=AKzxd{AGXu=du8U9%jH*K3aD=HxWKwx>`ry$uXDj~!tg8#c+vsGVxz>o&C& zJ1;>3whvc5(sGk~-MX`2hvQm<5XLZzAu_1&R(m?~=7cDgdZ)hx1?`-)PP3)hl#~s% z3d_sOj2p(IXclbC;;-M*BOV(uis{ibX3@aCHv`R9L#ZN!Ux%{TWPbs^qkOW5*8MQ#v^oOe4n014{_Y^rOK|y z+ye3O@yzLv7U35V82j=Ca!0Ee83ztr;ZwYzVwG`H7O_`CLIPswPm^ndmKW~f7^yYV zM^nK`J3AsDUv_pjpMb#L?E?v>vR$biB=r5Y&Q#36IUv+pfW?3E<$~<#n+jbg&A>$- zG1SXUxZhl7j8pOtvCr@U+gk-Q3GxVEZ zT%_?RaU0k<&{9$N_(;Kw3yp?Aog{AgQith<00>$XQ_7dt(z5k5VMm`)+GSx_Q@|7rl19Kyv$VGC<4L%IYRtkgC5F>nVH1_3$vJ=={w#%2`lg$s3dy|Bx_H7gp9==q#VZ5Lt>cyNJu2?M4KOD_;}kgB{Z zoq~`^BeenaWCSP}I*3SN&-Rm6e8D8Q`gGd-pf`_3F!yFYU>QvM)ff&7-(+cNiIf)$ zK4=i^4AXOcTNjt2y2`}z4@5z!W|O1iBvD8>~DxdMDF;;GTg&461a9Pv_4OLN5JFpdi?=)Q8xN##i zYIJpV@2CakE1zr@-rAXFS!iz*)n6hE_dh&5Jb$R{=y0%qJIS44utt2Jcis|48{_y# zOFYC|S!xw>0n0q#Oe1CDTb7VKiO zv$F^yb=WJ8_q-r(s}sk80>4BT2D012J|fG-`Q=G8_7)Wvx3sl6o*V-UClOg)crKI_3?sxmUrZiaM(&;2fV`Do@i^lfhi8Cm zc-1ymB6Q0rD0sDaPu_{6mq~!c?aA%=r6VhB*QwvXf1_*P#D|%KqolM{=2whoi9qIE z9m3Naqy(&HZgw`3Ly(?=FoJdd0CH_y!y^?wfgV;TJL!dm1*{iR>iT4K@`2!7Qdn4h zjo@2J>i~NA@buETFAWE?iWoEfxor?MOSrL$n@GvYMRQz$Eg~e0{cM%AjrGVS#Fto^ zU}t?N93o0=%7KgC4-K2qy!Clx#K6bSXtI7BHzMwBl-}$yX1sSV9zV!p+=2Q=Qw>Uj zPE?MpBP{$wI?S%fW@;#FKD|P8<_qO*zpnj@?g?*n^jp$N#D~{AaYL9M>p57ns$vfJ zfrw(yl!OnHsw)Hg+hk;#IBAr@0W&wB{r0U+Rzqh|)o)@U8_jlb6c@R^$`lU{$tV9NN|m_@-+@|iRHggMu1tZ`NiVVZ1$w3n;v zBp?QDzv%%O1)?l5F)_dJDvU^KmanRtit}-IH#=}ZLcaHITQ!GZ=7RRpjkvf@$UXu> zLKJ0sQ|V&1*SUMZ7N9g?c<4}ky?w}dG6sB1Okf(40xRof#S;z0vo;3~g!V>redb5mpyL}6ELZhRGty%VuAf%tdoZ-mGJsA3f z#3yjeFPAj2;ZBPXQ3_;{mLNcvlbv07-hOkMZnyzJaOC$$H5(tC#$BKj`_9iuWNl#X zA%%MLj8740$QM~9B~Ltb>~3T_i;zK1IyeGdn9@g&PCVnPXI;TiOcg``a&oWUzrSTM z;xHj3b`bgMr?sprqMLsU255;m5!EV9jGns<*BG(H5Uj{_>~HhkI?bVpgcH|l<<%`oH6otoxmXT(5tJ%~#%U-+-qWNq`tRRk<< z#jV6dY?K}EC52(>UFtXYnJ~&4BzT>6l7Zpf*lldgW-;>VC7X513PIdREtqMtHvvX1 zlC{>ph@Ip#Qu5w>RK{mCqxUqPd|L?{rNw2?aD{Z?lPXpM)8?(fwOaS zk*#M4nf{&2_5On}dWVS$9DqOt=2wNAh}8C(8%wCFCR|DB>FJ?O8^_vCNxLA&7^MZyUKo zGWz|yP}04jK@nA9i5JR8?p7`wu&@|z{OjT}{l``&;3_3FeK@qb?l(6-{@W`xN_~JU zO*by&&)XNXZ(Rj&x6XwIdr_U1a(d7Wh}4|al6p=q9byJ}GmJ zQMZ}zp2VH9)n@1B#+Ayh4DtOqV<+%wd7U6Io(9t46`s5sCqkIm8Le5UX=|ve#XKl= z5+8{nf!4`T1oW-bSNI z9UBCx=D|!G*3qCyoeU3`n0@PO2sNRU)%=9|(9hdcVN!^qUILIEX;Ws)xPPC2!v+(M zPZypaBg+w)5xh1MQvB}rV5Jf5SQZ@J6VQfcDiaf{73IBv#~{&)KlG?C5=NZV)7{O% z!Xi$>^^{F>FsJEiMq65iBANs-fQD%PKI`lIVspoJ82u>K9>F{fj2-WPx0*Cs{kKv5=TlE3 zOG-)tQak7G|9z^zzpt;4N}Wb-!kkV^j%+G!7;Q z&Fp#46`rN%&r=C5NzcMF3BJKTs7s(1AVndU0j?JlLo~mUmjx9t6w#YEn&Z5 zBpR~J_mOmLnR$6FR4Vnwi`AAwxpPn+FnugYiW^`I;vVGPLue> zaN;nLpP*es7$Fw<4_+QQg;eO~%{MTQJ!>vUAyZ2?i!f-~CEkv64)}Hi@r4M&;l}>{ z)Ow;}7Y4jl;?Nr#qk%)VwpBn_5U0B*Fh#Re*v0CI9g0;4^&;s4Vha-&e_Q>Xt42=@hoxSvu zFp)W|^b^D!L(9}bVMWXdDTrm%mG=w+CPJ;zIE-zNdh->qzyWNoUL6kj^wu_yJIFsW zGaWF_5_u{DZ>e}-00_!X?O@kRm6wp94a&TBsVZQh0}8ke4Pl`qP*s76hC^iP>sNHj zZl##*-rbPBKjT(Pih8fPs9Vf#AZ!09)C5lxGqB=>$fzh3O1$0OM-iaoJV59dwYqr) zEqk>26^LemTQ;|~tz}_>No!0= zND4sg35;~zI`H3l9tv)b8fi<-&CUHaKMy>txu?exxjd2#yzk~exu~k5A^_?}Y$MR= z-y_b5>)LG<$sqRns7r<4jJT|9gfj`kEvS=JJbMP)0pi-G(1Ju1e-4icT(}q09rr!H zK1@T_K1B^54^8$bh%tU(`LGMnHZAiO+OQ!oFpyIZuw$jqWD;x`{gyUoPXOoMw{IU? zEvDIzj*V%ZU%H`{(5%{=wSZ6%3MT`TlTo~a2w{Tk?Cf-Os_|1!J!~;VUk{NuK7PCb zc{avM2FkkNh5#sJCZQu(zqTe8UAxeB1kO^1x$R&SA3b&qmMqB4t?zRpD>fnFZb5+- z2=PLKklvYulSNU%9ViOL3aGR!CJot%*mNdNV0W?nud% z0+rjRjS~yoD$jk-Nlza{O$TY@>Z%1n0M#&QK^xWzX#15{9!(1&T9Do2jYac$%quS8Jd_p zgYnz=XV_nOeDB`9*jUcnUv{zJu*V*GSy`@Dzvbe)Xa=Jfzt_!{Z%4J|VGIpREyCd6|$frlg+3;KiLg8P6BU@7NKD z1Pca)JYq9Fg)m?<@gSm!%{n?f5S(U|?=bQ_~pq zKklt{$Z8##gRkKWQ$P1j*5=X(?!d>}+uO@ag4G&jqMOOdarA2~JgeimGIUv<+*E^` zq+w8itp*1}!WHl>#<5hl!ZDTwEGR|O>S$+ZU>@wl(6A964Vo?AdTfKlD5wOTa&v2I zolYaia8{$RdM3=k*!T+Q9Y}U_a!y0=uC}HIkpu#NKme}J&VuXLhY@q~^VwNgP&2&S zqvGf>(h-(ZWI{U?fGR#N7xi^_cZaYOpv$+x#+Nu=Ha3pFzR&$^JA36kJ^=t2`rYwV zDXS}lK`I1kVdRc^sZ;=YC<&OnI{wkH4**{E_%>)h2BCohvtpn7o`ESqqx7S7 zA2CA_s_xP!LM8kOS5Ic&zi)Cw!5*3=km5ib^qgRiL`7)A0tcRx0Q?S+wlnXo+$A+} zFTj9+NFf43EHHtF4J;5%Hm1Bhscl65aG?$c*1{v9z=t#x517oxvR8rLV$U4Tj9t6x z*KM{Kc=r%NzYvaDC@4ED%j%6H-Z+2$JOa9-hp&Fd)`Fl!9SQf3$EXPDn5D%VIMKDW zwPAk%LQrhKtT!ew$Vgvp93hR{`FICSd=Rg z$Qg>WutuEb7(*XoP|qy&gTJ*sO-2{E-9ZbBbAEnXtc#g77I94gjBuVb#PydYs3m10 z<1$+0i8ZWCsc4@r^aE!5^yyz_W<-vwSO#1(Exd$=&3q>+bzb+5kguT@w9m;&_GR2H zmaCuvAW(@*s~xd4w7~Wes=XH|z}-c6JobPW^5Q?(IbIaMs;jhnc1~0rVb{qNsmP zBBbwjV5Z@Q>#G)=h4?2nldtUtU^zWTf}4Zp59~4`D(a-|hc5zP0RZulw|Yq7DF>^z zy!_flD|dgK%0R$SK7A7v-|&v=w=gT^I~!&ui+bLTylf(oNQEFBPHb=*9!7HmGWH_j zAk^2>ngvmjhfX zEhTlx!eY09fgm4W%Pn>873t)-xZ0E+lVerqKXi3{$7zMNKs8!QFFP}nar40~I$u1V z|6D7*Mq8higc9r@avdBfm(At1p8hy3=QZaQQ}8!1=)ram#F;@4+-5C*t(~2`=5sB9 zJdpd@kOtf_gj9d{@S(HQixxj6Y()#vc32d|p1TWi7*cv_Bq8f-M-kCQUOF0 zH6`SJ@HCWnyTE10%K8k^bA+z2-f&j+Yuo#-?M5VTP`+*=a4CV$CGM;=f?YL~HIFi{ zRI<~n8hUM!cXx%#t|~33&e$y_BNMl1`^592JzqH`pib*=#>;~TZe+4LO1tKrsPV!7 z4BD?XZ?qWNN`{ijS{Esup379?xCV$~K$x*vMpLZZs-)NzEnMpLaKr(qP=G==P65DJ zzrkfGYXU_OaM;^Id%}@5)b9*PSHgbAw(H>ctqLswHW5v{LG2nKvINb>dtk9370A6W zp=aN&3BDhaqg4#_ask+(h>&Ioo0!FxPUKZpt=v#NF`7|*=4S9~qdC+Xp+p5hC5FkDbMmheL5#BjHy-uCXyjjf9Z*~s3`0v<$c#<{sf9h zuTWHBp#ril)UpZ-3vpM-0+Bklv>2~>@aiucVQLz^szK;P=ty9@{IVqC20DRa)8tGs z9u|PBlarH{`PPSy9(_N(Ja8!20>+E_UHglNZA=2kwOqNFE$kf18T6cxVbHEICx>f1 zp#GKgWU@}^4?8`*3-B-3q>P{rvpOg!2o=*MGh4Xk_|2AV?CdE1qr@T&P6o07US0zc zR-b0Z%)?2EiHU6ppnyAp3t-PDt)LK-?R9Mf&REO5!|3{~x#;*SDIxQxlYhMD1X)ZqnCXN0=!6190^z`cU|bv44{8#4`ngxMi&20%UD@%K0^5mGr*H$9oAsH-k}V_xpydjau603VPBgj|WbFWWZpx#D$;yLOp)-!)c>I zo~Tmt7OXl_8*d+8H3})A=L{%xic5!2^&?j7&`(f4?(lrk~{^Q)2j{%FDOQeamCq)eI8mXacO% zYNcf3b_MHb_Oy@_gxonG2iA8l+dF(d6=!w*5y|?@7Wfz}ID7MYT1`)hPrx$g<+SLv z&_5ZLg7}hCKk_PQ8tSISZmjzxvuc);FP|&s3^_X264jYN5kxbNB@T{`I0@=%YY9~w zOAoQQyiHdZ0N}D&UVg+{f?mMerBny;55sZ7NEEUk`l#w^9pl>0PVQNz7vzC;)=A?I zI7_}r)~_b&NEv{>~c#3y^_Q<-4p-LXB9oA#xG2L*^#m(kxa^qE5rB> zPKn*36ttb!E3om}l*x7P)*6sD%2c-)nJ?+<>N=#aANu`jX0Z?>3P8+aY4k;6>o*Yv zNyLAWT)}SK$%0;k7!ysNGK|!8bDILi5XIDwyuGm-s{Je(aQe&}lw$m&0vq80WtG73 zt?8AO!pB1u=mi*874rzJ`a|okQx!W))dBVEEdY1KgC|yXesH~`}6Ay|*Omv(ChWnvRT&s&}0YVxMVkO1OaGfZqE7pk(BEkdG%`C?^3A5 zMeaXuwH(NBI0+ZFT54G-hkrICnm@8C(`kj=1P$IIK6q+*2h>d>LHpl9I5IFp@k zU%w7CYiqX(^uKkO!n z+=1{M$!u;`7ESE)9(v>JS1dq+D?{cZ;GHG6b-GAy|A5K-<+9 z?$bLHcn;PVwYe$`kpSSiR)7>?e}k68c5|C4 z{&{3iiFD*;xnet8+IPX%iParTm>_{_B;Xq42Pm(CRS(t?Nb>b3M#?rJaY4M0S@-4* z|7O4PJKwSw06c+fkI-hC1N0#rOduFxVA?L`W98nFFNRP^;m0sW4nh&%U zb!5NQv4*b^q@%FgZo68Q_K<@g;n{h0e>d~Mwe%X(8O^O6$@mGbBZ*^cYdE{$-P~NG2jg7p*EbB!pc-+BIQ!!VdJy0> zCBhNmC0t43UB6z5?GX^{vF14}dh^f>N)&rI=m|7>c(oOFvHJMA>}|Ll7wO=v1>~(@ zE}jR?6uIq|yH!iGM%E9w!OLVBatD)DQIS($-)IhJu7ZQUd{f;P&nStn*7Jp6mZg!U#VQx4}`T1Foq0g zF5v0maUf($&Y}4PX2Zo2wV-9Wu#Hf$jt=>BaA{pR_hKwgv3o!`NNwD zu53Y?;S6kL4kiV$8WytBzSDWjTr7$<3SPORd|;5yCToMM4Q8TJebymzG!gQNDVV|n z3eANJdH`e^Ya;l}0ck+vaC&q2sg@h<^YQv^soEeT0&FZmj0^fFh6~_F@~**y=l*PK zk&AFnS1+vF$3k03d?>A50an`=kDvQWG5z}Eg8%iakgIxV@-ukOBD3mWFa7h&slE95 zQ?Ah8f8O<XAO=U8VRtd^A3pgX9}(h<^<6p^`F#0bFa7iB0~xekyuYw!&wsto zQ!f0xpw2Fcw!8o5LZ|m*!B%7s4`%+?`y7K=23a2e@8fM=7CSSDC(qsdzuu<+Kd;)X z*emky-4%4q0X*19+AJ2^HvZe%;PY|Xi?;U1^G*CmLkAtB7E8#=>QpDqsj>Eub9DH( NXV<=+1$uTD{vQD&7xMrB literal 0 HcmV?d00001 diff --git a/work.ipynb b/work.ipynb index 0ed7648..c5c8504 100644 --- a/work.ipynb +++ b/work.ipynb @@ -137,12 +137,15 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "91c483b8-ae5b-4f1d-9f8a-dffc8eea16c9", "metadata": {}, "outputs": [], "source": [ "def clean_text(example):\n", + " \"\"\"\n", + " Nettoie le texte d'entrée\n", + " \"\"\"\n", " text = example[\"complete_text\"]\n", " date = example.get(\"date\", None)\n", "\n", @@ -174,106 +177,67 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "39e38bbf", "metadata": {}, "outputs": [], "source": [ "reduced_ds = ds['train'].shuffle(seed=42).select(range(5000))\n", "\n", - "cleaned_ds = reduced_ds.map(clean_text, remove_columns=reduced_ds.column_names)\n", + "cleaned_ds = reduced_ds.map(clean_text, remove_columns=reduced_ds.column_nameds)\n", "# cleaned_ds = ds['train'].map(clean_text, remove_columns=ds['train'].column_names, num_proc=4)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 29, "id": "0474c7fd", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Colonnes du DataFrame:\n", - "Index(['date', 'text', 'period'], dtype='object')\n", - "\\Aperçu des données avec périodes:\n", - " date text period\n", - "0 1888 v congres international sociétés chahitables s... 1850-1899\n", - "1 1716 ordonnance roy reformer quatre compagnies ze r... 1700-1749\n", - "2 1856 souvenir sme année janvier respects double all... 1850-1899\n", - "3 1782 flore bourgogne seconde partie flore bourgogne... 1750-1799\n", - "4 1863 approvisionnement ville lyon lt gt lt gt houil... 1850-1899\n", - "\n", - "Périodes et nombre de textes:\n", - "period\n", - "1550-1599 5\n", - "1600-1649 62\n", - "1650-1699 44\n", - "1700-1749 122\n", - "1750-1799 381\n", - "1800-1849 1066\n", - "1850-1899 2361\n", - "1900-1949 910\n", - "1950-1999 43\n", - "2000-2049 6\n", - "Name: text, dtype: int64\n" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAJOCAYAAABBfN/cAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAjx5JREFUeJzs3Xd8VGXaxvFrkpAQAkkggVBCrwHphCJKlyoqIE0URJSVRXdFwYIoxe4iFnTFCjbWtjYUwY7AIhYITSnSW4AESCCEtLnfP3gzMiSBJGRmSPh9P599X/OcM2fu55mTh1xzmsPMTAAAAAAAwCP8fF0AAAAAAAAlGcEbAAAAAAAPIngDAAAAAOBBBG8AAAAAADyI4A0AAAAAgAcRvAEAAAAA8CCCNwAAAAAAHkTwBgAAAADAgwjeAAAAAAB4UICvCwAAAIDnzJ49W4mJibrhhhtUt25dX5cDABcljngDAACUUM8++6z+8Y9/aM+ePYRuAPAhgjcAFBO1atWSw+GQw+HQhx9+mOd6PXr0kMPh0Lx587xXXAH98MMPcjgc6tKli69LKRLTpk2Tw+HQtGnTfF0K4PLTTz9p0qRJ6tu3r+bMmVPo7Xj793XevHlyOBy68cYbvfJ+AOANBG8AKIbuv/9+ZWZm+roM+MCNN954wXyxwhcOF67ExEQNGTJEzZs31/vvv6+AAK4uBABfIngDQDFTpkwZbd68Wa+++qqvSwFwgYqLi9OYMWP0xRdfKCQk5Ly21bZtW/3xxx968803i6g6ALj4ELwBoJj55z//KUmaMWOGTpw44eNqAFyIunfvrqlTp6pSpUrnva0yZcqoUaNGqlGjRhFUBgAXJ4I3ABQzffv2VefOnbV//349/fTTBX79u+++q+7du6tChQoKCgpSzZo1ddNNN2nz5s25rp99bfmOHTv05ZdfqkuXLgoLC1P58uV15ZVXat26da5158+frw4dOqhcuXIKDw/XwIEDtXXr1rPWc+LECU2ePFn16tVT6dKlVbVqVY0ZM0Z79+7Nse6OHTvkcDhUq1YtZWVladasWWrZsqXKli0rh8Phtu7mzZv1t7/9TXXr1lXp0qUVFhamTp066e233y7wmElSamqqpk2bpvr16ysoKEhVqlTRqFGjtGvXrnO+9rffftOIESNUo0YNBQUFqUKFCurVq5cWLlyY7/fP7vsbb7whSRo9erTrmv/cTvdOTU3VU089pfbt2ys8PFylS5dWw4YNdffddysxMdFt3Q8//FAOh0MVK1bUnj17crz34sWL5e/vr7CwMG3ZskWS5HA4NH36dEnS9OnT3Wo589rczMxMvfrqq+rSpYtrv6tdu7bGjRun3bt359rfb775Rv3791dUVJRKlSql8uXLq379+rr++uv1448/5nvcTj8dfufOnRo5cqSqVKmi0qVLq0GDBpo2bZpSU1NzvC4jI0Nvv/22RowYoUaNGik0NFTBwcFq2LCh/vGPf2jfvn25vl+XLl3kcDj0ww8/aOnSperfv78qVqwoPz+/fF0ecPr1zYmJiRo/frxrv6lZs6YmTJigI0eO5Pn6ffv26c4771RMTIzKlCmjcuXKKTY2Vs8//3yul6ecfunC+vXrNXToUFWpUkX+/v6ufepc13hv3LhRo0ePVs2aNV37d/fu3fX+++/nWWdmZqaeeeYZNW3aVKVLl1bFihU1aNAgt/kkL0X9uw0AXmEAgGKhZs2aJsmWLl1qP/30k0my0NBQS0hIcFuve/fuJsnmzp3r1u50Om3kyJEmyQICAqxbt242bNgwa9CggUmyMmXK2Jdffpnn+957773mcDisY8eONmTIENfrwsPD7c8//7RJkya5tnvttdda9erVTZJVrVrVDh8+7LbN77//3iRZhw4drH379lamTBnr27evDR482KpUqWKSrHLlyrZ582a3123fvt0kWY0aNeyqq66ywMBA6969uw0fPtyaNWvmWu/999+30qVLmyRr1KiRDRgwwLp162YhISEmyUaPHl2gsU9JSbH27dubJAsJCbErr7zSBg8ebFFRURYREeEa16lTp+Z47TPPPGN+fn4myVq0aGHXXnutXXbZZRYYGGiSbPr06fmq4dChQzZq1CirW7euSbKOHTvaqFGjXP/7+OOPXevu3bvXmjZtapKsQoUK1qNHDxswYIDrs6xVq5bt2LHDbfu33367SbLLLrvMMjIyXO179uyxihUrmiR77733XO2jRo2y5s2bmyRr3ry5Wy2vvPKKa73k5GTr0qWLSbKyZcta586d7dprr7WGDRuaJIuIiLBVq1a51TJv3jxzOBzmcDisXbt2NnToULvqqqusVatW5u/vb//85z/zNWZmZlOnTjVJNnLkSIuIiLCoqCgbPHiwXXnlla79oWPHjpaamur2ut27d5skCwsLs/bt29vgwYOtb9++VrVqVZNkFStWtC1btuR4v86dO5sk+/vf/25+fn7WuHFjGzZsmPXs2dPmz59/znrnzp1rkuyqq66yunXrWnh4uF1zzTU2YMAAK1++vEmyhg0b2sGDB3O8dsmSJa51atWqZVdddZX16tXL1dazZ09LT093e82oUaNMkt1yyy0WFBRktWrVsiFDhlj//v1t5syZZvbX72vnzp1zvOfnn3/u+l1r2LChDRs2zLp162b+/v4myW666aYcr8nKyrJrrrnGJFlgYKD17NnThg4darVq1bLSpUvb3//+d5Nko0aNyvHaov7dBgBvIXgDQDFxevA2Mxs4cKBJsgkTJritl1fwfvHFF02SRUZG2urVq13tTqfTFU7Cw8Nz/EGf/b5BQUH2zTffuNozMzNt8ODBJskuueQSi4iIsLi4ONfylJQUu/TSS02SPfzww27bzP5DXpLVq1fPdu7c6VqWmppqgwYNMknWvn17t9dlB29JFh0dbZs2bcoxTmvXrrWgoCArXbq0/fe//3VbtmPHDlcgfeONN3K8Ni8TJ050/aG/d+9etz5effXVrprODN6LFi0yh8NhkZGRtmTJkhx1RkdHmyT74Ycf8l1LdlA68/PN5nQ6rWPHjibJxowZY8nJya5lGRkZdtddd5kk69q1q9vr0tLSrG3btibJ7rnnHtf6l112mUmy8ePH53iv7P0mty8csl133XUmya688ko7cOCA27Knn37aJFn9+vUtMzPT1V67dm23ff10Bw4cyBHUzya7Rkl29dVX24kTJ1zLdu/e7foC6d5773V7XXJysn366aeWlpbm1p6enm733XefSbK+ffvmeL/s4C3JXnjhhXzXmS07eGfv/4mJia5lR44ccf1ODRs2zO11+/fvt4iICHM4HPbvf//bsrKyXMsSEhKsW7duuX7Rk70/ZY/B6a/Lllfwjo+Pt7CwMNfvuNPpdC375ZdfXIH/5Zdfdnvd888/b5IsKirKfv/9d1d7RkaGjRs3zlXPmcHbE7/bAOAtBG8AKCbODN4bN260gIAACwoKcjt6mVfwzj5S+txzz+XYttPptGbNmpkke+SRR3J930mTJuV43apVq84aMv773//mGvJOD96ffPJJjtcdOHDAypQpY5Js+fLlrvbTg/ebb76ZyyiZDR061CS5jtad6eeffzZJ1rp161yXn+nEiRNWrlw5k5TrGQH79+93HYE7M4C2a9fOJNmHH36Y67bff/99k2SDBg3KVy1m5w7eX375pevo+ulHrrNlZWXZJZdcYpJs3bp1bsu2b99u5cuXN4fDYV988YXdfffdrrE6efJkjm2dK3j//vvv5nA4rGrVqm5fAJyub9++JskWLFjgaitTpoyFhYXlPgAFlF1jcHCw7d+/P8fyBQsWuM4eOfOo99lUrVrV/Pz8cvQrO3h369atUPWeHrxP/4Is29q1a83hcJifn5/t3r3b1X7PPfeYJLvtttty3e6ePXusVKlSVrFiRbeAnL0/NWjQwO3Lj9PlFbwfeuihs/4uzZw50/XFyunq1atnkuzFF1/M8ZrU1FSrXLlyrsG7qH+3AcCbuMYbAIqphg0b6qabblJaWpoeeOCBs667Z88e17XWo0aNyrHc4XBo9OjRkqTvv/8+12307ds3R1v9+vXztTyv62HDw8N11VVX5WivVKmSevfuLenU9aW5GTRoUI42p9OpL7/8UpI0dOjQXF/Xpk0blS1bVqtXr9bJkydzXed0q1at0rFjxxQZGemq6XSVK1dWz549c7QnJCTo559/VnBwsPr375/rtrOvmf3f//53zjry64svvpB0anxye4SUn5+fOnXqlOv71qpVy3Ud8vDhw/Wvf/1LYWFhev/99xUUFFTgWhYuXCgzU58+fVSuXLlc18ltDNq2baukpCSNHDlSv/32m5xOZ4Hf+0w9e/ZU5cqVc7RfeeWVioiIUHJyslatWpVj+Zo1azRr1izdfvvtuummm3TjjTfqxhtvVGZmppxOp/78889c3+/aa689r3qbN2+uFi1a5Ghv2rSpWrZsKafT6Xate/bnntd+X61aNdWvX1+HDh1yXad/umuuuUb+/v4FqjH7dzO3OUWSxowZI0nasmWLaw7Yu3eva8yuv/76HK8pXbq0hgwZkqPdE7/bAOBNPNQRAIqxadOm6e2339Y777yjiRMnqlmzZrmul32jsoiICIWGhua6Tt26dd3WPVNudzQuW7bsWZdnh628/gjOvnFbbmrXri1Jud7sq1KlSipTpkyO9sTERCUnJ0uSqlevnut2z1y/WrVqZ10n+/1r1aqV5zrZtZ5u+/btMjOlpqaeM7QeOnTonLXm17Zt2yRJDzzwwDm/kMntfa+66irdfPPNeuWVVyRJL7/8surUqXNetbz22mt67bXX8l3Lv//9b1155ZV666239NZbb7luENatWzfdcMMNhbq7dm6fUbZatWopMTHRbV9LSUnRDTfcoI8//vis283e33Lb5vk4W721a9fWqlWr3OrNHuvLL7/8nNs+dOiQGjRo4NZWmHqz54q8ag0PD1eFChV0+PBh7dmzR1WrVnXVHBkZ6TZ/nC637XnidxsAvIngDQDFWJUqVfTPf/5Tjz32mO677z7XUS9P8PM7+0lS51peWGaWoy04ODjXdU8/MprXUbjTFeYobn5l11K2bNlcj857+n0vu+wy15cpeWnSpEmOtsTERNeRRUn66aefcj0CWZBaWrRooebNm5913Xbt2rn+OyYmRps2bdJXX32l7777Tv/73/+0dOlSfffdd5oxY4Zee+21XI+Wnq/T97X77rtPH3/8sRo1aqTHH39csbGxioyMVGBgoCTp0ksv1YoVK3LdP6W891FP1Zs91tdee+05n9sdERGRo80b9Z6PC+l3GwAKg+ANAMXcPffco5dfflkLFy7M8zFL2Ud+so8a5XbUO/uImTePEu3YseOcy6Kjo/O9vcjISAUHBys1NVUzZ85UZGTkeVb413jkp9bTZR+Vczgcev311z32xURe73v11Vdr4sSJBXqtmemGG27Qnj17dM011+jHH3/U008/rS5duuR6SUB+a+nYsaOef/75Ar02ICBAffv2dV3CkJycrFmzZmn69On629/+pgEDBpwzYJ5u+/bteS7LbV/LfhTWe++9l+uZJLmdrl2UClpv9erVtWXLFt1zzz1q06aNR2vLVq1aNW3cuNE1d5wpKSlJhw8fdq17+v9PSEjQ8ePHcz3qndvvkyd+twHAm7jGGwCKubCwME2ePFmSdPfdd+e6TnR0tOvoZ27PEjYzV3vXrl09Umdujh49qgULFuRoP3TokBYtWiRJeT47ODf+/v664oorJOmszxAuiNatW6ts2bJKSEjQV199lWP5gQMHcm2vWrWqmjVrpmPHjrn6UhSyj7jm9kxmSerTp48k6YMPPsjzaGxeHn/8cX355ZeKiYnR22+/rTfeeMP1TOmdO3cWupbPPvvsvK+5DQ0N1bRp0xQeHq4TJ07k+dz5vHz11Vc6ePBgjvaFCxcqMTFR5cqVU+vWrV3t2YGxZs2aOV6zePFiJSQkFLAHBbN27Vqt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rvbkkIpKDqmoiKTdKp3+1+WER8pVUUpweUUd2a6AzL8OeCSE19DJwLKqeniLIoJOatKkSUpMTFRqaupF8TnRJ/pEny7cPu3fv1/55bDTvy64gIwbN05ffvmlli1bpujoaEnS/PnzNXr0aLejz5LUtm1bde3aVU888YTGjh2rnTt3ul2vfeLECYWEhGjhwoXq06ePGjRooNGjR+u+++5zrbNw4UL169dPJ06cyBG8czviXb16dSUmJio0NFRSyfnGpiR+C0Wf6BN9ok/0iT7Rp5y1x8XFKTY2Vre987WiGzZ1W/9CPeK9b9M6zRndT8uXL1fr1q1z9CmvvkrF93OiT/SJPl24fTp69KjKly+vpKQkVy7MywV5xPu2227T559/rh9//NEVuiWpcuXKSk9P19GjR92Oeh84cECVK1d2rfPzzz+7bS/7ruenr3PmndAPHDig0NDQHKFbkoKCghQUFJSjPSAgQAEB7kOYvUOcKfsDzm/7mdstTLvD4ci1Pa8aC9pOn+hTXu30iT5J9CmvGgvaTp/ok+SZPv31Po5TQftMDofMUZB2P5kjlzfNo/1UoC5Au5+/nHIoPT1dfn5+cjgcOfp0upLyOZ2rnT7RJ4k+5VVjQdsL06f8uqDuam5muu222/Txxx/ru+++U+3atd2Wt27dWqVKldK3337ratu0aZN27dqlDh06SJI6dOigdevW6eDBg651vv76a4WGhqpx48audU7fRvY62dsAAAAAAKCoXFBHvMePH6/58+fr008/Vbly5VzXZIeFhSk4OFhhYWEaM2aM7rzzTlWoUEGhoaG6/fbb1aFDB7Vv316S1LNnTzVu3Fg33HCDnnzyScXHx2vKlCkaP36866j1rbfequeff1533323brrpJn333Xd6//339cUXX/is7wAAAACAkumCOuL94osvKikpSV26dFGVKlVc/3vvvfdc6zz99NO68sorNWjQIHXq1EmVK1fWRx995Fru7++vzz//XP7+/urQoYOuv/56jRw5UjNmzHCtU7t2bX3xxRf6+uuv1bx5cz311FN69dVXeZQYAAAAAKDIXVBHvPNzn7fSpUvrhRde0AsvvJDnOjVr1tTChQvPup0uXbpo9erVBa4RAAAAAICCuKCOeAMAAAAAUNIQvAEAAAAA8CCCNwAAAAAAHkTwBgAAAADAgwjeAAAAAAB4EMEb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rVq11L17d0VERBRFbQAAAAAAFHuFDt7Tpk3TE088keOxYoGBgbr77rs1Y8aM8y4OAAAAAIDirlCPE3vooYc0Y8YM9ejRQ19++aW2bt2qrVu3auHCherRo4ceeeQRPfTQQ0VdKwAAAAAAxU6hjnjPmTNH/fv316effurWXrt2bfXu3Vv9+/fXiy++qAceeKBIigQAAAAAoLgqVPBOSkpS796981zet29f/fDDD4WtCQAAXOR27dqlhIQEX5dRIJGRkapRo4avywAAXIAKFbw7duyolStXaty4cbkuX7lypTp27HhehQEAgIvTrl271CgmRqknTvi6lAIJLlNGG//4g/ANAMih0Kea9+7dWxMmTND48eNVp04dSdK2bdv0/PPP66efftKiRYuKtFAAAHBxSEhIUOqJExry8IuqVLu+r8vJl4Pbt+j9KeOUkJBA8AYA5JCv4F2uXDk5HA63tszMTD333HN67rnn5Od36h5tTqdTkhQUFKTmzZsrKSmpiMsFAAAXi0q166taTHNflwEAwHnLV/AeNGhQjuANAAAAAADOLV/Be968eR4uAwAAAACAkqlQz/EGAAAAAAD5U6ibq2X78ccftW3bNh05ckRm5rbM4XBowoQJ51UcAAAAAADFXaGOeMfFxalhw4bq2rWrbrrpJt11112aOHFijv8V1I8//qj+/furatWqcjgc+uSTT9yWm5kefPBBValSRcHBwerRo4e2bNnits7hw4c1YsQIhYaGKjw8XGPGjNHx48fd1lm7dq0uv/xylS5dWtWrV9eTTz5Z4FoBAAAAAMiPQgXvm2++WQcPHtScOXMUFxen7du35/jftm3bCrzdlJQUNW/eXC+88EKuy5988kk999xzmjNnjlauXKmQkBD16tVLJ0+edK0zYsQIbdiwQV9//bU+//xz/fjjjxo7dqxreXJysnr27KmaNWvqt99+07/+9S9NmzZNL7/8csEHAgAAAACAcyjUqeYbNmzQjBkzdMsttxRpMX369FGfPn1yXWZmeuaZZzRlyhRdffXVkqQ333xTUVFR+uSTTzRs2DD98ccfWrRokX755Re1adNGkjR79mz17dtXM2fOVNWqVfXOO+8oPT1dr7/+ugIDA9WkSRPFxcVp1qxZbgEdAAAAAICiUKgj3vXr1/f648W2b9+u+Ph49ejRw9UWFhamdu3aacWKFZKk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ujkcDhs9erT9/vvvvi6xREhMTLSWLVva5MmTXW3fffed+fv7W58+feyrr77yYXUlx9GjR+2yyy6z++67z9W2ZcsWCwwMtBYtWthrr73mw+pKjn379lnt2rXt3nvvtZSUFNuyZYtNnTrVHA6HTZ482Y4cOeLrEksE5mfvYH72DuZn72Gf9g72ae9IT0+3W265xcaPH+9qO3bsmHXq1MkcDof169fP1e50On1Rok9cRF8xlBz79+9XWFiYxo8fLz8/P5UrV05t2rRRjRo19NZbb+nJJ5/0dYklQnJysvz8/DRs2DCZmdLS0tSkSRM1adJEcXFxmj17thITE31dZrGXmZmpEydOqHv37jIzpaSkqG7durr00kvlcDj0zjvvaN26db4us9jbuHGjoqOjNXnyZJUpU0b16tVT586dVa5cOT3++OOaOXOmr0ssEZifvYP52TuYn72Hfdo72Ke9o1SpUtq9e7cCAgIknRr3smXL6oorrtANN9ygTZs26d5775Wki+rMAoJ3MXTs2DH98ssv2rFjh6RTO2xAQIBiY2P12muv6a233tK7777r2yJLgOPHj2v16tXavXu3HA6HgoKClJKSoqioKD377LNauHCh5s+f7+syi72UlBRt3LhR+/btk8PhUEhIiHbv3q2UlBTde++9Wrt2LftzETh27JhWrVrlmjckKTw8XFdccYWefPJJPfnkk/rqq698V2AJwfzsHczP3sH87D3s097BPu15GRkZOnnypMqVK6cDBw5o3759CggI0K5du/TCCy/osssu0zXXXKNly5bp5MmTvi7Xu3x5uB0Fk30qxoEDB2zAgAF2xRVX2JtvvmmLFy+2ChUq2O23325mZiNGjLAJEyb4stRiKy0tzfXfGRkZdvPNN1vt2rVt5syZ9vbbb1v58uXt1ltvNTOzu+++2wYNGmTp6ekX1WkynnDfffdZqVKl7J577rGnn37awsLCbOzYsWZmNnv2bGvfvr0dO3aMcT4Pv//+u3Xu3NluvfVWW7Rokf30009WoUIFmzRpkmVlZVmPHj3smWee8XWZxRbzs+cxP/sG87PnsE/7Bvu0ZyQkJLj9vHz5cgsLC7MOHTrYwIEDrUyZMq5x/uOPPywwMNDWrl3ri1J9JsDXwR/nlpiYqBMnTujo0aNq2rSpKlWqpLFjx+rNN9/U+PHjVbFiRd1888164oknJEknTpxwO6qF/Nm0aZNmz56tUaNGKTY2VgEBAfrb3/6m0NBQPfHEE6pSpYpuu+02zZgxQ5J09OhRHT16VKVKlfJx5cXL3r17tXv3bu3bt089e/ZUcHCw7r//foWGhuq1115TVFSUJk6cqClTpkiSDh06JEkqW7asL8sudjZv3qyVK1dq2LBhKlWqlGJiYnTdddfp/fff15AhQxQSEqJRo0a5Tn1OT0/X2rVrfVx18cP87B3Mz97B/Ow97NPewT7tHZs2bVJMTIz+/ve/6/nnn5ckXXrppfr222/1n//8R+np6Xr22Wd18803y8y0d+9eNWjQQFWqVPFx5d5F8L7ArV27ViNHjpQkHT58WA0aNNATTzyh3r17q3fv3tq+fbucTqfq1q0r6dQfz6VKlVLz5s19WXaxc/LkSd1+++365ptvJEkBAQFq2bKl2rRpozZt2ujee++V0+lUVFSUpFN3u0xPT1eLFi3kdDrlcDguqmtUCmvt2rXq16+fatWqpQ0bNqhatWoaMWKExo0bp3vvvVd/+9vf5O/vr9DQUNdrDhw4oJiYGGVkZCggIIBxzoejR4+qY8eOSkxM1PHjxzV27Fj5+/tr7Nix6t27t1JSUpSenu6aJ1JSUlSuXDnFxsb6uPLihfnZO5ifvYP52XvYp72Dfdp7fv/9d0VEROijjz5SRkaGXnrpJUlS69at1bp1a7d1HQ6HFi1apNDQUNc14BcN3x5wx9ls27bNqlWrZg8++KD9+uuvtmbNGmvUqJHVq1fP5s6daykpKTnWf/DBB61ChQq2ceNGH1VdfN15553Wo0cPq1mzpl1//fX2yy+/uC3Pysoys1N3v5w8ebKFhYVxh+IC2Lt3rzVq1MimTp1qCQkJlpWVZcOGDbNSpUrZjTfeaAcPHjSzv07Z3bRpk919990WGhpq69ev92XpxdKwYcPs2muvNYfDYU899ZSdPHky1/X2799vDz74oFWsWNG2bNni5SqLL+Zn72J+9izmZ+9jn/Ys9mnvWrBggbVq1crmzp1rUVFRrkskzMwOHTrk+u81a9bYLbfcYqGhoRYXF+eLUn2K4H0Be/XVV61Xr16Wnp7umoBfffVV8/f3t9atW9tHH31kZqcmjYSEBBs2bJhFR0fbqlWrfFl2sZM9tjNmzLA5c+bYzz//bDVq1LDRo0fbrl277KGHHnJN0IcPH7bx48dbTEwM41xAX331lbVp08bi4+MtIyPDzMzi4uKsSpUq1rp1axs/frwrrBw9etSmTp1qbdu2tdWrV/uw6uInMzPTsrKy7Morr7T33nvPXn31VXM4HDZ79mwzM3v33XctOTnZzMx2795tN9xwg0VFRbE/FxDzs3cwP3sH87P3sE97B/u0dx08eNAGDhxo8fHx9uKLL1qlSpXsrrvusn/84x/27LPPWmpqqqWlpdl3331nI0eOtDVr1vi6ZJ8geF/AJk2aZE2bNnVr+/DDD23MmDHWtm1ba968uduyzZs32/bt271XYAmzaNEiGzJkiJmZff3111a7dm2rV6+elStXzrZt2+Zab+fOnbZ3715flVlszZs3z6pVq2bHjx93tS1dutS6dOli48ePtwYNGrj9gxcfH+/64wP5l/1H3dNPP20zZ840M7PnnnvOHA6HtWzZ0lq0aGH79u1zrb9ixQrbunWrT2otzpifvYv52bOYn72Pfdqz2Ke969ChQ1avXj375ZdfLC0tzd577z0LCQkxh8NhO3bscK2XkZFhqampPqzUt3ic2AXsyiuv1MGDBzV79mylpaVp/fr1GjlypC699FJ988032r17tz7++GNJktPpVP369VWrVi3fFl1MnDx5UllZWW5twcHBWr9+vSSpR48eqlevnnbs2KEuXbq4Pe6gRo0aqlq1qlfrLa5OH+c+ffooPT1dt99+u3799VctW7ZMffr0Uc+ePV034vjwww8lnbqeLSoqShUrVvRZ7cXJoUOHtH//fkmSn9+pab1UqVL64osvJEm33367YmNjFRcXp27durndzKR9+/aqU6eO94suhg4dOqR9+/ZJYn72JjNjfvaw3r17u647Zn72HDNz/Tf7tGf16dNHaWlp7NNe4HQ6FRkZqWbNmsnMFBgYqI8++kilSpVShQoV9PTTT7vWDQgIUOnSpX1YrW8RvC8g69ev1+TJk+V0OiVJjRs31q233qoHH3xQjRs3Vrt27XTzzTfrpptuUkBAgMqVK6fDhw9L+uuPbZzbhg0bNHr0aK1atUoZGRmu9pYtW6pevXqSpFGjRumPP/7Qc889pz/++EOTJ092/QOJ/Dl9nFNTU1WpUiV98MEH+vrrr3XVVVdpwIABuvXWW3XfffdJkurWravjx49LEjczKYANGzaoS5cu+vHHHyVJmZmZkqRWrVqpQoUKkqQbb7xRe/fu1cSJE/XCCy/okUcecfsDEOeWPc5Lly6VJDVo0ID52QP279+vhQsX6ptvvtG2bdsknZoPWrRowfxchE4f582bNysqKkoffvgh87MHHDt2TEePHtXx48fdxq558+bs00Xo9HHOyspy/c3x1VdfsU8XoR07dujll1/Wv//9b3377beS/vo3rlq1avrf//6nUaNG6ccff9SCBQv09NNP6/nnn9ddd93ly7IvGBfZreQuXGvWrFHbtm31wAMPuHbgyMhI3XnnnRo0aJA2b96siIgIdenSRdKpuxBXr179orsN//lav369Lr/8cg0ePFhRUVFuj+UICAjQvn37VLlyZTkcDn3++edq3bq1atWqpXvvvdcVYnBuZ45zcHCwJKlz587auHGjtmzZooCAAF1yySWSpIyMDDmdTtcRQTPjH8J8WLNmjS677DKdPHlSTz/9tAYOHOjapxs0aKBDhw6pdevW2rt3rxYuXKhWrVopIiJCTz75pMaNG8c+nU+nj/OsWbM0cOBAVa5cWRMnTmR+LkLr1q3TgAEDFBISogMHDqhz5856+umnVbVqVQUGBmr//v3Mz0Ugt3F+5pln1KVLF23atElbtmyRv78/83MRWLduncaMGSOHw6H9+/dr8ODBGj58uNq0aaNSpUrxN0cRyWucu3Tpoo0bN+rPP//kb44isG7dOnXt2lV16tTR8ePHtXHjRv3tb3/T+PHjdckll6h27dqaMGGC6tatq88//1ytWrVSs2bNNG/ePLVt29bX5V8YfHWOO/4SFxdnISEhNnHixHytn5GRYffcc4/VqFHDdu/e7eHqSo6kpCTr3Lmz3Xbbba627du32+bNm23//v1mZvbUU09Z165d7ddffzWzv+52eeYdipG33MZ527Zttnnz5lyvUzt8+LDdc889VqlSJfvzzz+9WWqxFhcXZ8HBwTZ58mRbsmSJ1a9f3xYsWGBmp+aIxMRE69Onj7Vu3dp+++03t9cePnzYFyUXS7mN82effWZmf11Pfzrm58LZtm2bVa5c2e69915LTEy0+fPnW9WqVW3Dhg2udWbNmmVdunRhfj4PuY1zlSpV3Mb5dMzPhbd161aLioqyCRMm2M8//2xPP/20NWnSxBo3bmzffvutmZ3ap/mb4/zkNs6NGze2xo0b29dff51jffbpwjl27JhdfvnlNmHCBDMz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uVhinL2jIPNG9h/UK1eutNq1a/OHRgEwzt5xrnnj9FB4yy23WI0aNaxOnTp26aWXWlxcnC9KLpYYZ+8pyFibma1atcrGjRtnoaGh3FW7ABhn7zh27JgNGTLExo8f73ad9r333mv9+vXLsf53331nM2fOtH//+988mi2fCN5e8t1339nQoUNt8+bN9vPPP1vp0qXP+sfdI488Ym3btiWkFFBcXJxdd9119uuvv9q6deusUaNGOSbo04/IZv/MjagKhnH2joLOG2anHnmVkJDgxSqLP8bZOwo6b6xZs8a2b99uiYmJvii32GKcvSc/Y316gFm9erU99thj9vvvv/ui3GKLcfaOlJQUGzRokL344otu7W+99ZY1bNjQ0tLS3A6soOAI3l5y8OBBW758uWti+Omnn1x/3O3cudO13unB5PDhw16vs7hLSUmxdevWucZ5zZo1rgl62bJlrvXODIUoGMbZO/I7b3BH7fPDOHtHfueNkydP+qrEEoFx9p78jvXpp0Pz72LBMc6elz22Bw4ccLVl/5v3/vvvW/Pmzd3WP3TokNdqK0kI3j6QPRmsXLnS7chKRkaGPfPMM7ZgwQIfV1gyZI/z2rVr3b4dzczMtOnTp9ubb77p4wpLBsbZO841byxcuNDHFZYMjLN3MG94B+PsPeca63nz5vm4wpKBcfaO079o/uijj6xJkyaunydNmmRDhw7ly7tCcJiddjtLeE1WVpb8/f31yy+/qFOnTq47Bn766adatWqVGjRo4OMKS4bscV6/fr0GDx6shg0byul06ptvvtEvv/yiJk2a+LrEEoFx9g7mDe9gnL2DecM7GGfvYay9g3H2HDPL8TiwBQsW6I477tDWrVt1//33a+bMmVq6dKnatm3royqLMR8H/4tG9inkp1+Dkv1t0vLly83hcFj58uXtt99+80l9JUX2OJ/+TV32f69atco1ztyw7vwwzt7BvOEdjLN3MG94B+PsPYy1dzDO3pE9zklJSXbkyBFX+8cff2wdOnSwBx980AIDA/m38DzwHG8Pyn62a/Y3c3v37tX777+vkydPSjr1XM3U1FR98MEHKleunJYvX65WrVr5suRiKXucMzMz5e/vrz179mjWrFlKSkqSdGqcT548qddff13lypXT0qVL1aJFCx9WXDwxzt7BvOEdjLN3MG94B+PsPYy1dzDOnmNnnOxsZq5x3rFjh2JiYrRixQrX8qysLP3000964YUX9L///Y9/C88DwbsIJScn68CBAzpy5IikU5NCRkaG/P39tXPnTjVt2lTr169X6dKlXa/ZvHmzPv/8c3399deKiYnxVenFyuHDh7V9+3Zt27ZN0qlxdjqdCggI0I4dO9SqVSsdOnRIYWFhrtckJCTou+++01dffcUpSPnEOHsH84Z3MM7ewbzhHYyz9zDW3sE4e8emTZs0depU3XjjjXr11Ve1ceNGORwOBQQEaNeuXWrTpo369u2r3r17u17TqlUrNWvWTN9//71at27tw+pLAF8fci8p1q5da5deeqnVqVPHYmNjbfTo0a67KyYmJlp4eLiNHTvW7VRGs1N3FT169KgvSi6W1qxZY82bN7eaNWta3bp1rVevXq67Dh8/ftzKlStnt9xyS45xNjM7ceKEt8stthhn72De8A7G2TuYN7yDcfYexto7GGfv2LBhg4WFhdmgQYPs0ksvtXbt2ll0dLR9/fXXZmb27LPP2h133JHrZVepqak+qbmkIXgXgR07dljFihXtrrvusv/+97/25JNPWv369a1p06a2ZcsWO3DggL311ls8iuY87d6926pWrWr33nuv/fDDD/bBBx9Y69atrWbNmvbNN99Yenq6ff7554zzeWKcvYN5wzsYZ+9g3vAOxtl7GGvvYJy9IzMz066//nobMWKEq2316tV28803m7+/v3311Veu9eA5BO8i8N///tfatGljSUlJrratW7dau3btrHHjxq5n4rEzn5/vvvvOGjdubPv27XO1ZWZmWp8+faxy5cq2YsUKM+NZu+eLcfYO5g3vYJy9g3nDOxhn72GsvYNx9o709HTr3Lmz3XvvvW7tBw8etFtvvdWCg4NdYw3P4RrvIrB//37t2LFDoaGhkk7dEKJOnTr6+OOPFRAQ4HoUjb+/vy/LLPYSEhK0b98+VahQQZKUnp4uf39/LVy4UE2aNNFNN90kM5OfH7v1+WCcvYN5wzsYZ+9g3vAOxtl7GGvvYJy9o1SpUrrkkku0ZMkS171OJKlixYqaPHmy+vbtq4ceekjJyck+rLLkYy8uJDvtjoD9+/dX6dKl9fjjj0v664YQVapU0YsvvqgDBw7ovffe81WpxV72WPfp00dly5bVXXfdJUkKDAxUenq6JOnNN99UWlqaZs6c6bM6i7Psu4dKp8a5XLlyjLOHZO/P/fv3V1BQEPOGBzA/ew/zs+cxP3sX+7TnsU/7RqdOnZSamqq5c+fq2LFjrvbq1aurf//+iouLc901Hp5B8C6ETZs26c0331RmZqYkqUKFCho0aJAWLVqk//znP5Lk+mbukksukZ+fn7Zu3eqzeour1NRUOZ1O1wQcEhKiu+++W0uXLtW//vUvSacmaKfTqYiICEVHRys+Pt6XJRdLv//+ux555BGlpaXJzBQcHKyJEydq+fLljHMRSktLkyTXvBEeHq7Bgwdr4cKFzBtFiPnZO5ifvYP52XvYp72Dfdo7duzYoVdeeUWvvfaaFi9eLEkaMmSILrvsMr300kt6++23dfjwYdf6sbGxKlOmjFsgR9EjeBfQmjVrFBMTo6SkJAUEBEiSypYtq/HjxyskJESvvPKK5s6d61o/NDRUderUUVBQkKScz85D7tavX6/+/furY8eOat26td566y0lJSVp5MiR6tSpk959913NmDFD0qk/ooOCglShQgWVKlVKEuOcX2vWrFHTpk0VGBiooKAgORwO+fv7a9CgQerYsaPee+89xrkIbNiwQcOHD9cVV1yh/v37a8mSJQoNDdWECRMUGhqql156iXmjCDA/ewfzs3cwP3sP+7R3sE97x7p169SmTRu9/vrreuyxx3Tttddq9OjROnbsmGbPnq3LL79c//73v/XQQw9p69atSkhI0BtvvCE/Pz9FRUX5uvySzXuXkxd/a9assZCQEJs0aZJbe/ZNedatW2eDBw+2Zs2a2fXXX29vvfWW3XrrrRYaGmqbN2/2RcnF0tatW618+fI2fvx4mz17tt1+++0WHh5uN998s/355592+PBhu+eee6xOnTrWo0cPe/zxx+2mm26ysmXL2h9//OHr8ouNc+3PO3bssLvvvptxPk+bN2+20NBQGzt2rE2aNMmuvfZaczgcNmXKFEtJSbHt27fbkCFDrGnTpswb54H52TuYn72D+dl72Ke9g33aO44dO2YdOnSw22+/3czM9u/fb19++aVVqFDBunfv7rqh6PTp0+3yyy83h8NhrVu3tsqVK9uqVat8WfpFgeCdT5s2bbJy5crZ2LFjzezU3RXnzJljkyZNsokTJ9qmTZvM7NRjEV555RVr1aqVxcbGWteuXS0uLs6XpRc7M2fOtE6dOrm1vfPOO9a0aVMbMWKE7dy501JSUuybb76xnj17Wrdu3eyqq66yNWvW+Kji4mfbtm1Wvnx5u+6668zs1P78+OOP280332yDBw+277//3szMkpOTGefzNGXKFOvZs6db23PPPWcVKlSwiRMnWnp6uu3bt89effVV5o1CYn72HuZnz2N+9i72ac9jn/ae1NRUa9Wqlb377rtu7Zs2bbLIyEi78sorXW0HDhywL7/80pYtW2a7d+/2dqkXJYJ3Pr311lvmcDhs1qxZtn37duvcubNdfvnl1q5dO4uNjbXAwED77LPP3F6TmprKA+cLYebMmdaiRQs7duyY2+MjPvjgA6tXr57dd999OV6Tnp7uzRKLvQULFlh0dLT985//tF9//dW6du1qXbt2tX79+lnv3r3N4XDY7Nmzc7yOcS64u+66yxW8MzIyXO1z5syxMmXK2AsvvOC2PvNGwb3xxhvMz17C/Ox5zM/exT7teezT3nP8+HGrVq2aTZ8+3dWWPY7ZZx1MmzbNV+Vd9AjeBfDss89a1apVrUaNGnbVVVfZ7t277eTJk5aammq33nqrhYWF8Y1REXjvvfcsODjYdcpLWlqaa9mLL75ogYGBtn79erfXOJ1Or9ZYEsyfP99at25tVapUsX79+ll8fLxrcn7ooYesdOnSOU7vYpzz5/jx467/fu6556xcuXK2d+9eM3Pfn6dPn24hISG2c+dOr9dYEhw7dsz138zP3vGf//yH+dkL3n77beZnL3n33XfZp72Avzm856mnnrLo6GhbsGCBqy17rB9++GFr166dJSYm8mx0HyB4n8WWLVvs559/dmubPXu2tWvXzn799Ve39t9//90iIiJyHFXBuW3ZssU++ugjO3nypKttwIABVr16dde1KKcvq1evnj333HNer7O4yx7nEydOuNr+85//2FVXXWUrVqxwW/fo0aNWsWJFe+mll7xdZrG3ceNGu/76611h+vjx49alSxdr3769JSQkmJm5jrTu37/fqlevbh999JHP6i2ussd5x44drjbm56KXkpJihw8fdps3rr76aubnIpY9zqd/affOO+8wP3vJVVddxT7tBW+//Tb7dBHbt2+frVy50hYtWuS6Xn779u02ePBgu/zyy23x4sVu68+ZM8diYmIsJSXFF+Ve9LireR7i4uLUunVrxcXFSfrrmYO33XabXnrpJTVu3FjSX3dYzMjIUKVKlVSlShWf1FtcrV27Vpdeeqm+/PJLJSYmusbzoYceUnR0tNq3b689e/a47jp84sQJlStXTuXLl/dl2cXO6eN85MgR1zgPGzZMjz32mFq0aCHpr/05ISFBVapUUb169XxVcrG0Zs0atWzZUu+8846+++47SVKZMmU0adIkORwODR06VIcPH1bp0qUlSUFBQQoJCXHdsRX5c/o4f//996525ueitWHDBg0dOlQdO3bUddddpwULFkiSHnnkEdWoUYP5uYicPs7XX3+9PvvsM0nSddddp8cff5z5uQht2rRJ9913n2644QbNnDlTq1atkiTNmjVLVatWZZ8uImeO82+//SZJGjFihB5++GH26SKydu1adejQQTfccIOGDh2qJk2a6N1331W1atV09913KywsTFOmTNG7774r6dS/hdu2bVOlSpWUlZXl4+ovUj4M/ResuLg4K1OmjN155535fs0999xjbdq0sYMHD3qwspJl586dVqNGjRx3uMy2du1au/zyyy08PNxeeukl+89//mP33nuvRURE2NatW71cbfF1rnHOzf3332/NmjWzffv2ebCykiUuLs6Cg4Pt7rvvtokTJ9rll1/uOr08KyvL3n//fevQoYPVrl3bFi9ebN99951NmTLFKleuzKnmBZDbOO/fv/+spyQyPxfchg0bXHd6njNnjnXs2NGGDx9uZqdO//zll1+sU6dOzM/nKbdxvu666866PzM/F86GDRssPDzcBg8ebLfeeqtVr17dWrRoYS+//LKZnXryAX9znL/cxrlVq1b2/PPP5/ka9umCO3jwoDVq1MgmT55sW7dutb1799rQoUOtQYMGNn36dDt58qTFxcXZrbfeagEBAda8eXNr3769lS9f3lavXu3r8i9aBO8zbN682YKCguz+++83s1PXRHz22Wf28ssv26effup2TaGZ2fLly+0f//iHhYeHc3fcAlqwYIH17dvXzE6N8/3332/XXHON3XTTTTZ//nwzO3W61z/+8Q+LiYmxhg0bWrt27XjcQQHlNc4333yzvfHGG27rLlq0yMaPH8/EXEC//vqrhYaG2uTJk83s1Cn8YWFhtmzZMtc6TqfT4uLibMSIEVaxYkVr0KCBNWnSxH777TdflV3snGucz7xejfm5cE6cOGHXXHON/fOf/3S1ffrppzZgwADbv3+/6zRc5ufzc7ZxPnDggNvf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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "import pandas as pd\n", - "from sklearn.feature_extraction.text import TfidfVectorizer\n", - "from wordcloud import WordCloud\n", - "import matplotlib.pyplot as plt\n", - "import math\n", - "\n", "def create_period_label(example, period_length=50):\n", - " \"\"\"Crée une étiquette textuelle (ex: '1880-1899') pour chaque période.\"\"\"\n", - " try:\n", - " # Gérer les dates potentiellement non numériques ou vides\n", - " year_str = str(example['date']).strip()\n", - " if not year_str.isdigit():\n", - " # Retourne une étiquette spéciale ou None si la date n'est pas valide\n", - " # Ou essayez d'extraire l'année si c'est une plage comme \"188?-1890\"\n", - " # Pour simplifier, on ignore les dates non valides ici.\n", - " return {\"period\": None}\n", - " year = int(year_str)\n", - " start_year = (year // period_length) * period_length\n", - " end_year = start_year + period_length - 1\n", - " # Gérer les années avant 0 si nécessaire, bien que peu probable pour ce dataset\n", - " if start_year < 0:\n", - " start_year = 0\n", - " end_year = period_length -1\n", - " return {\"period\": f\"{start_year}-{end_year}\"}\n", - " except (ValueError, TypeError):\n", - " # Gère les erreurs de conversion ou les types inattendus\n", - " return {\"period\": None}\n", + " \"\"\"\n", + " Crée une étiquette de période basée sur l'année de publication.\n", + " \"\"\"\n", + " try:\n", + " year = int(example['date'])\n", + " start_year = (year // period_length) * period_length\n", + " end_year = start_year + period_length - 1\n", "\n", - "# Création des labels de période (ex: 20 ans)\n", - "# Filtrer les exemples sans date valide AVANT le map\n", - "dataset_with_dates = cleaned_ds.filter(lambda x: str(x.get('date', '')).isdigit())\n", - "dataset_with_labels = dataset_with_dates.map(create_period_label)\n", + " return {\"period\": f\"{start_year}-{end_year}\"}\n", + " except (ValueError, TypeError):\n", + " return {\"period\": None}\n", + " \n", + "dataset_with_labels = cleaned_ds.map(create_period_label)\n", "\n", - "# --- Groupement des textes par période ---\n", - "# Convertir en DataFrame pandas pour faciliter le groupement\n", "df = pd.DataFrame(dataset_with_labels)\n", "\n", - "# Vérifier les colonnes après conversion en DataFrame\n", - "print(\"Colonnes du DataFrame:\")\n", - "print(df.columns)\n", - "print(\"\\Aperçu des données avec périodes:\")\n", - "print(df.head())\n", - "\n", - "# Filtrer les lignes où 'period' est None si le filtrage précédent n'a pas tout attrapé\n", - "df = df.dropna(subset=['period'])\n", - "\n", - "# Grouper les textes par période\n", "grouped_texts = df.groupby('period')['text'].apply(list)\n", "\n", - "# Afficher les périodes trouvées et le nombre de textes par période\n", - "print(\"\\nPériodes et nombre de textes:\")\n", - "print(grouped_texts.apply(len))" + "period_counts = grouped_texts.apply(len).sort_index()\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "period_counts.plot(kind='bar', color='skyblue', edgecolor='black')\n", + "\n", + "plt.title('Nombre de textes par période', fontsize=16)\n", + "plt.xlabel('Période', fontsize=12)\n", + "plt.ylabel('Nombre de textes', fontsize=12)\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.grid(axis='y', linestyle='--', alpha=0.7)\n", + "plt.tight_layout()\n", + "\n", + "plt.show()" ] }, {