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

Algorithmes et structures de données Discussion :

[Recherche texte sur gros volume de données]


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2004
    Messages : 327
    Points : 487
    Points
    487
    Par défaut [Recherche texte sur gros volume de données]
    Bonjour,

    Je cherche un algo ou une méthode qui permettent de rechercher un texte dans un grand nombre de fichiers (format *.txt et *.xml) rapidement.

    Je peux avoir entre 10 et 20 Go de fichiers dont 90% font entre 5 et 10 ko. De plus ces fichiers sont dans des sous repertoires. J'ai donc un arbre d'une taille gigantesque mais il n'est pas spécialement ordonné ! Seule la date - incluse dans le nom des - répertoires pourrait servir. Pour donner une idée, lorsque j'essaye de parcourir un des répertoires contenant les fichiers avec l'explorateur windows cela peut mettre plusieurs minutes (environ 10 000 petits fichiers dans un répertoire). pourtant j'ai un PC puissant.

    Je pensais à une solution qui permettrait de construire un arbre "malin" et l'explorer ensuite mais cela est il jouable avec plusieurs Giga de données ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    sous unixoide tu as la commande "grep" qui te permet ça...

    et tu peux faire un script qui explore les répertoires et appelles grep...

    Mais je ne sais sous quel système tu es.

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Compte tenu des volumes, je crééerai en mémoire l'arbre des répertoires, puis examinerai chaque répertoire l'un après l'autre.

    Ensuite, Algo de recherche dans chaque fichier:
    - Charger le fichier texte entiérement dans un string,
    - rechercher la première occurence de sous-chaine de recherche dans ce string (fonction C : strtok, fonction Pascal : Pos, ...).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2004
    Messages : 327
    Points : 487
    Points
    487
    Par défaut
    Merci pour vos réponses.

    Hélas je ne suis pas sous Unix...en plus il faut jongler avec des dossiers compressés, misere. C'est encore plus lent.

  5. #5
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    héhé si c'était si facile on aurait pas besoin de google pour fouiller le web.

    tu devrais regarder du coté de lucene

    mais bon là on ne parle plus d'algorithmie...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Graffito
    (fonction C : strtok, fonction Pascal : Pos, ...).
    surtout pas strtok en C pour ce genre de problème..... Cette fonction isole les mots un par un.... Et de plus elle alloue de la mémoire dynamiquement à chaque appel.... Bonjour la perte de temps....

    Non si la solution est de faire un programme et que le langage choisi est C, alors la solution sera strstr (qui vérifie si une sous-chaîne est présente dans une chaine..)

    Quant à construire l'arbre d'un seul coup et à le mettre en mémoire, c'est jouable, mais tu viens de te mettre d'un coup une contrainte de mémoire qui peut s'avérer non négligeable...

    Perso moi je ferais un prog. de test simple qui explorerait l'arborescence, et ferais (en C) le strstr ligne à ligne, puisque tu n"es pas sur unixoide. Et je mesurerais déjà combien de temps ça prend, admettons sur 100 megs.
    (et si sur unixoide je ferais avec grep).

    Et là, ben si ça passe c'est bon, si ça casse, ben faut chercher autre chose

    c'est mon avis et je le partage

    [edit]
    je rajouterais une idée : je suppose que ce processus va se passer assez souvent, mais que l'ensemble des fichiers ne va pas changer tout le temps...
    Ce que je ferais c'est passer une fois dans l'ensemble, stocker quelque part le résultat, et avoir un processus parallèle qui surveille la création de nouveaux fichiers, et dans ce cas met à jour les résultats..
    Sans doute encore beaucoup plus rapide...
    [/edit]

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    idem mamelouk et souviron.

    Pour ce genre de probleme, il vaut mieux utiliser un indexeur de fichiers.
    De "Lucene" a "Google Desktop SDK", y a du choix...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Si un outil comme grep est suffisant il existe des portages pour windows comme gnuwin32.

    Mais le plus simple serait surement d'utiliser des langages de script évolués comme perl ou python.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sovitec
    Mais le plus simple serait surement d'utiliser des langages de script évolués comme perl ou python.
    Sans doute pas à cause du temps de réponse...

    Ne pas oublier que les scripts , lorsqu'ils appellent des programmes, font des "fork", et Java par construction redonne la main au système pour chaque manipulation d'objet différent. Dans un contexte où le volume est très important et le nombre d'objets également, chaque appel à un processus différent (fork) ou au système en asynchrone (Java) perd du temps.

    Si le temps est le point critique (et au volume considéré c'est l'essentiel) un binaire ira toujours beaucoup plus vite qu'un script ou un langage interprété.

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/07/2014, 21h05
  2. Erreur sur requête avec gros volumes de données
    Par justinedr71 dans le forum Développement de jobs
    Réponses: 46
    Dernier message: 29/07/2011, 15h42
  3. Réponses: 1
    Dernier message: 14/05/2010, 14h54
  4. Structure de données pour gros volume de données
    Par white_angel_22 dans le forum Langage
    Réponses: 9
    Dernier message: 01/02/2007, 11h58
  5. Gérer le gros volume de données
    Par berceker united dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 21/07/2006, 19h29

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