Résumé d’article automatique

Des filtres pour les fabriquer

Voici un jeu de filtres exploitant les raccourcis typographiques de SPIP et permettant d’afficher une analyse sémantique des documents SPIP.

Principe

Les raccourcis typographiques ont —comme leur nom ne l’indique pas vraiment— un rôle sémantique (on devrait peut-être justement les appeler des raccourcis sémantiques, non ?).

Le nombre d’accolades qui entoure un mot ou une expression est proportionnel à l’emphase [1] que l’on veut y mettre. Ainsi, lorsque l’on insiste un peu sur une expression on l’entoure de simples accolades. Dans SPIP cela va se traduire par un affichage en {italiques} (et c’est comme cela que c’est indiqué dans la barre de raccourcis typographiques). Lorsque l’on veut insister plus, on utilise les accolades doubles, ce qui donne du {{gras}}. Le stade ultime de l’emphase (ou de l’insistance) dans SPIPc’est trois accolades, ce qui crée un titre [2].

Ne vous méprenez pas, cet affichage de l’emphase n’est pas universel, et les malvoyants —en utilisant des périphériques de synthèse audio— ne les perçoivent pas de la même façon, mais bien comme de l’insistance. On peut aussi changer complètement la façon dont c’est affiché dans les CSS. Il faut donc veiller à ne pas utiliser ces raccourcis typographiques pour de la décoration, mais bien pour donner plus de sens à votre texte. Ces raccourcis, servent donc à baliser les zones du textes sur lesquelles on veut insister un peu beaucoup à la folie, ou pas du tout.

Si le texte est balisé, un petit programme peut très bien retrouver ces balises et identifier les différents éléments du texte : isoler les titres, faire ressortir les mots et expressions sur lesquelles l’auteur a voulu insister.

Et c’est là que l’on revient dans le vif du sujet car c’est précisément le rôle des filtres de cette contrb’.

Le code des filtres

Les filtres vont donc chercher les occurrences des balisages dus aux raccourcis typographiques. Le premier filtre recherche toutes les expressions entourées de triples accolades (soit les titres). Ensuite, il liste ces titres en les précédant chacun d’un tiret. L’intérêt de cette façon de faire est que si on laisse à SPIP le soin de traiter ce qui sort de ce filtre on aura au final une liste de puces.

{{{titre}}} traité par le filtre de la contrib’ donne : -titre qui une fois traité par le filtre « propre » de SPIP donne :

-  titre

