Content spinning et légende du multi niveau ({} récursives)

On voit pas mal en ce moment d’articles vanter les mérites des {} récursives, autrement appelé multi-niveau. Ce multi-niveau est censé améliorer la qualité des textes spinnés, puisqu’en ajoutant des niveaux et des imbrications, on imagine que le texte est encore moins détectable.

C’est une illusion que nous allons détailler. Cela dit, la ligne de code qui permet de le faire est marrante, nous la passerons donc en revue, et enfin nous verrons pourquoi cette astuce a quand même son utilité.

Pourquoi les {} récursives sont-elles une légende ?

Tel que trop souvent présenté, le « multi-spinning » apporterait de la complexité au {métatexte|masterspin}, permettant d’optimiser les distances ou tout simplement d’augmenter le nombre de textes possibles.

Je ne partage pas cette analyse. Prenons un exemple de multi-niveau (3 tant qu’on y est) :

{Bonjour|Salut|Coucou depuis {la Terre|Mars {Attack|et ça repart|et non Marx}}}

On obtient 6 possibilités:

  1. Bonjour
  2. Salut
  3. Coucou depuis la Terre
  4. Coucou depuis Mars Attack
  5. Coucou depuis Mars et ça repart
  6. Coucou depuis Mars et non Marx

Pour être valable, le multi niveau devrait permettre d’augmenter le nombre possible de substitutions. Décomposons cette proposition avec des valeurs abstraites pour simplifier :

{A|B|C {D|E {F|G|H}}}

Que l’on parle de logique ou d’algèbre ce n’est qu’un problème de distributivité. Le multi-niveau n’est qu’une contraction de la proposition suivante, en l’occurrence une factorisation de ce qui suit:

{A|B|C D|C E F|C E G|C E H}

Ce qui donne à l’écriture du spin (une fois développé) :

{Bonjour|Salut|Coucou depuis la Terre|Coucou depuis Mars Attack|Coucou depuis Mars et ça repart|Coucou depuis Mars et non Marx}

Quand le script génère les propositions, il est confronté exactement au même nombre de substitutions possibles. En l’occurrence il n’y en a que 6.

Le multi-niveau a quand même des avantages

Autopsie d’une expression régulière

La ruse qui permet d’inverser le sens de parcours de l’arbre syntaxique est intéressante. Au lieu de parcourir l’arbre en Top/Down, on fait l’inverse. On va donc disséquer l’expression régulière qui permet cette astuce.

preg_match_all (‘/\{([^{}]*)\}/si’, $text, $matches);

