éliminer des mots de chaine + insérer dans bd

Fermé
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010 - 20 avril 2009 à 12:48
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010 - 20 avril 2009 à 23:59
Bonjour,
j'ai une question :
j'ai une chaine de caractére, et sur cette chaine de caractere j'ai fiat plusieurs traitemant qui sont :
1- supprimer les caractéres spécieux.
2- éliminer les mots vides comme : de, le, les, une, des,.....
3-et je récupéres chaque mots aprés l'élimination des caractéres spécieux et les mots vides et je calcule le nobre d'occurence et a la fin je l'inserer dans la base de données.

voila le code :
$chaine="emploi, recrutement de,offre emploi en ,lettre motivation,emploi, recrutement , recherche emploi, actualite emploi, formation, annonces emploi, cabinet de recrutement, carrière; cabinets de recrutement.";

$aTab = preg_split('`[\s| :\,\ ;\.\«\»\"\\\/{\}\-\_(\)\+\-\[\]\=\?\!\$\©\@\§\ \ ]+`', $chaine);//supprimer les caractéres spécieux
While (list ($cle,$valeur) = each($aTab)) //afficher sous forme d'un tableau
{
echo $cle." - ".$valeur."<br />";
}
//éliminer les des mots vides
$aTab = array_flip($aTab);
unset($aTab['de']); //supprimer le mot vide "de"
$aTab = array_flip($aTab);

//transformer le tableau sous forme d'une chaine de caractére
$champs1=implode(" ",$aTab);
echo ("$champs1"); //afficher la chaine


$chaine2 = "$champs1";
$nb = array_count_values(explode(' ', strtolower($chaine2))); //pour calculer le nombre d'occurence

echo '<pre>';
While (list ($cle,$valeur) = each($nb))
{
echo $cle." - ".$valeur."<br />";
}
echo '</pre>';

//inserer dans la base de donner
$value = array();
foreach($nb as $mot)
{
$value[] = "('$mot')";
}

// connexion SQL
mysql_query("INSERT INTO stage (terme) VALUES ".implode(',', $value)) or die(mysql_error());
mysql_close();





la question :
le reultat d'affichage :

0 - emploi
1 - recrutement
2 - en
3 - offre
4 - emploi
5 - de
6 - lettre
7 - motivation
8 - emploi
9 - recrutement
10 - recherche
11 - emploi
12 - actualite
13 - emploi
14 - formation
15 - annonces
16 - emploi
17 - cabinet
18 - de
19 - recrutement
20 - carrière
21 - cabinets
22 - de
23 - recrutement
24 -
emploi recrutement en lettre motivation recherche actualite formation annonces cabinet carrière cabinets
emploi - 1
recrutement - 1
en - 1
lettre - 1
motivation - 1
recherche - 1
actualite - 1
formation - 1
annonces - 1
cabinet - 1
carrière - 1
cabinets - 1
- 1



et insere dans la base de données les nombres d'occurence (1,1,1,1,1,.....).

svp ace qu'il ya qlq peut me répondre et m'aider c'ets urgent svp. j'ai besoin d'une réponse pour que je puisse continue c'est la base de mon travail.
merci d'avance.

4 réponses

P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
20 avril 2009 à 15:01
Pas très sorcier à faire avec preg_match_all(), preg_repplace() array_filter() et array_count_values().

Donnerait.
<?php

$chaine = 'emploi, recrutement de,offre emploi en ,lettre motivation,emploi, recrutement , recherche emploi, actualite emploi, formation, annonces emploi, cabinet de recrutement, carrière; cabinets de recrutement.';

$motsExclus = array('une', 'un', 'de', 'des', 'le', 'la', 'les', 'en');

if( preg_match_all('`\w{2,}`', $chaine, $result) )
{
   // Remplacement des mots exclus par rien
   $result[0] = preg_replace('`\b(' . implode($motsExclus, '|') . ')\b`i', '', $result[0]);
   // Suppression des éléments vides avec array_filter()
   $result[0] = array_filter($result[0]);
   
   // Tableau des occurences
   $stats = array_count_values($result[0]);
   
   print_r($stats);
}

?>
0
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010
20 avril 2009 à 16:05
Bonjour,
merci beaucoup pour votre réponse le pb est réglé.
mrci mille fois.
mais j'ai une autre question si c'est possible!!!!!!!!!!!!!!!!!!!!!!!

comment je peut inserer dans la base de données chaque mot et son occurence.

svp de me répondre si c'est possible.
merci d'avance.
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
20 avril 2009 à 20:42
Bah une simple boucle et le tour est joué.
$sql ='INSERT INTO latable(mot, nombre) VALUES';
foreach( $stat as $mot => $nb )
    $sql .= "('$mot', $nb),";
$sql = rtrim($sql, ',');

$query = mysql_query($sql);
0
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010
20 avril 2009 à 23:59
Bonjour,
merci beucoup pour votre réponse ça marche tré bien.
mais si je siuhaite d'insérer "$code" avec chaque mot et l'occurence de ce derniére c-à-d j'insert le mot son occurence et le code (qui contient l'url d'un site).
désolé pour le dérangement.
merci d'avance.
0