[php] faire des recherches dans un texte

Fermé
maure - 15 nov. 2005 à 11:01
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 18 nov. 2005 à 23:33
Bonjour,

je cherche des fonctions php qui permettent de faire une recherche(par mot clé) avancé sur un texte ...

Merci d'avance
A voir également:

10 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
15 nov. 2005 à 16:53
je pense que la fonction ereg()
http://www.nexen.net/docs/php/annotee/function.ereg.php

ainsi que des bonnes expression réguilères devraient faire l'affaire...

Voilà ! :P

Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
2
Merci pour ton aide,

Effectivement les exp reg est une bonne idée je vais voir ce que je peux faire avec ...

Mais je pense pas qu'on peut compter les mots avec les exps regs??

par exemple dans mes docs j'aimerais faire les recherches suivantes

1) chercher les docs qui contient un mots(comme "etudiant", "prof")
2)chercher les docs qui contienent les mots "prof" et "faculté" séparer par au plus 3 mots (donc il faut compter)
4) ...

J'espére que j'étais assez claire.

Toute idée toutes reflexion sera le bienvenu.
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
16 nov. 2005 à 10:17
2)chercher les docs qui contienent les mots "prof" et "faculté" séparer par au plus 3 mots (donc il faut compter)
4) ...

<reflexion>t'as loupé le 3) hi hi hi</reflexion>

bin moi j'ai une idée pour ce qui est de ton séparer par au plus 3 mots mais c'est p'tet pas la meilleure...

--> Tu fais ton ereg() , si il trouve quelque chose, tu refais une expression réguilière qui cherche par exemple ton mot prof avec une fois un espace, une fois 2 esapce une fois 3 espaces
je m'explique : (Expression régulière en PERL)
1 ere fois :" prof [^ ]+ faculte"      <--prof espace  suivi de tout sauf un espace jusqu'a qu'on ai un espace puis le mot faculté donc 1 mot entre les 2

2ème fois :" prof [^ ]+ [^ ]+ faculte"

2ème fois :" prof [^ ]+ [^ ]+ [^ ]+ faculte"


Bref imbriqué dans des if ... tu vois ce que je veux dire ?!

bon courage, tiens moi au courant ..

Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
16 nov. 2005 à 10:36
2ème fois :" prof [^ ]+ [^ ]+ faculte"

2ème fois :" prof [^ ]+ [^ ]+ [^ ]+ faculte"


3ème on s'était compris ^^

Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
16 nov. 2005 à 10:44
Et apres il se permet de faire une remarque sur l'absence de 3eme cas. ;-)

Sinon, il serait peu être possible de faire comme ca :
" (prof|faculte) [^ ]+ [^ ]+ (prof|faculte)"

Ainsi on ne cherche pas forcément avec prof en premier et faculté en dernier.
Par contre on cherchera :
faculté - deux mots - prof
prof - deux mots - faculté
faculté - deux mots - faculté
prof - deux mots - prof
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci pour tes réponses,

Ce que tu me prepose ca va dans le sens de ce que je cherche, mais je pense que je n'ai pas été assez claire ...

En fait ce que je voudrait faire c'est de proposer un formulaire à l'utilisateur dans ce formulaire on peut taper une expression et je vais chercher dans ma BDD les docs qui contiennent cette expression ( comme à la google sauf que l'exp que l'usager va écrire peut être très compliquer)
0
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
16 nov. 2005 à 12:28
Tu recherche des documents dans une base de données ? Il sont enregistré comment dans la base dedonnées ? Le texte est entièrement dans la base de données ?
Si c'est le cas alors tu doit faire un truc du genre :
$mots=explode('',$expression);

$requete='SELECT * FROM mabase WHERE ';
foreach($mots as $value){
$requete.=' texte LIKE "%'.$value.'%" AND';
}
$requete.=' (1=1)';

Avec $expression correspondant à l'expression entrer par l'uilisateur.
La requete te permetra de retourner tout les texte qui ont tous les mots rechercher. Si tu remplace le AND par OR, tu aura tout les texte qui ont au moins un mots rechercher.

Inconvéniant : c'est assez lourd pour la base de données et la requete risque de prendre du temps.
0
Merci pour vos réponses, Effectivement les docs sont entierement sur la base et votre requête réponds bien à des cas, mais il y'a d'autres cas ou cette requête est limitée exemple : chercher les docs qui contienent les mots "prof" et "faculté" séparer par au plus 3 mots (donc il faut compter???) ...

Sinon bien vu le fait de citer le pb du temps, car les traitements que je vais faire demandent de la rapidité ...

La discution reste ouverte si vous avez d'autres idées merci de les faire partager
0
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
17 nov. 2005 à 15:20
La méthode à la google reste encore de faire un champ mot clé pour chaque document, dans lequels il y a tout les mots important du document (on enleve : 'la', 'les', 'et', ..) et on fait la recherche seulement sur les mots clé.
Le temps de recherche est plus rapide mais il y toujours le probleme du comptage des mots.

A la limite il faudrait faire la recherche en deux temps :
1- recherhcer les documents possédant les mot rechercher
2- faire le comptage dans les documents trouvé lors de la phase 1
0
Jj'aimerais juste savoir que veut dire la dernière partie de la requête ( $requete.=' (1=1)'; )??

merci encore,
0
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
17 nov. 2005 à 16:31
Quand je fait le foreach, je met AND à la fin de chaque ligne. Pour pas avoir une requete du genre :
SELECT *
FROM mabase
WHERE texte like 'prof AND
texte LIKE 'faculte' AND

je rajoute le '(1=1)' qui correspond a true, ainsi la requete reste corecte.

Pour le cas ou l'on met des OR, il faut mettre (1=0) => false
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
17 nov. 2005 à 16:34
Tiens, c'est pas bête ça...

Et puis à priori tu peux même remplacer (1=1) par 1 et remplacer (1=0) par 0....
0
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
17 nov. 2005 à 16:36
Oui c'est vrai que l'on peut faire plus simple, mais je trouve plus parlant le (1=1). Car on sait ainsi que la condition est vrai, alors que 1 est beaucoup moin parlant.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008
18 nov. 2005 à 23:33
C'est vrai.
0