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:
parent
4404337039
commit
00e23e4f26
6 changed files with 205 additions and 4 deletions
|
@ -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">
|
||||
<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>
|
||||
#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}}}]
|
||||
|
|
95
content/mouline_videos.html
Normal file
95
content/mouline_videos.html
Normal 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>
|
|
@ -13,6 +13,90 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
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) {
|
||||
if (!file_exists($fichier)) {
|
||||
|
|
|
@ -12,3 +12,16 @@
|
|||
if (!defined('_ECRIRE_INC_VERSION')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!isset($GLOBALS['z_blocs'])){
|
||||
$GLOBALS['z_blocs'] = array(
|
||||
'content',
|
||||
'aside',
|
||||
'extra',
|
||||
'head',
|
||||
'head_js',
|
||||
'header',
|
||||
'footer',
|
||||
'breadcrumb');
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<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_erreur">(#ENV*{message_erreur})</p>]
|
||||
|
@ -10,10 +10,17 @@
|
|||
#ACTION_FORMULAIRE
|
||||
|
||||
<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) }
|
||||
</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" />
|
||||
<p class="boutons"><span class="image_loading"> </span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
|
||||
</div>
|
||||
|
|
1
stocks/stop_words_french.csv
Normal file
1
stocks/stop_words_french.csv
Normal 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,hé,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,là,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,où,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,té,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,vé,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
|
|
Loading…
Add table
Reference in a new issue