Nettoyer une chaine de caractère des articles qu'elle contient - PHP - Programmation
Marsh Posté le 13-07-2004 à 10:40:04
hmm
peu etre explodé ta chaine avec le caractere " ", ce qui separera chaque mot, puis verificé que chaque mot du tableau ne soit pas dans la liste des mot interdit
Marsh Posté le 13-07-2004 à 10:48:28
chacal_one333 a écrit : hmm |
Tout à fait : c'est ce que je comptais faire. Le problème, c'est la comparaison avec la liste de mots interdit. Je ne pense pas qu'elle soit immense dans tous les cas (une 20aine de mots) mais c'est juste pour avoir un avis.
Quelle est la meilleure façon (=la plus rapide ?) pour déterminer si un mot fait partie d'une liste ?
Marsh Posté le 13-07-2004 à 10:49:20
ben surement un array
$interdit["le"]="le"
if (in_array($interdit, $phrase[x]))
strreplace...
Marsh Posté le 13-07-2004 à 10:55:07
En fait, je crois que j'ai trouvé ma réponse (du moins où la trouver). J'utilise une fonction pour éviter qu'un utilisateur ne puisse utiliser un nom réserver comme username (genre admin, root, system) etc...
Je vais simplement regarder comment elle fonctionne...
Marsh Posté le 13-07-2004 à 10:57:19
Je ne sais pas si ça peut te convenir, mais si tu utilises mysql, as-tu déjà regardé du coté des fonctionnalités de la recherche full-text : http://dev.mysql.com/doc/mysql/fr/Fulltext_Search.html ?
1. ne prend pas en compte les petits mots
2. te retourne une valeur de pertinance pour chaque enregistrement
3. plus rapide que de tout faire à la main (et aussi gain de temps d'écriture de la fonction de recherche) car utilisant des index
J'espère que c'est pas trop HS
Marsh Posté le 13-07-2004 à 11:05:46
C'est interessant : je vais jeter un coup d'oeil à ça.
Sinon, pour ceux que ça interesse, il faut utiliser simplement ereg avec l'opérateur ou (|) :
Exemple : savoir si une chaine contient un article :
eregi("le|la|les|un|une|des",$chaine)
Merci pour d'avoir fait vivre ce topic
Note : je m'en vais comprendre la fonction recherche full-text
Marsh Posté le 13-07-2004 à 10:38:43
Bonjour,
je cherche à faire une fonction me permettant de ne retenir que les éléments significatifs d'une chaine de caractère.
L'objectif est ensuite d'effectuer une recherche dans une base de donnée.
Imaginons que je veuille rechercher un titre de film. L'utilisateur saisi "La vie est un long fleuve tranquille" dans le champ à rechercher. Je voudrais que ma fonction :
1. Elimine les mots "la" et "un" et éventuellement "est"
2. Ne retient que les autres mots et leur associe leur nombre de lettre
: Vie [3], long[4], fleuve [5], tranquille[10]
3. Les tri par ordre décroissant et ne retient que les deux premiers (fleuve et tranquille)
Les point 2 et 3 ne posent pas de gros problèmes. Par contre, quelle est la meilleur méthode pour le point 1.
En gros, je veux vérifier si un mot est présent dans une liste.
Est-ce qu'il faut mieux :
1. faire un ensemble de Switch Case("la" ) Case ("le" )
2. travailler avec if(strpos())
3. tenter qq chose avec ereg (mais je vois pas comment faire)
4. existe-t-il une fonction toute faite ?
En vous remerciant par avance,
---------------
« Lorsque le bûcheron pénétra dans la forêt avec sa hache, les arbres se dirent : ne nous inquiétons pas, le manche est des nôtres. » | Gérez votre collection de BD en ligne !