Nous sommes le Dim 20 Juil, 2025 19:49
Supprimer les cookies

Routine d'indexation de texte

Pour une tâche précise, pour remplacer un logiciel propriétaire donné...

Jeu 26 Jan, 2006 18:25

Bonjour,

Je recherche un script PHP GPL et "solide" qui puisse m'indexer différents textes stockés dans un fichier (MySQL, PostGreSQL, etc...mais ça ce n'est pas grave, j'adapterais).

Le principe serait simple :

1.Une routine qui indexe les textes, en éliminant les mots communs ('et', 'il', 'que', etc...)
Elle repèrera les mots indexés et dans quel texte ils se trouvent

2.Une routine qui permet la recherche et d'accéder au(x) texte(s) recherché(s)

Jai eu beau chercher, je n'ai pas trouvé...

Merci
Invité

Sam 28 Jan, 2006 10:11

UP

Je pense finalement développer moi-même une routine simple qui convertirait des expressions booléennes "en Français" (type ET OU SAUF) en expression MySQL, par le biais d'un script PHP, puis un travail sur des index type FULLTEXT.

Là où je coince, c'est comment créer une liste personnalisée d'exclusion de mots en Français (celle par défaut est en Anglais).

Si quelqu'un a déjà tenté l'expérience ou pourrait m'aider, ce serait sympa.

Merci
Invité

Sam 28 Jan, 2006 11:41

hi hi, ca me fait plaisir qu'on demande ca, je m'etais creuse la tete pour le faire, et je suis content d'en faire profiter quelqu'un : l'idee c'est de faire un script qui index tous les mots de beaucoup de textes (moi j'avais copie colle des articles du monde et de wikipedia pour avoir du volume ), et ensuite de lister les mots qui apparaissent dans plus de 40 / 60 % des articles, classe par pourcentage decroissant. tu devrais te retrouver avec une liste de ce genre :

Code: Tout sélectionner
de 98%
à 97%
...


le but de les lister, c'est de pouvoir controler quand meme le resultat ( typiquement, a cause des articles du monde, j'avais le mot "sarkozy" qui apparaissait dans plus de 40 % des articles.. :-) )

l'avantage de cette technique, c'est que non seulement ca te sort les "petits mots courant", mais si tes textes tournent autour d'un meme sujet, tu peux aussi enlever les mots qui ne sont pas courant dans l'absolu, mais qui dans ton cas ne sont pas revelateur du contenu du texte, puisque ils apparaissent dans la plupart des articles.
Je sais être bete, à mes heures, sans toutefois m'élever jusqu'à ces glorieux sommets d'où la tuerie vous apparait comme une solution acceptable

Romain GARY
jobherzt

Messages : 581
Géo : Caen

Sam 28 Jan, 2006 12:01

jobherzt a écrit:hi hi, ca me fait plaisir qu'on demande ca, je m'etais creuse la tete pour le faire, et je suis content d'en faire profiter quelqu'un : l'idee c'est de faire un script qui index tous les mots de beaucoup de textes (moi j'avais copie colle des articles du monde et de wikipedia pour avoir du volume ), et ensuite de lister les mots qui apparaissent dans plus de 40 / 60 % des articles, classe par pourcentage decroissant. tu devrais te retrouver avec une liste de ce genre :

Code: Tout sélectionner
de 98%
à 97%
...


le but de les lister, c'est de pouvoir controler quand meme le resultat ( typiquement, a cause des articles du monde, j'avais le mot "sarkozy" qui apparaissait dans plus de 40 % des articles.. :-) )

l'avantage de cette technique, c'est que non seulement ca te sort les "petits mots courant", mais si tes textes tournent autour d'un meme sujet, tu peux aussi enlever les mots qui ne sont pas courant dans l'absolu, mais qui dans ton cas ne sont pas revelateur du contenu du texte, puisque ils apparaissent dans la plupart des articles.


Merci pour ton aide.

J'ai effectivement pensé à développer une routine d'indexation qui permettrait d'analyser le texte pour en extraire les mots clefs et les stocker dans une BDD avec un index renvoyant vers le texte en question.

Puis une routine de recherche qui analyserait les mots recherchés en renvoyant une pertinence.

Le "big" problème est que je veux indexer en temps réel lors de la création d'un rapport (pour enrichir une base de connaissances).

A mon avis, ça prend trop de temps comme méthode....est c'est pour cela que je me suis retourné vers la notion d'index MySQL FULLTEXT qui enregistre en temps réel, sans besoin de moulinage supplémentaire.

Le 2nd problème est que cela voudrait également dire que je devrais entièrement développer la moulinette de recherche avec analyse syntaxique des opérateurs booléens, et tutti quanti...

Tu en penses quoi ?
Invité

Sam 28 Jan, 2006 12:22

je pense qu'indexer un document immediatement apres l'avoir cree n'est pas tres long. avant toute chose, precisons que la methode que je t'ai donne peut ne servir qu'a generer la liste de mots, libre a toi de faire une recherche en FullText apres. mais dans ce cas, je ne vois pas bien a quoi va servir la liste de petits mots. en toute honnetet, je ne m'y connais pas assez pour savoir quelle est la meilleure methode, et peut etre que j'ai reecrit qqchose que mysql faisait mieux, mais l'avantage que je vois a creer un index :
- tu elimine effectivement tous les petits mots de la zone de recherche, tu ne fais pas que les ignorer
- chaque mot qui apparait plusieurs fois dans un texte n'apparait qu'une fois dans l'index
- tu peut integrer une notion de score pour trier les resultats
- les mots de l'index sont stockes en minuscule et sans accents -> evite qq pb
- a priori, les mots cles sont tries et la recherche se fait sur tout le champs. donc si les premieres lettres respectives ne correspondent pas, hop on passe au mot suivant, en fulletext, j'ai peur que dans ce cas, il esaie de comparer la premiere lettre du mot a chercher avec la deuxieme lettre du texte de la base... bref, d'instinc, je me dis qu'une recherce "=truc" ira plus vite qu'une recherche "like %truc%"

aprex, je t'accorde que la requete est plus bourrine c'est un peu la difficulte du truc, vu qu'au lieu de :

"select * from base where champs like %truc% and chmaps like %machin%"

tu auras

"select id from index as i1, index as i2 where i1.champs=truc and i2.champs=machin and i1.id=i2.id".

s'il faut ajouter des "or", j'avoue que ca devient dur a generer dynamiquement ( avec union et intersect ? ), j'ai pas encore etudie la question...
Je sais être bete, à mes heures, sans toutefois m'élever jusqu'à ces glorieux sommets d'où la tuerie vous apparait comme une solution acceptable

Romain GARY
jobherzt

Messages : 581
Géo : Caen

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit