IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] moteur de recherche en php


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut [SQL] moteur de recherche en php
    Bonjour ,
    Je dois intégrer un moteur de recherche en php à un site intranet pour mon stage.
    Pour cela la structure de la base a été modifié et une table mot clé a été rajoutée pour extraire les mots clés de chaque document.
    Donc pour chaque table Document, je dois extraire du champs titre et du champs texte des mot cles que je mettrai dans la table mot cles.
    Le probleme c'est que je ne sais pas comment éliminer les mots inutiles comme "je le la un des ..." J'ai cherché sur google mais j'ai rien trouvé .
    Qu'en pensez-vous ?
    merci d'avance
    ++

  2. #2
    Membre expérimenté
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2007
    Messages : 199
    Par défaut
    Tu peux faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $pattern[0] = '/\b(je|le|la|un|des)\b/i';
    $replace[0] = '//i';
    $newstring = preg_replace( $pattern , $replace , $string );
    Pour plus d'informations :
    http://fr2.php.net/manual/fr/function.preg-replace.php

    http://fr2.php.net/manual/fr/referen....modifiers.php

  3. #3
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Sinon, tu utlise le 'wildcard' de SQL qui te permet de les ignorer automatique, ou si tu préfère de rechercher un ou des mot sans te soucier de la 'pollution' occasionnée par les autres. Je me fais bien comprendre?

    Non?, alors exemple:

    tu cherche "Férié" (humour, car je bosse aujourd'hui ), alors tu écris;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM tatable WHERE Mot_Cle LIKE '%Férié%'

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut
    en fait je pense que je vais carrément faire une table qui contiendra tous les mots inutiles et une autre qui contiendra tous les mot clés important de chaque document.
    riete je ne peux pas faire ça car je ne cherche pas un mot en particulier je veux prendre tous les mots et enlever ceux qui sont inutiles.

  5. #5
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Tu veux dire que tu veux les exclure de la recherche ou que les ignorer te suffit ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut
    Ce que je veux dire c'est qu'il y a une table Mot-clé qui va contenir tous les mots clés de tous les documents existants.
    Cette table contiendra une liste de mots et chaque mots aura une ou plusieurs correspondances vers un code de document.
    Et ma recherche je la ferais directement dans cette table Mot-clé.
    Dès qu'un mot cherché correspond à un mot de cette table Mot-clé je vais chercher le ou les code de documents correspondant et j'affiche le résultat.
    Mais dans cette table, je ne veux pas trouver des mots qui ne servent à rien tels que parce que, pourtant cependant ... et je ne sais pas comment filtrer ces mots.
    C'est pour cela que j'avais pensé à créer carrément une autre table contenant tous les mots à éviter. MAis je ne sais toujours pas comment la remplir

  7. #7
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Je crois que je commence à comprendre un peu mieux...

    Peut être que je me trompe mais "Tout les mots qui ne sont pas des mots clef sont peut être des mots inutiles" non ?

    Dans ce cas, s'est ta procédure de définition des mots clé qui se chargera de faire la distinction.

    Je crois que la questions principale comment détermine qu'un mot est un mot clé ? est ce l'utilisateur qui le définit ?

    Je suis désolé de ne pas t'aider plus, mais il faudrait que je comprenne bien ce que tu veux faire pour essayer de te proposer une idée.

    A+

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut
    Non c'est à moi de me de***der pour savoir si un mot est pertinent pour une recherche ou pas. Donc voila tout le problème car on peut pas faire un script qui classe les mots en fonction de leur pertinence.
    Donc je prends tous les mots de chaque documents et il faut que je les filtre en les comparant avec une liste de mots inutiles que je cherche depuis des jours sur internet mais que je ne trouve pas.
    Je vais donc sûrement devoir en faire une moi même et créer une interface qui permettra facilement d'aller rajouter quand on veut des mots inutiles dans cette liste.Car je ne vais pas tous les trouver du premier coup.

    PS : Je suis désolé si j'explique pas très bien j'ai toujours eu du mal dans ce domaine.

  9. #9
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    Citation Envoyé par foufoulol Voir le message
    Non c'est à moi de me de***der pour savoir si un mot est pertinent pour une recherche ou pas. Donc voila tout le problème car on peut pas faire un script qui classe les mots en fonction de leur pertinence.
    Donc je prends tous les mots de chaque documents et il faut que je les filtre en les comparant avec une liste de mots inutiles que je cherche depuis des jours sur internet mais que je ne trouve pas.
    Je vais donc sûrement devoir en faire une moi même et créer une interface qui permettra facilement d'aller rajouter quand on veut des mots inutiles dans cette liste.Car je ne vais pas tous les trouver du premier coup.
    Projet intéressant...
    Je me demande si tu ne devrais pas faire une sorte de programme qui "scan" un dictionnaire, duquel du extrait les "mots inutiles" en les faisant défiler. Mais quel boulot !!
    J'ai beau réfléchir, mais je ne vois pas de méthode fiable pour extraire ces mots. Je vais réfléchir et si je trouve une idée, je te la vends ...
    Non, non, sérieux s'est non trivial ton truc, je me demande s'il y a une solution.
    Citation Envoyé par foufoulol Voir le message
    PS : Je suis désolé si j'explique pas très bien j'ai toujours eu du mal dans ce domaine.
    On y est quand même arrivé !! Mais s'est peut être moi qui ai la comprenette un peu difficile

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Par défaut
    Ben en fait je pense qu'il n'y a pas de solution miracle, obligé de faire de l'à peu près...
    Quand même je ne pensais pas que c'était si galère à coder un moteur de recherche !!!
    merci quand même pour ton temps et ta patience

  11. #11
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Par défaut
    Sur un de mes projets, j'avais fait un script rapide PHP-CLI d'indexation :
    - je charge un texte
    - je supprime toute mise en forme (tout le balisage xhtml, les accents, les majuscules)
    - je supprime tous les mots de moins de 4 caracteres (un peu bourrin à ce niveau, cette condition etait justement pour éliminer les mots parasites mais tu peux l'oublier et appliquer la méthode plus bas)
    - je décompose la chaine obtenu en tableau (un mot par tableau)
    - j'utilise la fonction php array_count_values pour obtenir le nombre d'occurence pour obtenir un tableau contenant le nombre d'occurence dans le texte.

    A partir de la, les 5 premiers mots etaient considérés comme mot clef du texte.

    Pense à la sémantique des balises xhtml, ca peut etre pratique pour ça :
    - contenu des balises h1, h2, h3, strong, em (ces balises encadrent des mots clefs)

    Pour l'élimination des mots parasites, j'avais pensé à cette méthode mais je ne l'ai jamais appliqué :
    - Elle est simple mais couteuse en ressource (en meme temps, tu ne dois pas indexer toutes les 5 minutes) :

    Tu prends le contenu de ta base obtenu. Tu récupères les mots clefs 1 par 1. Tu regardes le nombre d'occurence.
    -Si tu as moins de 5% des articles qui possèdent ce mot, c'est un mot clef important.
    -Si tu as plus de 50% des articles qui contiennent ce mot, c'est un mot parasite.
    (J'ai donné les coefficients au hasard, à toi de les définir)

    Programmer ça, ce n'est pas tres difficile. C'est tres bourrin comme méthode mais si tu indexes tes documents une fois par jour, ce n'est pas un soucis (a condition de ne pas avoir 400 000 pages ^^).

    Rien ne t'oblige à faire ce script en PHP, le java ou meme le C sera plus rapide sur ce genre d'opération.

    Je te colle le code de la classe que j'avais ecrit pour l'extraction d'un texte, ça pourra peut etre t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
     
    class ExtractTextHTML
    {
        private $s_text_init;
        private $curr;
        private $a_tab_final;
     
        public function __construct($text) {
            $this -> s_text_init = $text;
        }
     
        public function cleanData(){
            $this -> curr = $this -> s_text_init;
            $this -> HTMLtoISO();
            $this -> strip_accents();
            $this -> strip_tags();
            $this -> strip_ponctuations();
            $this -> str_to_lower();
            $this -> limit_word(4);
            $this -> string_to_array();
     
        }
     
        public function getData($nb_entry){
            return array_slice ($this -> a_tab_final, -$nb_entry,$nb_entry); 
        }
     
        protected function HTMLtoISO(){
            $this -> curr = preg_replace('/\<.+?\>/',' ',$this -> curr);
            $this -> curr = html_entity_decode($this -> curr,ENT_QUOTES);
        }
     
        protected function strip_accents(){
            $this -> curr = strtr($this -> curr,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
    'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
        }
     
        protected function strip_tags(){
            $this -> curr = strip_tags($this -> curr);
        }
     
        protected function strip_ponctuations(){
            $this -> curr = preg_replace('/[\W]/',' ',$this -> curr);
            $this -> curr = preg_replace('/\s+/',' ',$this -> curr);
        }
     
        protected function str_to_lower(){
            $this -> curr = strtolower($this -> curr);
        }
     
        protected function limit_word($nb_car){
            $this -> curr = preg_replace('/\s([\w|\d]{0,'.$nb_car.'}\s)+/',' ',$this -> curr);
        }
     
        protected function string_to_array(){
            $this -> a_tab_final = explode(" ",$this -> curr);
            $this -> a_tab_final = array_count_values($this -> a_tab_final);
            asort($this -> a_tab_final,SORT_NUMERIC);
        }
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Moteur de recherche ultra simple ?
    Par Jiraiya42 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 12/10/2006, 18h03
  2. Réponses: 5
    Dernier message: 10/07/2006, 09h42
  3. [Tableaux] Moteur de recherche en PHP
    Par Msieurduss dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2006, 14h25
  4. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 20h27
  5. [Tableaux] comment faire un moteur de recherche en php
    Par lindouchine dans le forum Langage
    Réponses: 4
    Dernier message: 23/03/2006, 23h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo