création de la moulinette de remplissage des champs contenus de transcription TXT et XML du corpus de vidéos importés à partir d'un CSV

This commit is contained in:
cy_altern 2021-01-25 22:41:04 +01:00
parent 4404337039
commit 00e23e4f26
6 changed files with 205 additions and 4 deletions

View file

@ -1,7 +1,8 @@
<h1>Traitement basique pour échantillonnage</h1> <h1>Traitement fichiers JSONL</h1>
<p>Chargement des fichiers Jsonl après leur décompaction et affichage du contenu de leur 1ère et denière ligne</p>
<div class="la_une"> <div class="la_une">
<ul> <ul>
<BOUCLE_corpus(DATA){source ls, #CHEMIN{tmp}/corpus/*}{par basename}> <BOUCLE_corpus(DATA){source ls, #CHEMIN{tmp}/#CONFIG{corpus_web/repertoire_corpus,corpus}/*}{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}} [(#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}}}]

View file

@ -0,0 +1,95 @@
[(#REM)
moulinette de finalisation du remplissage de la table spip_corpus_videos en 3 temps :
- remplissage du champ transcription_readable_content par le contenu du fichier TXT
- remplissage du champ transcription_detailed_content par les mots clés (filtrés) du fichier XML
- création d'un titres si absent
On part d'une table remplie par un import CSV
]
<h1>Traitement CSV des vidéos : TXT</h1>
<p>Intégration des contenus textuels des vidéos dans la table <strong>spip_corpus_videos</strong></p>
<div class="la_une">
<ul>
<BOUCLE_txt(CORPUS_VIDEOS){transcription_readable_content=''}>
<li>
<h3 class="spip">
[(#TITLE|sinon{#DESCRIPTION|couper{60}})] <br>
<small><strong>Fichier txt</strong> : #TRANSCRIPTION_READABLE_FILE</small>
</h3>
[<div class="#EDIT{transcription_readable_content}">(#TRANSCRIPTION_READABLE_FILE|integre_txt{#ID_CORPUS_VIDEO}|couper{150})</div>]
</li>
</BOUCLE_txt>
<h3 class="spip non_traite">Tous les contenus TXT sont récupérés</h3>
<//B_txt>
</ul>
</div>
<h1>Traitement CSV des vidéos : XML</h1>
<p>Intégration des contenus XML des vidéos dans la table <strong>spip_corpus_videos</strong></p>
<div class="la_une">
<ul>
<BOUCLE_xml(CORPUS_VIDEOS){transcription_readable_content!=''}{transcription_detailed_content=''}> [(#REM) ]
<li>
<h3 class="spip">
[(#TITLE|sinon{#DESCRIPTION|couper{60}})] <br>
<small><strong>Fichier XML</strong> : #TRANSCRIPTION_DETAILED_FILE</small>
</h3>
[<div class="#EDIT{transcription_detailed_content}">(#TRANSCRIPTION_DETAILED_FILE|integre_xml{#ID_CORPUS_VIDEO}|couper{150})</div>]
</li>
</BOUCLE_xml>
<h3 class="spip non_traite">Tous les contenus XML sont récupérés</h3>
<//B_xml>
</ul>
</div>
<h1>Traitement CSV des vidéos : titres</h1>
<p>Création d'un titre à partir de la description si absent</p>
<div class="la_une">
<ul>
<BOUCLE_titre(CORPUS_VIDEOS){transcription_readable_content!=''}{transcription_detailed_content!=''}{title=''}>
<li>
<h3 class="spip">
<small><strong>Titre créé :</strong></small>
[<br>(#REM) DESCRIPTION|couper{100})]
[<div class="#EDIT{title}">(#ID_CORPUS_VIDEO|cree_titre{100})</div>]
</h3>
</li>
</BOUCLE_titre>
<h3 class="spip non_traite">Tous les titres manquants sont créés</h3>
<//B_titre>
</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 {
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

@ -13,6 +13,90 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return; return;
} }
function cree_titre($id_video) {
if ($id_video != intval($id_video)) {
return false;
}
$res = sql_allfetsel('title,description', 'spip_corpus_videos', 'id_corpus_video ='.$id_video);
$titre = $res[0]['title'];
$description = $res[0]['description'];
if ($titre == '' AND $description != '') {
$set = ['title' => couper($description, 100)];
sql_updateq('spip_corpus_videos', $set, 'id_corpus_video='.$id_video);
}
return couper($description, 100);
}
function integre_xml($fichier, $id_video) {
$stop_words = explode(',', lire_config('corpus_web/stop_words'));
$chemin = _DIR_TMP.lire_config('corpus_web/repertoire_transcriptions').'/'.$fichier;
if ($id_video != intval($id_video)) {
return 'erreur : absence d\'id_video ou format incorrect ('.$id_video.')';
}
if (!file_exists($chemin) OR $id_video != intval($id_video)) {
$content = 'fichier XML absent';
}
else {
$content = file_get_contents($chemin);
preg_match_all('/<Word [^>]*> ([^<]*) /i', $content, $matches, PREG_PATTERN_ORDER);
$content = array_unique($matches[1]);
$content = array_diff($content, $stop_words);
$content = join(',', $content);
}
if ($content == '') {
$content = 'fichier XML vide';
}
$set = ['transcription_detailed_content'=> $content];
sql_updateq('spip_corpus_videos', $set, 'id_corpus_video='.$id_video);
if (sql_error()) {
return sql_error();
}
$retour = sql_getfetsel('transcription_detailed_content','spip_corpus_videos' , 'id_corpus_video='.$id_video);
return $retour;
}
function integre_txt($fichier, $id_video) {
$chemin = _DIR_TMP.lire_config('corpus_web/repertoire_transcriptions').'/'.$fichier;
if ($id_video != intval($id_video)) {
return 'erreur : absence d\'id_video ou format incorrect ('.$id_video.')';
}
if (!file_exists($chemin) OR $id_video != intval($id_video)) {
$content = 'fichier de transcription absent';
}
else {
$content = nettoyer_timecodes(file_get_contents($chemin));
}
if ($content == '') {
$content = 'fichier de transcription vide';
}
$set = ['transcription_readable_content'=> $content];
sql_updateq('spip_corpus_videos', $set, 'id_corpus_video='.$id_video);
if (sql_error()) {
return sql_error();
}
$retour = sql_getfetsel('transcription_readable_content','spip_corpus_videos' , 'id_corpus_video='.$id_video);
return $retour;
}
function nettoyer_timecodes($content) {
$content = preg_replace('/\[\d{2}:\d{2}:\d{2} - \d{2}:\d{2}:\d{2}\] /i',' ',$content);
$content = preg_replace('/\n\n/', '§', $content);
$content = preg_replace('/\n/', '', $content);
$content = preg_replace('/§/', "\n\n", $content);
return $content;
}
function nettoyer_balises($content) {
$content = preg_replace('/<[a-zA-Z0-9\/=\'" ?:.]*>/i', " ", $content);
return $content;
}
function nombre_ligne($fichier) { function nombre_ligne($fichier) {
if (!file_exists($fichier)) { if (!file_exists($fichier)) {

View file

@ -12,3 +12,16 @@
if (!defined('_ECRIRE_INC_VERSION')) { if (!defined('_ECRIRE_INC_VERSION')) {
return; return;
} }
if (!isset($GLOBALS['z_blocs'])){
$GLOBALS['z_blocs'] = array(
'content',
'aside',
'extra',
'head',
'head_js',
'header',
'footer',
'breadcrumb');
}

View file

@ -1,6 +1,6 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM"> <div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:corpus:cfg_titre_parametrages:></h3> <h3 class="titrem"><:corpus_web:cfg_titre_parametrages:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
@ -10,10 +10,17 @@
#ACTION_FORMULAIRE #ACTION_FORMULAIRE
<fieldset> <fieldset>
<legend>Configuration traitement basique</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, taille_max, label=taille_max, explication=taille maximum des fichiers à traiter (en octets) } #SAISIE{input, taille_max, label=taille_max, explication=taille maximum des fichiers à traiter (en octets) }
</fieldset> </fieldset>
<fieldset>
<legend>Configuration traitement CSV vidéos</legend>
#SAISIE{input, repertoire_transcriptions, label=repertoire_transcriptions, explication=nom du répertoire des transcriptions (dans tmp/). Doit contenir un dossier <strong>readable</strong> (transcriptions txt) et un dossier <strong>detailed</strong> (transcriptions XML) }
#SAISIE{textarea, stop_words, label=stop_words, explication=liste des stop words (séparés par une virgule) }
</fieldset>
<input type="hidden" name="_meta_casier" value="corpus_web" /> <input type="hidden" name="_meta_casier" value="corpus_web" />
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p> <p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div> </div>

View file

@ -0,0 +1 @@
a,à,â,abord,afin,ah,ai,aie,ainsi,allaient,allo,allô,allons,après,assez,attendu,au,aucun,aucune,aujourd,aujourd'hui,auquel,aura,auront,aussi,autre,autres,aux,auxquelles,auxquels,avaient,avais,avait,avant,avec,avoir,ayant,b,bah,beaucoup,bien,bigre,boum,bravo,brrr,c,ça,car,ce,ceci,cela,celle,celle-ci,celle-là,celles,celles-ci,celles-là,celui,celui-ci,celui-là,cent,cependant,certain,certaine,certaines,certains,certes,ces,cet,cette,ceux,ceux-ci,ceux-là,chacun,chaque,cher,chère,chères,chers,chez,chiche,chut,ci,cinq,cinquantaine,cinquante,cinquantième,cinquième,clac,clic,combien,comme,comment,compris,concernant,contre,couic,crac,d,da,dans,de,debout,dedans,dehors,delà,depuis,derrière,des,dès,désormais,desquelles,desquels,dessous,dessus,deux,deuxième,deuxièmement,devant,devers,devra,différent,différente,différentes,différents,dire,divers,diverse,diverses,dix,dix-huit,dixième,dix-neuf,dix-sept,doit,doivent,donc,dont,douze,douzième,dring,du,duquel,durant,e,effet,eh,elle,elle-même,elles,elles-mêmes,en,encore,entre,envers,environ,es,ès,est,et,etant,étaient,étais,était,étant,etc,été,etre,être,eu,euh,eux,eux-mêmes,excepté,f,façon,fais,faisaient,faisant,fait,feront,fi,flac,floc,font,g,gens,h,ha,,hein,hélas,hem,hep,hi,ho,holà,hop,hormis,hors,hou,houp,hue,hui,huit,huitième,hum,hurrah,i,il,ils,importe,j,je,jusqu,jusque,k,l,la,,laquelle,las,le,lequel,les,lès,lesquelles,lesquels,leur,leurs,longtemps,lorsque,lui,lui-même,m,ma,maint,mais,malgré,me,même,mêmes,merci,mes,mien,mienne,miennes,miens,mille,mince,moi,moi-même,moins,mon,moyennant,n,na,ne,néanmoins,neuf,neuvième,ni,nombreuses,nombreux,non,nos,notre,nôtre,nôtres,nous,nous-mêmes,nul,o,o|,ô,oh,ohé,olé,ollé,on,ont,onze,onzième,ore,ou,,ouf,ouias,oust,ouste,outre,p,paf,pan,par,parmi,partant,particulier,particulière,particulièrement,pas,passé,pendant,personne,peu,peut,peuvent,peux,pff,pfft,pfut,pif,plein,plouf,plus,plusieurs,plutôt,pouah,pour,pourquoi,premier,première,premièrement,près,proche,psitt,puisque,q,qu,quand,quant,quanta,quant-à-soi,quarante,quatorze,quatre,quatre-vingt,quatrième,quatrièmement,que,quel,quelconque,quelle,quelles,quelque,quelques,quelqu'un,quels,qui,quiconque,quinze,quoi,quoique,r,revoici,revoilà,rien,s,sa,sacrebleu,sans,sapristi,sauf,se,seize,selon,sept,septième,sera,seront,ses,si,sien,sienne,siennes,siens,sinon,six,sixième,soi,soi-même,soit,soixante,son,sont,sous,stop,suis,suivant,sur,surtout,t,ta,tac,tant,te,,tel,telle,tellement,telles,tels,tenant,tes,tic,tien,tienne,tiennes,tiens,toc,toi,toi-même,ton,touchant,toujours,tous,tout,toute,toutes,treize,trente,très,trois,troisième,troisièmement,trop,tsoin,tsouin,tu,u,un,une,unes,uns,v,va,vais,vas,,vers,via,vif,vifs,vingt,vivat,vive,vives,vlan,voici,voilà,vont,vos,votre,vôtre,vôtres,vous,vous-mêmes,vu,w,x,y,z,zut,alors,aucuns,bon,devrait,dos,droite,début,essai,faites,fois,force,haut,ici,juste,maintenant,mine,mot,nommés,nouveaux,parce,parole,personnes,pièce,plupart,seulement,soyez,sujet,tandis,valeur,voie,voient,état,étions
1 a à â abord afin ah ai aie ainsi allaient allo allô allons après assez attendu au aucun aucune aujourd aujourd'hui auquel aura auront aussi autre autres aux auxquelles auxquels avaient avais avait avant avec avoir ayant b bah beaucoup bien bigre boum bravo brrr c ça car ce ceci cela celle celle-ci celle-là celles celles-ci celles-là celui celui-ci celui-là cent cependant certain certaine certaines certains certes ces cet cette ceux ceux-ci ceux-là chacun chaque cher chère chères chers chez chiche chut ci cinq cinquantaine cinquante cinquantième cinquième clac clic combien comme comment compris concernant contre couic crac d da dans de debout dedans dehors delà depuis derrière des dès désormais desquelles desquels dessous dessus deux deuxième deuxièmement devant devers devra différent différente différentes différents dire divers diverse diverses dix dix-huit dixième dix-neuf dix-sept doit doivent donc dont douze douzième dring du duquel durant e effet eh elle elle-même elles elles-mêmes en encore entre envers environ es ès est et etant étaient étais était étant etc été etre être eu euh eux eux-mêmes excepté f façon fais faisaient faisant fait feront fi flac floc font g gens h ha hein hélas hem hep hi ho holà hop hormis hors hou houp hue hui huit huitième hum hurrah i il ils importe j je jusqu jusque k l la laquelle las le lequel les lès lesquelles lesquels leur leurs longtemps lorsque lui lui-même m ma maint mais malgré me même mêmes merci mes mien mienne miennes miens mille mince moi moi-même moins mon moyennant n na ne néanmoins neuf neuvième ni nombreuses nombreux non nos notre nôtre nôtres nous nous-mêmes nul o o| ô oh ohé olé ollé on ont onze onzième ore ou ouf ouias oust ouste outre p paf pan par parmi partant particulier particulière particulièrement pas passé pendant personne peu peut peuvent peux pff pfft pfut pif plein plouf plus plusieurs plutôt pouah pour pourquoi premier première premièrement près proche psitt puisque q qu quand quant quanta quant-à-soi quarante quatorze quatre quatre-vingt quatrième quatrièmement que quel quelconque quelle quelles quelque quelques quelqu'un quels qui quiconque quinze quoi quoique r revoici revoilà rien s sa sacrebleu sans sapristi sauf se seize selon sept septième sera seront ses si sien sienne siennes siens sinon six sixième soi soi-même soit soixante son sont sous stop suis suivant sur surtout t ta tac tant te tel telle tellement telles tels tenant tes tic tien tienne tiennes tiens toc toi toi-même ton touchant toujours tous tout toute toutes treize trente très trois troisième troisièmement trop tsoin tsouin tu u un une unes uns v va vais vas vers via vif vifs vingt vivat vive vives vlan voici voilà vont vos votre vôtre vôtres vous vous-mêmes vu w x y z zut alors aucuns bon devrait dos droite début essai faites fois force haut ici juste maintenant mine mot nommés nouveaux parce parole personnes pièce plupart seulement soyez sujet tandis valeur voie voient état étions