Page 1 sur 2

aide et conseil pour un traducteur

Posté : 11 juin 2005, 07:53
par adri120
Bonjour !

Je voudrais faire un traducteur de language SMS. Mais je ne sait pas vraiment comment m'y prendre. Je sais qu'il faut faire 2 table (une pour le mot en SMS et l'aute pour sa traduction) mais aprés je ne vois pas comment faire. Pouvez-vous m'aider ?

Merci

Posté : 11 juin 2005, 08:58
par PhilFree
Salut!

Pourquoi veux-tu faire deux tables ?

Une table avec un champ SMS et un autre Français, ça devrait faire l'affaire.

Selon l'INPUT de ton visiteur tu fais une recherche sur le champ SMS ou le champ Français.

Posté : 11 juin 2005, 09:10
par adri120
OK

mais comment faire la recherche. je ne suis pas trés au point sur ce point là.

Posté : 11 juin 2005, 09:15
par Cyrano
Avec un champ "français" et un champ "sms" tu cherches par exemple:
- du français vers le sms:

Code : Tout sélectionner

SELECT `sms`FROM traduction WHERE `francais` = 'mot francais'
- du sms vers le français:

Code : Tout sélectionner

SELECT `francais`FROM traduction WHERE `sms` = 'mot sms'

Posté : 11 juin 2005, 09:24
par adri120
par exemple si je fait un formulaire avec une case qui s'appelle sms

mon code sera

Code : Tout sélectionner

SELECT `sms`FROM traduction WHERE `francais` = '$_POST['sms']'
s'est sa ?
Mais est-ce que sa découpe la phrase mot à mot ?

Posté : 11 juin 2005, 09:37
par Cyrano
Attends, tu dois distinguer deux choses: d'une part une phrase contenant des mots normaux et des mots sms, et d'autre part la traduction des mots dans un sens ou un autre.

Le premier problème si tu pars d'une phrase, c'est d'isoler les mots individuellement de la phrase saisie dans ton formulaire. Tu dois ensuite distinguer dans cette phrase les mots qui sont sms de ceux qui n'ont pas besoin d'être traduits.

Tu t'attaques à un gros morceau parce que ça veut dire pas mal d'échanges avec la base de données où tu devras avoir un dictionnaire. D'autant plus que dans un sms, on peut aussi mettre ce qui ne sont pas des mots mais des signes, des smileys par exemple qui ne se traduisent pas vraiment.

Si tu ne fais que de la traduction de mots, ça peut encore aller, mais si tu veux traduire des phrases, c'est une autre paire de manches.

Posté : 11 juin 2005, 09:45
par adri120
en fait s'est simple ont isole chaque mot de la phrase après on demande à mysql si elle a la traduction de chaque mot et si elle n'a pas la traduction elle ne change pas le mot. non sa ne marche pas comme sa ?

Posté : 11 juin 2005, 10:48
par adri120
on fait comment pour découper la phrase ?

Posté : 11 juin 2005, 10:53
par Cyrano
Pour découper une phrase, utilises explode()
explode(" ", $phrase);
Ça va mettre ta phrase dans un tableau de mots, le séparateur étant l'espace " "

Le problème c'est que si ta phrase est un peu longue, tu vas avoir une quantité d'échanges avec MySQL qui va ralentir pas mal l'application. Tu vas devoir soigneusement analyser l'indexation des champs de ta base...

Posté : 11 juin 2005, 11:08
par adri120
a ouai je croi que j'ai compris !
en fait on fait comme sa :

<?
$phrase = "$_POST['le_nom_du_formulaire']";
$_POST['le_nom_du_formulaire'] = explode(" ", $phrase);
echo $pieces[0]; // pièce1
echo $pieces[1]; // pièce2
?>

non s'est pas sa ?

Posté : 11 juin 2005, 11:16
par Cyrano
Pas tout à fait, mais tu es dans le ton:
<?
$phrase = "$_POST['le_nom_du_champ_duformulaire']";
$liste = explode(" ", $phrase);
$nb_mots = count($liste);
for($i = 0; $i < $nb_mots; $i++)
{
    echo("<p>". $liste[$i] ."</p>\n");
}
?> 

Posté : 11 juin 2005, 11:23
par adri120
je ne comprend pas ce que tu a fait là :

Code : Tout sélectionner

$nb_mots = count($liste); for($i = 0; $i < $nb_mots; $i++) { echo("<p>". $liste[$i] ."</p>\n"); } ?>
tu peut m'expliquer ?

Posté : 11 juin 2005, 11:28
par Cyrano
count() va retourner le nombre de mots contenus dans le tableau $liste;
ensuite, je fais une boucle pour afficher chaque mot individuellement et incrémentant le pointeur. $liste est un tableau indexé dont l'index commence à 0 puis continue pour chaque mot, 1, 2, 3, 4, etc... Donc à chaque tout de boucle for(), le pointeur s'incrémente automatiquement, c'est comme si j'avais mis echo("<p>". $liste[0] ."</p>\n"); puis echo("<p>". $liste[1] ."</p>\n"); etc jusqu'à ce qu'on atteigne le nombre de mots contenus. De cette manière, qu'il ait 1 ou 300 mots, tu n'as pas à te soucier du nombre pour les afficher tous un par un... ou les traiter un par un pour traduire.

Posté : 11 juin 2005, 11:29
par adri120
ah en fait tu a fait une boucle pour afficher chaque mot. Si j'ai bien compris chaque mot découpé s'appel $i il n'y a plus que count que je ne comprend pas

Posté : 11 juin 2005, 11:37
par Cyrano
non, $i est un index : représente-toi un tableau sur deux colonnes : une colonne où chaque cellule a un numéro, et dans la cellule en face de chaque numéro est contenu le mot extrait de la phrase. Donc:
- $ligne est le tableau;
- $i est ce numéro de ligne commençant à 0 pour la première ligne;

count() est une fonction PHP qui va compter le nombre de lignes dans le tableau et retourner ce nombre. Si j'ai 4 lignes, count($ligne) va retourner 4.