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
Commentaires (47)
Catégorie: Génération de contenu,Scraping
- Ajouter cet article à :
- Del.icio.us -
- Digg
Commentaire par Stoff (4 commentaires)
Vendredi, 11 juillet , 2008 à 14:07
Du grand art, merci les chefs!
Commentaire par Morgan (27 commentaires)
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
Commentaire par BlackMelvyn
Vendredi, 11 juillet , 2008 à 20:49
Ravi que ça vous plaise ![]()
@RiPSO : pour les autres langues, c’est plus cher
Commentaire par kinder (1 commentaire)
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
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 (22 commentaires)
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
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
Commentaire par Jice (1 commentaire)
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 !
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 (1 commentaire)
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
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 ?)
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 (1 commentaire)
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 (1 commentaire)
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
…
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 (1 commentaire)
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 (1 commentaire)
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 (1 commentaire)
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 (1 commentaire)
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