Au lieu de construire l’arbre syntaxique et de le parcourir, on effectue directement les substitutions (les choix par tirages aléatoires) en commençant par les feuilles de l’arbre. Il suffit en réalité de rechercher les groupes d’accolades ne contenant aucune accolade. C’est à dire le groupe { X } avec X ne contenant aucune {.

On sépare alors les différentes alternatives balisées avec le | (par exemple avec X = A | B | C), afin de décider dans la foulée par tirage aléatoire l’alternative choisie (par exemple B), puis de substituer ce choix au groupe dans le texte.

Ayant ainsi supprimé les accolades du premier niveau, les accolades du deuxième niveau se retrouvent donc en première ligne pour être traitées itérativement de la même manière !

L’expression régulière présente dans preg_match_all deviens alors evidente ! (si si)

Non, l’expression \{([^{}]*)\} n’est pas un juron du capitaine Haddock

Si l’on fait maintenant abstraction de la syntaxe traditionnelle des fonctions du type « preg » du type « /REGEXP/si » pour se concentrer sur l’expression régulière elle même.

Elle signifie ceci:

une séquence qui commence par une accolade ouvrante (\{) et se termine par une accolade fermante (\}), mais toutes deux exclues de la zone à matcher (signifiant : faire correspondre), contenant un ensemble de caractères ( [X] * ), caractères X n’étant ni des accolades ouvrantes ni des accolades fermantes ( [^{}] ).

NB : La zone à matcher est celle comprise entre parenthèses.

Un confort d’écriture

Pour la qualité des textes spinnés, les {} récursives n’apportent rien. Par contre elles sont utiles pour le confort d’écriture [quand on spinne beaucoup ce n’est pas trivial]. Dans l’exemple ci-avant, ça évite d’écrire 3 fois le terme « Coucou ».

De plus pour le spinneur, il est plus facile de distribuer des propositions comme des COD ou des adjectifs plutôt que penser son spin par concaténations.

C’est pourquoi on ne peut que conseiller d’aller voir du côté de @512banque [Script PHP  Multiniveaux Recursif] qui propose un script dédié à cette tâche. On y a porté une touche personnelle ci-dessous:

 function spinnage($text){

  while (preg_match_all('/\{([^{}]*)\}/', $text, $matches)) {

    foreach ($matches[1] as $match_string)
    {
      $match_words = explode("|", $match_string);

      $max = count($match_words) -1;
      $pattern = preg_quote($match_string);

      $text = preg_replace("/\{$pattern\}/e",
 '\$match_words[rand(0,\$max)]', $text);
    }

  } // while

  return  $text;

 } // spinnage

 

11 réflexions au sujet de « Content spinning et légende du multi niveau ({} récursives) »

  1. Je préfère la version récursive mais j’admire l’astuce du rand(0,$max) à la place du shuffle (qui parcourt tout le tableau).

    Par contre pourquoi utiliser un preg_replace en lieu et place d’un str_replace ?

    • Ce bout de script fait partie d’un algo en développement. Un billet complet est en préparation.
      Pour répondre à la question nous avons besoin de la fonction /e (évaluation retardée) qui n’est pas prise en compte par str_replace.
      Sur la récursivité le choix est simple. La récursivité manque de performance (appels imbriqués). Et puis une récursivité terminale ça se dérécursifie (boucle) 😉

  2. @cdillat
    le récursif est coûteux en terme de ressources. Au delà de l’effet de mode (« le récursif, c’est bien »), la boucle et l’iteratif à l’ancienne sont bien plus adaptés.

  3. Il y a une série de mythes sur la rotation de contenu. Celui du spinning muti-niveaux que tu viens de faire tomber.
    Mais il y a aussi la croyance selon laquelle les textes redigés en série à la main ont moins de similarité que les textes produit par content spinning.
    Ou encore celle selon laquelle plus on emploie de synonymes variés plus on a de chance de ne pas être repérer comme du contenu dupliqué.

    Concernant la méthode récursive ayant déjà fait l’erreur, elle est à proscrire pour ce genre de tâche.

  4. Vu que j’écris des masterspins jusqu’à 4 niveaux je me vois pas écrire ca sur un seul niveau, cela serait l’enfer. J’utilise des tactiques simples du genre {a|b|b|||||} cela permet : d’avoir une chance sur huit de tomber sur a etc… ou sur rien ! Imaginons maintenant que a et b soit eux même des multi-niveaux ! (je sais ! ca fait des textes assez complexes|chiants à écrire).
    Donc je rejoins ton avis sur l’utilité du multi niveaux pour le confort, mais j’irais un peu plus loin : pour des masterspins super costauds, c’est indispensable. Petite astuce toute bête, mes premiers niveau sont forcement avec les ajustement [], le second avec (), le troisième avec etc… on gagne en visibilité, en efficacité une fois qu’on les connait par coeur et c’est plus facile de faire des scripts de vérification d’intégrité (et d’indiquer l’erreur).

    • Tout à fait je suis bien d’accord sur l’utilité. Le point central de ce billet avait pour but de rappeler laquelle. Et elle n’est pas statistique.

  5. La confusion vient simplement du fait que dans le langage courant des SEO, on part du principe que « spin de niveau 1 » et équivalent à « spin à base de synonymes exclusivement ».
    Alors qu’évidemment, il est possible, sur le papier, de faire du spin de niveau 1 sur des paragraphes, phrases, expressions et finalement sur des synonymes.

    Par contre, je mets au défi quiconque de parvenir à un degré de rigueur dans la rédaction du spin suffisant pour parvenir à rédiger du niveau 1 aussi performant que du multiniveau…

    On peut en théorie accéder au même degré de qualité indépendamment du nombre de niveaux, je suis d’accord. Mais en pratique, ce que tu appelles « confort d’écriture » est tellement important pour l’intelligibilité des processus de rédaction que ça s’apparente à une nécessité, je pense, pour qui souhaite obtenir du spin de bonne qualité.
    non ?

  6. Oui il peut y avoir plusieurs angles et des confusions sur l’objet. Je parle ici de l’illusion de rendement via la récursivité. On peut envisager des niveaux ailleurs comme tu le dis. Je ne connaissais pas ça sous cette acception.

    Un seul degré d’accolades suffit à varier les suggestions, tant aux plans syntaxique que grammatical et sémantique. Pour certains l’usage de plusieurs niveaux d’accolades est un besoin, pour d’autres non. Le temps des défis viendra peut-être ? 😉

Les commentaires sont fermés.