VB.Net : fonction de content spinning

Comme on me l’a demandé expressément, voici le snippet VB.Net (adaptable facilement à n’importe quel langage) permettant de spinner un texte construit pour cela. C’est cet algorithme simple de content spinning, basé sur la récursivité et sur l’utilisation des expressions régulières, que j’utilise dans effiSpin pour générer les variantes de mes contenus spinnés.

'Objet Random global 'On doit le "sortir" de la fonction pour générer à chaque appel un nombre aléatoire 'Sinon chaque spin généré sera... identique ! Private _Rand As New Random()  ''' <summary> ''' Génération d'un spin aléatoire à partir d'un masterspin ''' </summary> ''' <param name="sSource">Texte source du masterspin à spinner (optionnel)</param> ''' <returns>Version spinnée aléatoirement du texte source</returns> ''' <remarks></remarks> Public Function Spin(ByVal sSource As String = "") As String  	'Si le texte ne contient pas d'accolades, on le retourne sans autre traitement     If Not sSource.Contains("{") Then         Return sSource         Exit Function     End If      'Recherche de tous les groupes de mots entre accolades ne contenant pas d'accolades     Dim oReg As New Regex("{([^{}]*)}")      'Pour chaque groupe correspondant à notre recherche...     For Each oMatch As Match In oReg.Matches(sSource) 		'On découpe le contenu en tableau de chaînes (le séparateur est un pipe)         Dim sMots() As String = oMatch.Groups(1).Value.Split("|"(0)) 		'On remplace le groupe par l'un des mots pris au hasard         Dim iPos As Integer = sSource.IndexOf(oM.Groups(0).Value)         sSource = sSource.Substring(0, iPos) & sMots(_Rand.Next(0, sMots.Length)) & sSource.Substring(iPos + oM.Groups(0).Value.Length)     Next      Return Spin(sSource) 'Récursivité sur le reste non spinné  End Function Langage du code : VB.NET (vbnet)

Il faut impérativement « sortir » le générateur de nombres aléatoires de la fonction récursive, au risque d’obtenir à chaque appel des spins identiques (j’ai été confronté à cet étrange problème !) ; en matière de performances, l’utilisation des expressions régulières procure un gain appréciable par rapport aux simples manipulations de chaînes de caractères.

On peut avec cette fonction, traiter de gros textes (+5000 mots) sans problème particuliers, et ainsi bâtir ses propres outils de content spinning.

Voir tous les articles de la catégorie Programmation

1 réflexion sur “VB.Net : fonction de content spinning”

  1. Avatar de Cédric GIRARD

    Petite mise à jour de principe, vu que le code n’était pas « parfait » : si plusieurs groupes de mots étaient identiques, tous prenaient la même valeur aléatoire.

    (nb : rectification suite à un bug m’ayant été signalé dans effiSpin en… juin 2012 !)

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut