Formation référencement

Dictionnaire des synonymes, des mots à la pelle

Ecrit par BlackMelvyn le Vendredi 11 juillet 2008 à 13:17 - Catégorie Génération de contenu,Scraping

Créer du contenu… le sujet a déjà été abordé maintes fois et la problématique reste bien présente….
Il y a toujours la possibilité d’utiliser des techniques de copieurs ou de faire du typosquatting etc…
Pas mal de solutions en réalité, plus ou moins belles, plus ou moins rapides et plus ou moins détectables.

Si l’on pense un peu au typosquatting, on en arrive rapidement à trouver une alternative à la génération de fautes d’orthographe : les synonymes.
En effet, il suffit de remplacer certains mots par leur synonyme et ainsi passer à travers le filtre anti duplicate content de nos amis les moteurs ;)
Le contenu, si vous travaillez bien, peut être très agréable pour vos visiteurs et ne perdra aucune pertinence quant à l’information que vous éditez…
La question principale est « Où trouver suffisamment de synonymes pour ça ? »

Passons à l’action : récupérer les synonymes

Je pense ne pas me tromper en disant que personne n’a envie de recopier à la main le dictionnaire des synonymes…., non ?
Pour ça, nous avons trouvé une solution simple, pas chère et efficace : les fichiers de dictionnaire de OpenOffice :)

Il suffit de récupérer un des dictionnaires des synonymes dans la langue voulue pour pouvoir en extraire proprement les synonymes grâce à PHP et aux expressions régulières.

Voici un exemple de code utilisé pour générer la table des synonymes en français :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
ini_set('max_execution_time', 60);
// Variables à éditer
$host = "serveur_mysql"; 
$user = "login"; 
$pass = "pass"; 
$bdd = "base";
@mysql_connect($host,$user,$pass) 
or die("Impossible de se connecter à au serveur MySQL");
@mysql_select_db($bdd) 
or die("Impossible de se connecter à la base de données");
// Fichier et table que l'on va exploiter
$file = 'nom_du_fichier.dat';
$table = 'thesaurus_fr';
 
// Fonction d'insertion des synonymes
function fill_syn(){
 global $out, $table;
 foreach($out as $word){
  $mot = $word[2];
  // Nettoyage de la chaîne des synonymes
  $liste = array_slice(explode('|', $word[3]), 1);
  // Mise sous forme de chaîne séparée par des virgules
  $synonymes = implode(',', $liste);
  // Insertion des synonymes dans la base
  mysql_query("INSERT INTO ".$table." VALUES('', '$mot', '$synonymes')");
 }
}
 
// Préparation de la table
$tables = array();
$q = mysql_query('SHOW TABLES FROM '.$bdd);
while($r = mysql_fetch_row($q)){
 $tables[] = $r[0];
}
if(in_array($table, $tables)){
 $sql = 'TRUNCATE TABLE `'.$table.'`';
}
else{
 $sql = 'CREATE TABLE IF NOT EXISTS `'.$bdd.'`.`'.$table
    .'` (`synonymes_id` INT NOT NULL AUTO_INCREMENT, `synonymes_racine`'
    .' VARCHAR(60) NOT NULL, `synonymes_mots` TINYTEXT NOT NULL, '
    .'PRIMARY KEY (`synonymes_id`)) ENGINE = MyISAM';
}
// Utilisation
if(mysql_query($sql)){
 $str = file_get_contents($file);
 $regexp = '#(([\wazéêèëîïöôùàáâãäåòóôõöøçùúûüÿñß\s ]+)\|1)+[\r\n\s]+\(.*\)((\|.+)+)#xi';
 if(preg_match_all($regexp, $str, $out, PREG_SET_ORDER)){
  fill_syn();
  echo 'Fichier traité, table complétée, synonymes insérés';
 }
 else{
  echo 'Erreur de traitement des synonymes';
 }
}
else{
 echo 'Erreur, la table n\'a pas pu être créée : '.mysql_error();
}
?>

Cette petite expression régulière est bien entendu à adapter aux autres langues si besoin, mais le noyau est là :) . Il peut y avoir des variantes plus ou moins simples pour arriver au même résultat.
Comme aujourd’hui il fait beau, les tables des synonymes en français et en anglais sont disponibles au téléchargement juste en dessous….
Happy scraping :) but don’t be evil !

Cliquez ces liens pour télécharger la table des synonymes :
» Liste des synonymes en anglais
» Liste des synonymes en français

Articles liés :

Commentaires (47)

Catégorie: Génération de contenu,Scraping


47 Commentaires

Commentaire par Stoff

Vendredi, 11 juillet , 2008 à 14:07

Du grand art, merci les chefs!

Commentaire par Morgan

Vendredi, 11 juillet , 2008 à 14:46

Du bon boulot, merci les gars :)

Commentaire par RiPSO

Vendredi, 11 juillet , 2008 à 15:39

si si je fais parti de ceux qui avaient prévu de recopier le dictionnaire… 800 à compter de 10 pages par jour tu m’as fais gagner 2 mois et demie :)

Merci beaucoup!!

PS : si d’autres s’occupent des autres langues ça m’interesse aussi :)

Commentaire par ludomovies

Vendredi, 11 juillet , 2008 à 17:12

Wahou, c’est mortel

Je viens de passer l’après-midi a chercher un dico des synonymes a exporter en CSV et comme j’étais bredouille, je m’étais rabattu sur mon bloglines pour lire des news en attendant la fin de journée (de taff)

Et j’ai failli m’étouffer en lisant le titre du post.

formidable, encore MERCI

Ludo

Edit Admin: je viens de supprimer ton lien, pas de liens vers sites de Q ici ;)

Commentaire par admin

Vendredi, 11 juillet , 2008 à 17:19

C’est clair que cet article va faire des heureux ;)

D’ailleurs n’hésitez pas à scooper l’article et pourquoi pas le linker :lol:

Commentaire par BlackMelvyn

Vendredi, 11 juillet , 2008 à 20:49

Ravi que ça vous plaise :)
@RiPSO : pour les autres langues, c’est plus cher :lol:

Commentaire par kinder

Samedi, 12 juillet , 2008 à 21:21

j’aimerais bien voir un exemple ?

Commentaire par admin

Lundi, 14 juillet , 2008 à 14:47

@Kinder, tu veux voir un exemple de quoi ?

Commentaire par RiPSO

Lundi, 14 juillet , 2008 à 21:35

@BlackMelvyn: Je suis prêt à payer 1000% de + que la gratuité de la version Fr et En :lol:

Commentaire par BlackMelvyn

Jeudi, 17 juillet , 2008 à 8:49

Pas assez cher mon fils ! :)

Commentaire par RiPSO

Vendredi, 18 juillet , 2008 à 8:36

Je n’ai pas trouvé le chemin vers les dicos de synonymes, je n’ai trouvé que le dictionnaire orthographique.

Tu peux me dire où il se trouve please?

Commentaire par BlackMelvyn

Samedi, 19 juillet , 2008 à 19:26

Ben je crois que c’est dans le même dossier F.T.P…
Regarde à la fin du listing, il me semble que c’est dans ce coin là…

Commentaire par Julien

Dimanche, 20 juillet , 2008 à 12:04

En cours de traitement…
Vous aurez en privé mon retour si on arrive à en faire quelque chose.

Merci à vous 2 la dream team :-D

Commentaire par admin

Dimanche, 20 juillet , 2008 à 12:36

Hello Julien, j’ai essayé de faire un outil d’aide à la génération de texte, j’en suis là pour le moment : http://www.seoblackout.com/scripts/synonymes/synonymes.php , il me reste à traiter les verbes conjugés (en cours), à traiter les singuliers et pluriels, le féminin et masculin. Si tu veux le source actuel, fait-moi signe par MP ;) idem pour blackMelvyn, je vais te transférer le source si tu veux jeter un oeil ;)

Edit : si vous avez des idées niveau présentation et lisibilité, je suis preneur ;)

Commentaire par BlackMelvyn

Dimanche, 20 juillet , 2008 à 20:55

Merci Tiger ;)
je regarde tout ça :P

Commentaire par Jice

Jeudi, 24 juillet , 2008 à 17:17

Ca me fait aussi penser qu’on peut générer du contenu pour Djeunz’ … voir l’outil :

http://kikoolol.memepasmal.net

C’est une idée non? Plutôt que de générer des synonyme ou des fautes d’orthographe, on simule un skybloger!

Allez, pour la route : lol

Commentaire par Rocca

Samedi, 26 juillet , 2008 à 12:42

Super Script! je vais l’utiliser sur un de mes sites pour voir si la sanction qu’il a recu du 26 juin (pour duplicate je pense, comme beaucoup …) s’annulera plus tard grace au contenu qui ne sera plus similaire.

Julien

Commentaire par Julien

Samedi, 26 juillet , 2008 à 16:41

Apparement l’expression régulière ne fonctionne pas chez moi, j’obtiens une erreur : Erreur de traitement des synonymes
J’utilise php5 pourtant…
Si quelqu’un a reussi a surmonter ce problème je suis preneur.

Julien

Commentaire par BlackMelvyn

Dimanche, 27 juillet , 2008 à 13:34

@jice : why not mais faut prévoir la boîte d’aspirine une fois que t’as fini de lire la page ! :lol:

Commentaire par BlackMelvyn

Lundi, 28 juillet , 2008 à 8:34

@Julien : quel fichier utilises-tu ? peux-tu me donner son nom exact ?

Commentaire par Julien

Lundi, 28 juillet , 2008 à 11:47

BlackMelvyn, merci en fait j’ai reussi a me débrouiller il n’y avait pas de soucis avec la regex.

Julien

Commentaire par Mel

Vendredi, 22 août , 2008 à 9:28

On peut aussi utiliser le dico des synonymes de word, et meme un dico des synonymes version papier !! sisi ça existe..! Et faire marcher son cerveau pour changer les mots soit meme. Ca marche je vous jure !

Commentaire par admin

Vendredi, 22 août , 2008 à 11:05

Merci Mel, on était passé à côté, ça c’est parcequ’on a peu de neurones tu sais :lol:

Commentaire par BlackMelvyn

Vendredi, 22 août , 2008 à 19:05

Qui a parlé de changer les mots ? ;)
Moi en tout cas j’ai essayé, mais tout ça n’a pas marché… carrément pas de neurones (l’âge ?) :lol:

Commentaire par Urax

Vendredi, 29 août , 2008 à 15:20

merci pour ce billet qui est vraiment excellent !!
J’aimerai bien avoir ton script pour réecrire du texte avec les synonymes.

J’en ai développé un mais il est très lent ..à défaut de ton script je suis preneur de toute info pour optimiser tout ça ;)

Commentaire par thewebmaster

Samedi, 27 septembre , 2008 à 14:47

Bonjour,

Un peu en retard mais merci pour l’article. Suite au commentaire de Urax, j’ai developpé une petite fonction, que je partage avec vous. Celle-ci est perfectible et peut être assez longue sur de gros textes mais fonctionne. Par ailleurs, pour certains mots, il ne faut pas hésiter à faire les modifs en base car le dico n est pas toujours..comment dire.. synomyme?

Voici la fonction que j’utilise en utilisant l’export fourni dans cet article :

<?php
//Pour regler la sensibilité
// Nom de synonymes totaux pour le texte
define ("NBSYN",1000);
// Longueur minimale d'un mot pour recheche les synonymes
define ("lLONGSYN",3);
// Nombre de choix possibles pour un mot
define ("CHOIXSYN",6);
// Vous pouvez modifier la function synonim pour passer ces define en parametres.
//Une fonction qui est pratique qui melange un tableau
//Trouvée je ne sais ou :)
function elementsDifferents($tableau, $nbElements, $exclure=array())
{
   $retour=array();
 
   for($i=1; $i<=$nbElements; $i++)
   {
      $valeurs=array_values($tableau);
 
      // on tire au hasard une valeur, tant qu'on n'en trouve pas une qui ne soit pas exclue
      do
      {
         $valTiree=$valeurs[mt_rand(0, count($valeurs)-1)];
      }
      while(in_array($valTiree, $exclure));
 
      // on stocke la valeur trouvée et on la supprime du tableau afin qu'elle ne soit plus tirée 
      $retour[]=$valTiree;
      $index=array_search($valTiree, $tableau);
 
      unset($tableau[$index]);
   }
 
   return $retour;
}
//voici la fonction que j'ai codée. Les resultats peuvent être surprenants et incompréhensibles!!
 
function synonim($text)
{
  //La vous placez votre code pour vouss connecter a votre base de donnée  
  $resultat = split(" ",$text);
  srand((float)microtime()*1000000);
  for ($syniterator=0;$syniterator<sizeof($resultat);$syniterator++)
  {
  $sql = "select synonymes_mots,synonymes_racine from thesaurus_fr WHERE synonymes_racine =  '".$resultat[$syniterator]."'  limit 1;";
    $synsqlresult = mysql_query($sql,$connexionlk);
  $synresult=mysql_fetch_array($synsqlresult,MYSQL_ASSOC);
  if ((strlen($resultat[$syniterator])>lLONGSYN)&&(mysql_num_rows($synsqlresult)>0)&&($nbmots<NBSYN))
  {
  $synunique = split(",",$synresult["synonymes_mots"]);
 
  $synunique=elementsDifferents($synunique,CHOIXSYN);
   if (strlen($synunique[0])>2)
   $resultat[$syniterator]=$synunique[0];
    $nbmots++;
   }
  }
return (implode(" ",$resultat));
} ?>

