Feat : renommage des pages pour meilleure compréhension. Ajout de la page d'exploration d'un corpus complet (toutes les lignes des fichiers JSONL soumis)

This commit is contained in:
cy_altern 2023-05-12 17:00:49 +02:00
parent 04ef66862c
commit cdeb5f0b61
7 changed files with 234 additions and 12 deletions

View file

@ -1,10 +1,15 @@
<h1>Traitement fichiers JSONL</h1> [(#REM)
<p>Chargement des fichiers Jsonl après leur décompaction et affichage du contenu de leur 1ère et denière ligne</p> affichage en boucle DATA des premières et dernières lignes des fichiers JSONL stockés dans un répertoire corpus
on fait tout un tas de traitements en fonction du type de donnée par champ pour essayer d'afficher qq chose de "lisible par un humain"
]
<h1>Aperçu d'un lot de fichiers JSONL</h1>
<p>Chargement des fichiers Jsonl après leur décompaction et affichage du contenu de leur 1ère et dernière ligne</p>
<div class="la_une"> <div class="la_une">
<ul> <ul>
<BOUCLE_corpus(DATA){source ls, #CHEMIN{tmp}/#CONFIG{corpus_web/repertoire_corpus,corpus}/*}{par basename}> <BOUCLE_corpus(DATA){source ls, #CHEMIN{tmp}/#CONFIG{corpus_web/repertoire_apercu,apercu_jsonl}/*}{par basename}>
<li> <li>
#SET{liste_lignes,#LISTE{1}} #SET{trop_gros,#CONFIG{corpus_web/taille_max}} [(#REM) trop gros = 100Mo ] #SET{liste_lignes,#LISTE{1}} #SET{trop_gros,#CONFIG{corpus_web/taille_max}|mult{1000000}} [(#REM) trop gros = 100Mo ]
#SET{nb_lignes, #FILE|nombre_ligne} [(#GET{nb_lignes}|!={1}|oui) #SET{liste_lignes,#LISTE{1,#GET{nb_lignes}}}] #SET{nb_lignes, #FILE|nombre_ligne} [(#GET{nb_lignes}|!={1}|oui) #SET{liste_lignes,#LISTE{1,#GET{nb_lignes}}}]
<h3 class="spip[ (#SIZE|>{#GET{trop_gros}}|oui)non_traite]"> <h3 class="spip[ (#SIZE|>{#GET{trop_gros}}|oui)non_traite]">
[(#FILE|basename)] : [(#GET{nb_lignes}) [(#GET{nb_lignes}|singulier_ou_pluriel{page,pages})]] <small>([(#SIZE|human_filesize)o])</small> [(#FILE|basename)] : [(#GET{nb_lignes}) [(#GET{nb_lignes}|singulier_ou_pluriel{page,pages})]] <small>([(#SIZE|human_filesize)o])</small>
@ -42,7 +47,6 @@
</div> </div>
</li> </li>
] ]
</li>
</BOUCLE_content> </BOUCLE_content>
</ul> </ul>
</div> </div>

114
content/explo_jsonl.html Normal file
View file

@ -0,0 +1,114 @@
[(#REM)
affichage en boucle DATA des premières et dernières lignes des fichiers JSONL stockés dans un répertoire corpus
on fait tout un tas de traitements en fonction du type de donnée par champ pour essayer d'afficher qq chose de "lisible par un humain"
]
<h1>Contenus d'un lot de fichiers JSONL</h1>
<p>Chargement des fichiers Jsonl après leur décompaction et affichage du contenu de toutes leurs lignes
<br><small>pour mémoire : 1 ligne du fichier JSONL = 1 page HTML du site aspiré/archivé</small>
</p>
<div class="la_une">
<ul>
<BOUCLE_corpus(DATA){source ls, #CHEMIN{tmp}/#CONFIG{corpus_web/repertoire_corpus,corpus_jsonl}/*}{par basename}>
<li>
#SET{liste_lignes,#LISTE{1}} #SET{trop_gros,#CONFIG{corpus_web/taille_max}|mult{1000000}} [(#REM) trop gros = 100Mo ]
#SET{nb_lignes, #FILE|nombre_ligne} [(#GET{nb_lignes}|!={1}|oui) #SET{liste_lignes,#LISTE{1,#GET{nb_lignes}}}]
<h3 class="spip[ (#SIZE|>{#GET{trop_gros}}|oui)non_traite]">
[(#FILE|basename)] : [(#GET{nb_lignes}) [(#GET{nb_lignes}|singulier_ou_pluriel{page,pages})]] <small>([(#SIZE|human_filesize)o])</small>
[ (#SIZE|>{#GET{trop_gros}}|oui)<div>fichier trop gros pour traitement basique</div>]
</h3>
[(#REM)
{liste #GET{liste_lignes}}
]
<BOUCLE_2lignes(DATA){enum 1, #GET{nb_lignes}}{si #SIZE|<{#GET{trop_gros}}}>
[(#SET{num_ligne,[(#COMPTEUR_BOUCLE|=={1}|?{1,#GET{nb_lignes}})]})]
<div>
<h4 class="aff_masq">Page #VALEUR :</h4>
<div class="details">
[(#SET{content,[(#FILE|affiche_ligne{#GET{num_ligne}}|json_decode{true})]})]
<ul>
<li>
<div class="aff_masq">Contenu brut :</div>
<textarea class="details">[(#FILE|affiche_ligne{#GET{num_ligne}})]</textarea>
</li>
<BOUCLE_content(DATA){source table, #GET{content}}>
[(#CLE|=={htmlBytes}|oui)
<li>
<div class=""><span class="aff_masq_">Title :</span> [(#VALEUR|base64_decode|affiche_title)]</div>
</li>
<li>
<div class="aff_masq">[(#CLE)] = HTML de la page : </div>
<div class="details">
<textarea class="details">[(#VALEUR|base64_decode|replace{<,&lt;}|replace{>,&gt;})]</textarea>
</div>
</li>
<li>
<div class="aff_masq">Titraille :</div>
<textarea class="details">[(#VALEUR|base64_decode|affiche_titraille)]</textarea>
</li>
]
[(#CLE|=={htmlBytes}|non)
<li>
<div class="aff_masq">[(#CLE)] : </div>
<div class="details">
<B_ss>
<ul>
<BOUCLE_ss(DATA){source table, #VALEUR}>
<li>
<div class="aff_masq_">[(#CLE)] : </div>
<div class="details_">
[(#CLE|=={htmlmeta:html:head}|oui)
<textarea class="details_">[(#VALEUR*|print|replace{<br />,§§}|replace{<,&lt;}|replace{>,&gt;}|replace{§§,<br>})]</textarea>
]
[(#CLE|=={htmlmeta:html:head}|non)
[(#VALEUR|print|replace{<br />,§§}|replace{<,&lt;}|replace{>,&gt;}|replace{§§,<br>})]
]
</div>
</li>
</BOUCLE_ss>
</ul>
</B_ss>
</div>
</li>
]
</BOUCLE_content>
</ul>
</div>
</div>
</BOUCLE_2lignes>
</li>
</BOUCLE_corpus>
</ul>
</div>
<script type="text/javascript">
jQuery(function () {
$('.aff_masq').each(function() {
$(this).siblings('.details').toggleClass('js-hidden');
});
$('.aff_masq').on('click', function() {
$(this).siblings('.details').toggleClass('js-hidden');
});
});
</script>
<style type="text/css" media="screen">
.aff_masq, .aff_masq_ {
cursor: pointer;
font-weight: bold;
}
.aff_masq:hover {
background-color: #DDD;
}
.details br:first-of-type {
display: none;
}
textarea {
width: 100%;
height: 200px;
}
.non_traite {
color: #777;
}
</style>

View file

@ -7,7 +7,7 @@
On part d'une table remplie par un import CSV On part d'une table remplie par un import CSV
] ]
<h1>Traitement CSV des vidéos : TXT</h1> <h1>Import CSV des vidéos : TXT</h1>
<p>Intégration des contenus textuels des vidéos dans la table <strong>spip_corpus_videos</strong></p> <p>Intégration des contenus textuels des vidéos dans la table <strong>spip_corpus_videos</strong></p>
<div class="la_une"> <div class="la_une">
<ul> <ul>
@ -25,7 +25,7 @@
</ul> </ul>
</div> </div>
<h1>Traitement CSV des vidéos : XML</h1> <h1>Import CSV des vidéos : XML</h1>
<p>Intégration des contenus XML des vidéos dans la table <strong>spip_corpus_videos</strong></p> <p>Intégration des contenus XML des vidéos dans la table <strong>spip_corpus_videos</strong></p>
<div class="la_une"> <div class="la_une">
<ul> <ul>
@ -43,7 +43,7 @@
</ul> </ul>
</div> </div>
<h1>Traitement CSV des vidéos : titres</h1> <h1>Import CSV des vidéos : titres</h1>
<p>Création d'un titre à partir de la description si absent</p> <p>Création d'un titre à partir de la description si absent</p>
<div class="la_une"> <div class="la_une">
<ul> <ul>

View file

@ -134,14 +134,15 @@ function affiche_ligne($fichier, $num) {
return 'Erreur : nombre de lignes du fichier '.$fichier.' inférieur à '.$num; return 'Erreur : nombre de lignes du fichier '.$fichier.' inférieur à '.$num;
} }
// TO DO : corriger la récup du contenu des titres (cf site brezhoweb.com)
function affiche_titraille($html) { function affiche_titraille($html) {
$niv_h = [1,2,3,4,5,6]; $niv_h = [1,2,3,4,5,6];
$titraille = []; $titraille = [];
foreach($niv_h as $h) { foreach($niv_h as $h) {
preg_match_all('/<h'.$h.'>(.*)?<\/h'.$h.'>/si', $html, $match, PREG_SET_ORDER); preg_match_all('/<h'.$h.'(.*)>(.*)?<\/h'.$h.'>/si', $html, $match, PREG_SET_ORDER);
if ($match) { if ($match) {
foreach($match as $m) { foreach($match as $m) {
$titraille[] = '<h'.$h.'>'.$m[1].'</h'.$h.'>'; $titraille[] = '<h'.$h.'>'.$m[2].'</h'.$h.'>';
} }
} }
@ -150,6 +151,16 @@ function affiche_titraille($html) {
return join("\r\n", $titraille); return join("\r\n", $titraille);
} }
function affiche_title($html) {
preg_match_all('/<title>(.*)?<\/title>/si', $html, $match, PREG_SET_ORDER);
if ($match) {
foreach($match as $m) {
$titles[] = $m[1];
}
}
return join("\r\n", $titles);
}
function human_filesize($bytes, $decimals = 2) { function human_filesize($bytes, $decimals = 2) {
$sz = 'BKMGTP'; $sz = 'BKMGTP';
$factor = floor((strlen($bytes) - 1) / 3); $factor = floor((strlen($bytes) - 1) / 3);

90
footer/dist.html Normal file
View file

@ -0,0 +1,90 @@
<BOUCLE_art_partenaires(ARTICLES){grigri = partenaires}{0,1}{tout}>
<div id="logos_partenaires">
<B_partenaires>
<div class="h3-like partenaires #EDIT{titre}">#TITRE</div>
<BOUCLE_partenaires(DOCUMENTS){id_article}{extension==jpg|png|gif|svg}{par rang_lien}{tout}>
[<a id="partenaire_#ID_DOCUMENT" href="#CREDITS*"[ title="(#DESCRIPTIF*|sinon{#TITRE})"]>
(#FICHIER|image_reduire{0,35}image_nb|inserer_attribut{class, logo_on}|inserer_attribut{alt, #DESCRIPTIF|attribut_html|sinon{#TITRE|attribut_html}}|inserer_attribut{aria-label, #DESCRIPTIF|attribut_html|sinon{#TITRE|attribut_html}})
[(#FICHIER|image_reduire{0,35}|inserer_attribut{class, logo_off}|inserer_attribut{alt, #DESCRIPTIF|attribut_html|sinon{#TITRE|attribut_html}}|inserer_attribut{aria-label, #DESCRIPTIF|attribut_html|sinon{#TITRE|attribut_html}})]
</a>]
</BOUCLE_partenaires>
</B_partenaires>
</div>
</BOUCLE_art_partenaires>
<div class="colophon">
<ul class="nav">
[(#REM) les logos CC
<li>
<a class="lien_cc" href="https://creativecommons.org/licenses/by-nc-sa/3.0/fr/"
title="Tous les contenus de ce site sont sous licence Creative Commons By + NC + SA">
<svg class="cc">
<use xlink:href="#cc"/>
</svg>
<svg class="by">
<use xlink:href="#by"/>
</svg>
<svg class="nc">
<use xlink:href="#nc"/>
</svg>
<svg class="sa">
<use xlink:href="#sa"/>
</svg>
<span class="title">CC: By NC SA</span>
</a>
</li>
]
<li class="separ">
<a rel="contents" href="#URL_PAGE{plan}">
<i class="fa fa-map"></i> <:plan_site:>
</a>
</li>
[(#PLUGIN{gamulegal}|oui)
<li class="separ">
<a rel="contents" href="#URL_PAGE{mentions_legales}">
<i class="fa fa-legal"></i> Mentions légales
</a>
</li>
]
<BOUCLE_contact(ARTICLES){grigri=contact}{0,1}>
<li class="separ">
<a rel="contents" href="#URL_ARTICLE">
<i class="fa fa-phone"></i> Contact
</a>
</li>
</BOUCLE_contact>
<?php
if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) {
?> <li class="separ">
<a class="" href="[(#URL_PAGE{modifier_auteur}|parametre_url{retour,#SELF})]" title="Gérer mon compte">
<i class="fa fa-cog" aria-hidden="true"></i> #SESSION{nom} <span class="title">: gestion compte</span>
</a>
</li>
<li class="separ">
<a href="#URL_LOGOUT" rel="nofollow" title="Me déconnecter">
<i class="fa fa-sign-out"></i> Déconnexion
</a>
</li>
<li class="separ">
<a class="" href="[(#URL_PAGE{mouline_video})]" title="Finalisation du remplissage de la table spip_corpus_videos">
<i class="fa fa-database"></i> Import CSV vidéos
</a>
</li><?php
}
else {
?> <li class="separ">
<a href="[(#URL_PAGE{editer_bien}|parametre_url{url,#SELF|parametre_url{url,''}})]" rel="nofollow" class='login_modal' title="Connexion">
<i class="fa fa-sign-in"></i> Connexion
</a>
</li><?php
}
?>
<li class="generator">
<!--small></small-->
<a href="http://gamuza.fr" rel="generator" title="Site réalisé par Gamuza" class="spip_out">[(#CHEMIN{images/gamuza_noir.png}|balise_img{GAMUZA}|image_reduire{70,70})]</a>
<a href="http://www.spip.net/" rel="generator" title="motorisé par SPIP" class="spip_out">[(#CHEMIN{images/logo_spip_noir.png}|balise_img{SPIP}|image_reduire{45,45})]</a>
</li>
</ul>
</div>

View file

@ -11,8 +11,9 @@
<fieldset> <fieldset>
<legend>Configuration traitement JSONL</legend> <legend>Configuration traitement JSONL</legend>
#SAISIE{input, repertoire_corpus, label=repertoire_corpus, explication=nom du répertoire des fichiers JSONL (dans tmp/) } #SAISIE{input, repertoire_apercu, label=repertoire_apercu, explication=nom du répertoire des fichiers JSONL pour l'aperçu (dans tmp/) }
#SAISIE{input, taille_max, label=taille_max, explication=taille maximum des fichiers à traiter (en octets) } #SAISIE{input, repertoire_corpus, label=repertoire_corpus, explication=nom du répertoire des fichiers JSONL pour le corpus (dans tmp/) }
#SAISIE{input, taille_max, label=taille_max, explication=taille maximum des fichiers à traiter (en Mo) }
</fieldset> </fieldset>
<fieldset> <fieldset>

View file

@ -15,6 +15,8 @@
<licence>GNU/GPL</licence> <licence>GNU/GPL</licence>
<necessite nom="champslibres" compatibilite="[1.0.0;]" />
<pipeline nom="autoriser" inclure="corpus_web_autorisations.php" /> <pipeline nom="autoriser" inclure="corpus_web_autorisations.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/corpus_web.php" /> <pipeline nom="declarer_tables_objets_sql" inclure="base/corpus_web.php" />
<pipeline nom="declarer_tables_interfaces" inclure="base/corpus_web.php" /> <pipeline nom="declarer_tables_interfaces" inclure="base/corpus_web.php" />