Remplacement de mot de maniere aleatoire ou defini

Eléphanteau du PHP | 23 Messages

19 avr. 2009, 18:09

salut,

je voudrais pouvoir remplacer certains mots dans mon texte par d'autre mais soit de maniere aleatoire soit en definissant de remplacer le mot quand il apparait pour la 3eme et 5eme fois.

je ne sais pas comment m'y prendre. J'ai essayé de compter le nombre de fois où apparaissent les mots à remplacer puis diviser par 2. Ainsi si dans un texte le mot chien apparait 5 fois je le remplace en position 5 et 3 (5/2=2.5 arrondi à 3) par le mot toutou.
Mais je ne sais pas comment ecrire une fonction localisera quand le mot apparait pour la 3eme fois.

Code : Tout sélectionner

$text ="le chien du voisin viens voir mon chien. j'adore caresser les chiens meme s'il me rendent chien parfois. Je ne voudrais pas forcement avoir une vie de chien"; substr_count($text, 'chien') = $nbrchien; //5 fois $nbrchien/2 = $nbrtoutou;
Merci pour votre aide.

ViPHP
ViPHP | 5924 Messages

19 avr. 2009, 20:48

Ya une utilité ? :shock:
Ca m'a l'air une technique un peu foireuse pour enrichir un texte pauvre en synonymes… :-/

Eléphanteau du PHP | 23 Messages

20 avr. 2009, 07:32

tu es tombé juste :?

J'ai du texte que je recupere sur des sites d'infos et pour ne pas avoir de duplicate content j'essaye d'inserer des synonymes ou tournures de phrases. Tu as une autre idée ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 5924 Messages

20 avr. 2009, 07:46

tu es tombé juste :?

J'ai du texte que je recupere sur des sites d'infos et pour ne pas avoir de duplicate content j'essaye d'inserer des synonymes ou tournures de phrases. Tu as une autre idée ?
Bah, faire un tri dans ce que tu récupères (voire dans les sites)…
Parce que quand un site se permet de plagier d'autres articles, on peut dire que ce soit une source, disons, inutile…

Eléphanteau du PHP | 23 Messages

20 avr. 2009, 17:29

En fait c'est pour que les sites qui s'inscrivent sur mon annuaire n'aient pas la meme description que sur les autres annuaires surlesquelles ils sont deja.

ViPHP
ViPHP | 5924 Messages

20 avr. 2009, 23:38

La blague :D

ViPHP
ViPHP | 3300 Messages

21 avr. 2009, 00:33

concretement c'est pas tellement utile de chercher à se démarquer comme ca, mais tu aurais des résultats corrects en faisant str_replace('chien', 'toutou', $text);
Fait du php depuis que ca existe ou presque :)

Invité
Invité n'ayant pas de compte PHPfrance

21 avr. 2009, 07:25

Je sais mais cela fait disparaitre totalement des mots cles comme ici "chien".

Je trouve important de changer la description des sites sur les annuaires car si la personne l'inscrit sur 50 sites avec la meme description, on a vite du duplicate content.
La plupart font un copié-collé de la meme description ou utilise des autosubmitter ce qui au final donne la meme info.

Mammouth du PHP | 661 Messages

21 avr. 2009, 09:27

salut :

ce que je pourrais te conseiller c'est de stocker tous les mots dans un tableau (explode(' ', content)
ensuite, tu fais une boucle pour les analyser et/ou les changer en incrémentant des tableau contenant en clé le mot, tu peux en avoir le nombre
for($j=0; $j<count($words), $j++){
  if (empty($listingWord[$words[$j]]){$listingWord[$words[$j]] = 0; }
  elseif (count($listingWord[$words[$j]] ) > 5) {words[$j] = $equivalent[$words[$j]]];}
  $listingWord[$words[$j]]++;
}
ensuite, il te suffit de réafficher la table $words avec implode() ...

Ceci te conviendrait-il ? attention aux perfs tout de meme, sur un Gros traitement de données, ça peut faire mal !!!!

Invité
Invité n'ayant pas de compte PHPfrance

21 avr. 2009, 22:14

Merci pour ton conseil.

tu aurais un exemple de phrase pour que je comprenne mieux ta technique ?
je ne comprend pas excatement ce qu'il se passe au niveau du traitement. :?

Pour les perfs c'est pas trop grave car je fais ce boulot qu'une fois avant d'ecrire dans la BDD grace a une tache cron

Mammouth du PHP | 661 Messages

21 avr. 2009, 22:52

le principe est celui ci :
$nb = 3 ;// nb max de mots répétés
$equivalent = array('le'=>'be');

$phrase = "le jours ou le printemps arrive le soleil nous mene le beau temps tout le temps";
$words = explode(' ', $phrase);
$listingWord = array();

for($j=0; $j<count($words), $j++){
  if (empty($listingWord[$words[$j]]){$listingWord[$words[$j]] = 0; }
  elseif (count($listingWord[$words[$j]] ) > $nb) {$words[$j] = $equivalent[$words[$j]]];}
  $listingWord[$words[$j]]++;
}

echo implode(' ', $words);
/* affiche => le jours ou le printemps arrive le soleil nous mène be beau temps tout be temps */
voila .. l'exemple est a ch***, mais à pour seul objectif de montrer le fonctionnement ;)

@+

Invité
Invité n'ayant pas de compte PHPfrance

22 avr. 2009, 06:57

Merci c'est une fonction precieuse que tu m'a donné. :D

- Par contre elle compte tous les mots ou seulement les synonymes rentrés dans equivalent ?
Il serait interessant de compter seulement les mots avec synonymes.
Car ici si j'ai un autre mot repeté plus de 3 fois il va allez cherché l'equivalent et ne va pas le trouver non ?

Sinon Je n'ai plus qu'a faire une liste de synonymes.

- Derniere chose tu sait comment intervertir l'ordre des phrases ? (pour que la phrase 2 vienne à la place de la 3)

Eléphanteau du PHP | 23 Messages

24 avr. 2009, 22:01

Tu as une idéée pour les remarques que j'ai fait ?

Mammouth du PHP | 661 Messages

24 avr. 2009, 22:12

Oups, j'avais pas vu ta réponses ...

en effet ça compte tous les mots, mais modifier la fonction est relativement simple et tu devrais t'en sortir ....
Ce forum est ici pour aider en donnant des indication, je ne crois pas que ce soit pour donner des scripts tout pré, d'ailleurs, tu constateras à l'avenir que cette petite fonction ne va pas vraiement te suffire et qu'il serait bon de véritablement l'améliorer pour qu'elle soit pleinement opérationnelle ...

De plus, il me semble que les moteurs font des recherches en ce sens pour éviter le duplicate Content, c'est le gros travail de 2009 (dixit google) limiter le duplicate content, et vu que la technique des synonymes est employée depuis quelques année déja, je penses que ton affaire ne va pas survire bien longtemps dans l'état ...

Pour ce qui est d'intervertir les phrases, il te suffit de faire un tableau avec les '.' en parametre de l' explode(), et trier de manière plus ou moins aléatoire le tableau ... ensuite implode() te réinscrira les phrases en une seule variable ...


voila ... Bon Courage ...

Invité
Invité n'ayant pas de compte PHPfrance

25 avr. 2009, 09:58

Merci pour ta reponse. Je vais travailler la dessus.

Tu penses qu'il reste des moyens pour essayer d'eviter le duplicate content des textes ou google le verra quand meme ?