Pour l’utiliser, c’est très simple

<?php $texte=synonim($texte); ?>

Bonne continuation à ce blog :)

Commentaire par admin

Samedi, 27 septembre , 2008 à 19:34

Merci thewebmaster, le partage est fortement apprécié ici ;)

Commentaire par BlackMelvyn

Samedi, 27 septembre , 2008 à 20:37

Sympa, je vais tester ;)
Merci :)

Commentaire par Egere

Samedi, 29 novembre , 2008 à 19:31

Les archives ne sont pas dézippables.

Commentaire par admin

Dimanche, 30 novembre , 2008 à 16:35

@Egere : C’est à dire ? les archives sont au format zip, je ne vois pas pourquoi tu ne parviens pas à les ouvrir…

Commentaire par papounet

Dimanche, 14 décembre , 2008 à 17:03

Salut!

Plutôt sympa et merci pour le partage, toutefois je bloque au niveau du fichier.dat, que doit-il contenir et à quoi sert-il ?

Merci.

Commentaire par foxito

Dimanche, 21 décembre , 2008 à 13:26

Sympa.
Comme d’hab…
Merci pour ce gain de temps non négligeable…

Commentaire par Mike

Dimanche, 28 décembre , 2008 à 11:20

Salut, serait-il possible d’avoir la source de ce script? http://www.seoblackout.com/scripts/synonymes/synonymes.php

C’est vraiment magnifique et cela m’aiderai beaucoup :) merci

Commentaire par gandolfi

Mardi, 5 mai , 2009 à 21:59

Salut,

merci pour ton script tres utile, par contre ton fichier de synonyme deconne pas mal avec des mots qui sont melangés ou en double avec des synonymes qui n’ont rien à voir.
Ex: femme -> chaque ?

Commentaire par dardarmotus

Mardi, 19 mai , 2009 à 20:08

Hello je serais interessé également par l’ébauche du script synonymes.php si quelqu’un m’entends ;-)

Commentaire par edity

Mardi, 26 mai , 2009 à 18:29

sympa synonymes.php mais finalement ça peut prendre pas mal de temps…
Voici le résultat d’un test :
Texte original :
« j’étais parti à la cantine quand soudain cette femme surgit du coin de la porte pour me tendre un verre de vin »
Texte modifié :
« j’étais aviné à la buvette lorsque brusquement la femme surgit du renfoncement de cette entablement pour me proroger un verre de bakchich »

Bon c’est vrai que le texte d’origine ne voulait rien dire non plus :D

Merci en tous cas pour cette très bonne astuce qui va m’éviter de rentrer plus de 300.000 termes à la mano…!

Commentaire par Paul

Mardi, 23 juin , 2009 à 20:22

Salut,

Ces fichiers sont excellents et je t’en remercie.
Juste un détail : ils sont au format GZIP et non pas ZIP ;-)

Commentaire par dnc

Dimanche, 16 août , 2009 à 16:24

Salut,
« vin » qui devient « bakchich » dans le commentaire d’edity du 26 mai illustre bien un des problèmes de ce script.

Dans le fichier source d’open office, bakchich est le synonyme de « pot de vin ». Mais l’expression régulière (que je ne suis pas capable d’améliorer) traite très mal les expressions comme « pot de vin », ce qui conduit a pas mal de contre-sens.

En corrigeant l’expression régulière, ça devrait grandement améliorer la pertinence des textes générés par synonymes.php.

Commentaire par Mojopsg

Mercredi, 19 août , 2009 à 12:05

Merci beaucoup pour cet article, c’est vraiment pratique pour la soumission dans les annus.

Bravo également pour l’ensemble du blog que je viens de découvrir aujourd’hui et c’est incroyable la somme d’informations utiles qui est réuni ici !

Commentaire par fredgimini

Mardi, 1 septembre , 2009 à 20:18