Si vous utilisez l’excellente contribution de chtitux et mortimer Génération automatique de numérotation, table des matières et références qui permet —enfin— d’avoir dans SPIP plusieurs niveaux de titre, je vous conseille d’adopter quelques petites modifications de mon cru (citées ici) qui rendent la contrib’ plus cohérente avec SPIP (les dièses « # » servent pour les objets numérotés et les étoiles « * » pour les objets non numérotés, les titres sont sémantiques sous forme de h3, h4, h5, etc.). Vous obtiendrez alors à la sortie du filtre ci-dessous une liste de puces (numérotées ou non, selon la qualité de votre titre) qui reflétera la hiérarchie du plan de l’article (qui certes, double la balise #TABLEMATIEREs apportée par la contrib’).

Voici le code qui utilise principalement une expression régulière pour retrouver les textes encadrées par des triplets d’accolades.

<?php
function extrait_titres($texte) {
 preg_match_all("/\{\{\{(.*?)\}\}\}/",$texte,$matches);
 $key = key($matches[1]);
 $val = current($matches[1]);
 while(list ($key, $val) = each ($matches[1]))
	{
	$sortie .= "- ".$val."\n";
 };
 return $sortie;
}
?>

La sortie de ce filtre est donc une liste de titre précédés d’un tiret et suivis d’un retour à la ligne. Pour obtenir la liste de puces, il faut faire passer ce résultat dans le filtre « propre » de SPIP. Dans vos squelettes vous écrirez [(#TEXTE*|extrait_titres|propre)] [3].

Pour les emphases fortes (doubles accolades), on fait exactement pareil. Excepté que cette fois on ne va pas rajouter de tiret, mais rajouter des guillemets typographiques français.

Notez que l’on ne veut pas que notre expression régulière relève les triples accolades (qui contiennent aussi des doubles accolades) qui encadrent les titres, il y a donc une première expression régulière (preg_replace) qui les enlève du texte à traiter.

<?php
function extrait_emphaseforte($texte) {
 $texte=preg_replace("/(\{\{\{)(.*?)(\}\}\})/","",$texte);
 preg_match_all("/\{\{(.*?)\}\}/",$texte,$matches);
 $key = key($matches[1]);
 $val = current($matches[1]);
 while(list ($key, $val) = each ($matches[1]))
	{
	$sortie .= "«".$val."»; ";
 };
 return $sortie;
}
?>

Même principe pour finir avec les emphases normales (et on élimine cette fois les titres et les emphases fortes).

<?php
function extrait_emphase($texte) {
 $texte=preg_replace("/(\{\{\{)(.*?)(\}\}\})/","",$texte);
 $texte=preg_replace("/(\{\{)(.*?)(\}\})/","",$texte);
 preg_match_all("/\{(.*?)\}/",$texte,$matches);
 $key = key($matches[1]);
 $val = current($matches[1]);
 while(list ($key, $val) = each ($matches[1]))
	{
	$sortie .= "«".$val."»; ";
 };
 return $sortie;
}
?>

Pour les liens la démarche est à peu près la même. Ce filtre va rechercher et extraire dans le texte tous les raccourcis typos de liens et ne lister qu’eux, en sautant une ligne entre-eux.

Comme précédemment, pour éviter les notes, élimine d’abord les textes entre doubles crochets pour s’intéresser à ceux qui sont entre simples crochets...

<?php
function extrait_liens($texte) {
 $texte=preg_replace("/(\[\[)(.*?)(\]\])/","",$texte);
 preg_match_all("/(\[.*?\])/",$texte,$matches);
 $key = key($matches[1]);
 $val = current($matches[1]);
 while(list ($key, $val) = each ($matches[1]))
	{
	$sortie .= $val."\n\n";
 };
 return $sortie;
}
?>

Soyons clairs, la programmation, c’est pas mon truc, et je n’y connais rien. Ça marche dans la plupart des cas, chez moi. Ça devrait donc fonctionner parfois, voire souvent chez vous (mais évitez les liens dans les notes, par exemple)...

installation et intégration dans les squelettes

L’installation est très simple elle se fait en recopiant le code du filtre voulu dans le fichier mes_fonctions.php[[pour SPIP<1.9> http://www.spip.net/fr_article901.html?var_recherche=mes_fonctions.php3].

Ensuite dans vos squelettes, il vous suffit d’appeler les filtres sur vos balises qui contiennent du texte (avec des raccourcis typographiques). Avec la balise #TEXTE cela donne :

-  [(#TEXTE*|extrait_titres|propre)] pour extraire la liste des titres,
-  [(#TEXTE*|extrait_emphaseforte|propre)] pour extraire la liste des mots sur lesquels l’auteur a voulu beaucoup insister,
-  [(#TEXTE*|extrait_emphase|propre)] pour extraire la liste des mots sur lesquels l’auteur a voulu insister,
-  [(#TEXTE*|extrait_liens|propre)] pour extraire la liste des liens contenus dans #TEXTE.

N’oubliez surtout pas de repasser le résultats de vos filtres dans « propre » comme dans l’exemple ci-dessus.

Voici un exemple de squelette qui analyse le contenu d’un article passé en contexte.

<BOUCLE_Article(ARTICLES){id_article}>
	<h2>Résumé synthétique de l'article&nbsp;: "#TITRE".</h2>
	[<div class="bloc-analyse">
		<h3>Descriptif&nbsp;:</h3>
		(#DESCRIPTIF)
	</div>]
	[<div class="bloc-analyse">
		<h3>Plan&nbsp;:</h3>
		(#TEXTE*|extrait_titres|propre)
	</div>]
	[<div class="bloc-analyse">
		<h3>Expressions les plus importantes&nbsp;:</h3>
		(#TEXTE*|extrait_emphaseforte|propre)
	</div>]
	[<div class="bloc-analyse">
		<h3>Autres expressions importantes&nbsp;:</h3>
		(#TEXTE*|extrait_emphase|propre)
	</div>]
	[<div class="bloc-analyse">
		<h3>Liens à visiter cités dans l'article&nbsp;:</h3>
		(#TEXTE*|extrait_liens|propre)
	</div>]
	<div class="bloc-analyse">
		<h3>Documents d'illustration ou de référence&nbsp;:</h3>
		<BOUCLE_Photos(DOCUMENTS){id_article}{par titre}>
			<div style="float: left; width: 120px; margin: 0.2em;">
				[(#LOGO_DOCUMENT|#URL_DOCUMENT||reduire_image{120,0})]
				#TITRE
			</div>
		</BOUCLE_Photos>
	</div>
</BOUCLE_Article>

Intérêt pédagogique

L’intérêt principal que je vois à cette batterie de filtres est de faire comprendre aux rédacteurs combien il est important d’écrire sémantique dans SPIP, c’est-à-dire de ne pas tenir compte de la présentation de leur article (prise en charge automatiquement par SPIP), mais seulement du sens de leur texte, dans lequel les raccourcis leur permettent d’identifier et de baliser des éléments.

Notes

[1le terme d’emphase est un anglicisme de Geek qui doit en fait être remplacé par insistance

[2Donc essayer du faire du gras-italique dans SPIP n’a pas de sens puisque cela signifie à la fois que l’on veut insister sur le mot (entouré par une accolade) en insistant fortement aussi (double accolade), sans pour autant insister suffisamment pour utiliser une triple accolade !

[3l’étoile « * » sert à éviter que SPIP ne transforme le texte avant que nous le moulinions

Le logo de cet article est une photo d’Alain Bachellier, visible sur Flickr : Loupes & Lettres par Alain Bachellier sur Flickr.

Cette image est sous licence CC : Attribution-NonCommercial-NoDerivs 2.0 (by-cc-nd).

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom