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

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.

1 commentaire sur VB.Net : fonction de content spinning
  1. Cédric GIRARD Répondre

    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 !)

Laisser un commentaire

Votre adresse email ne sera pas publiée. Merci de saisir votre nom ou pseudo (pas de pseudo SEO merci !), votre email et votre commentaire.