@admin : pourrais tu nous faire partager une de tes requêtes magiques sur google comme celles que tu as donné pour trouver des proxy mais cette fois ci pour trouver des fichiers dico_syno.dat.
En effet j’ai facilement trouvé le fichier dat des synonymes de openoffice mais à part celui là je n’en ai trouvé aucun autre. Il doit bien en exister d’autre quelque part !

Commentaire par fredgimini

Mercredi, 2 septembre , 2009 à 21:53

Toujours sur cette article passionnant j’ai testé le script de thewebmaster pour réécrire un texte avec des synonymes. Au passage il y a une petite erreur sur cette ligne <?php $texte=synonim($texte); ?> c’est text sans le e.
Pour qu’il soit plus convivial à utiliser je fais un formulaire pour rentrer le texte à réécrire donc au lieu d’avoir :
$text='mon texte à réécrire';j’ai$text=$_POST['text'] et à partir de là j’ai cette erreur
Notice: Undefined offset: 0 in …………………. on line 28 qui correspond à cette ligne
$valTiree=$valeurs[mt_rand(0, count($valeurs)-1)];
Bon je sais que l’on peut supprimer l’erreur avec
@error_reporting(E_ALL ^ E_NOTICE);
ce qui n’est pas très propre, je pense qu’il faut tester si $valeurs existe mais aucune des lignes que j’ai écrite ne fonctionne.
Si quelqu’un à une idée… je suis preneur

Commentaire par Art

Mercredi, 9 septembre , 2009 à 11:24

Merci pour ce script très intéressant. Savez-vous comment gérer les verbes?

Par exemple : Il le chasse de chez lui.

Le script considérera « chasse » comme un nom (et non un verbe) et le remplaçera par: Il le filature de chez lui

Merci de votre aide

Commentaire par Nicolaseo

Mardi, 29 septembre , 2009 à 18:44

Bonjour Tiger,

Un grand merci pour ce partage d’une grande utilité ;)

je cherche à écrire un script où l’on insère des articles pour générer des articles « spinné » donc je me documente un peu avant de me lancer et les listes vont déjà bien me mâcher le travail et je t’en remercie

je le partagerais ici et dans plusieurs communauté black hat une fois fini

Par contre j’ai voulu tester l’outil :
http://www.seoblackout.com/scripts/synonymes/synonymes.php
et il me renvoi le message « erreur mysql »

Commentaire par Yuxx

Vendredi, 18 décembre , 2009 à 23:22

c’est ce que je cherchais, une liste de synonymes !! merci

Commentaire par Chris

Lundi, 5 avril , 2010 à 15:20

Bonjour,

Le fichier « Liste des synonymes en français » est corrompue

Les champs de la table thesaurus_fr est paramétré TINYTEXT et cela à couper une grande partie du champs synonymes_mots il manque donc des mots.

Ou trouver le fichier du dictionnaire des synonymes de Open-Office pour recréer la DB ?

Merci

Commentaire par steeff

Mardi, 21 septembre , 2010 à 11:58

si on veut que la recherche se fasse en tenant compte des accents (ligue ligué) il faut modifier l’encodage du champ synomyne_racine en latin1_general_ci (par défaut il se met à latin1_swedish_ci) soit pour la création de la table

CREATE TABLE IF NOT EXISTS `thesaurus_fr` (
  `synonymes_id` int(11) NOT NULL AUTO_INCREMENT,
  `synonymes_racine` tinytext CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `synonymes_mots` tinytext NOT NULL,
  PRIMARY KEY (`synonymes_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=36193 ;

Commentaire par Jonathan

Lundi, 23 mai , 2011 à 0:11

Bonjour,

Tout d’abord merci beaucoup pour ce script BlackMelvyn :-) Merci aussi à Thewebmaster pour sa contribution très utile!

Par contre je rencontre un problème dans le script d’insertion. L’erreur « Erreur de traitement des synonymes » apparaît. Je dispose de PHP5 donc je ne comprend pas pourquoi preg_match_all ne passe pas. J’utilise le fichier thesaurus_fr.sql que j’ai téléchargé via le lien fournis dans l’article.

Si quelqu’un à une idée je suis preneur car du coup je suis bloqué pour la suite :(

A bientôt,
Jonathan

Les commentaires sont fermés pour cet article.



SEO BLACKOUT

Site web dédié aux techniques de référencement et de positionnement de sites web sur Google.

Certaines parties du site sont en accès restreint, ces espaces sont réservés à la SEO Black Hat Team.


Don't Be Evil !