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

avec Java Discussion :

Algo recherche String


Sujet :

avec Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Points : 179
    Points
    179
    Par défaut Algo recherche String
    Bonjour,

    Nous avons un projet en internet chez nous fait sous access de recherche de caractères.

    En fait nous avons un fichier .txt en entrée, et une base de données de Mot Clés. Nous recherchons si les mots clés présents dans notre base se trouve dans notre fichier texte. (Nous effacçons les caractères "espace" de notre fichier texte pour n'avoir qu'un String).

    Notre processus devient de plus en plus long car notre base de mot clés (Sous Access aussi) devient de plus en plus grande.

    J'ai pensé que peut-être Java pourrait être plus rapide que notre algo en VB. Mais je dois pouvoir montrer cela sans passer 3 jours en dévelopement.

    Quelque'un peut-il me dire si il existe des algos de recherches, des fonctions Java de recherche entre Strin et Tableau ou HashMap qui sont relativement Rapide et Fiable.

    D'avance merci pour toutes vos informations.


  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Je resume tu as:
    - une base des mots cles (sous Access)

    - un fichier txt que tu enleves les espaces --> une seule chaine de caracteres

    C'est quoi la comparaison alors? Sur quels criteres? Et quelle action?

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Avant de te tourner vers un langage particulier, tu dois absolument trouver comment diminuer la complexité de ton algo.
    Tu peux avoir à disposition le RoadRunner d'IBM, si ton algo est pourri, tu auras des perfs catastrophiques.
    Donc première action primordiale : crayon + papier et tu écris l'algo. Puis si possible tu estimes le nombre de combinaisons de recherche pour le cas moyen, le meilleur cas et le pire cas si possible. Puis tu cherches comment améliorer l'algo et si possible diminuer sa complexité.
    L'implémentation viendra bien plus tard.
    bon courage !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Points : 179
    Points
    179
    Par défaut
    Le but est de trouver dans la chaine de caractères si mon mon clé de ma base s'y trouve.

    Exemple :

    Ma base contient : toto, lulu, fifi
    Mon txt au départ : "ici toto et lu lu".

    Si on ne supprimer pas les blancs, le résultat de mon algo me donnerait comme réponse "TOTO".

    En supprimant les blancs, mon algo me donnera "TOTO" et "LULU" comme résultats...

    Dans nos résultats, nous avons entre 6000 et 25000 résultats/jour. La base de mot clé que nous avons est composée de 1.200.000 de mots

    Merci

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La recherche de sous chaines dans une chaine existant, sur base du base de donnée de critère, c'est une problème qui a déjà été abordé de nombreuses fois dans la littérature algorithmique, et il existe pas mal d'algos optimisés spécifique. Pour référence, ce problème est identique à celui de la recherche de gènes dans un ADN, (rechercher une séquence de 10.000 caractère dans une chaine de plusieurs millions) et c'est donc une problème qui a déjà largement été optimisé. C'est pas un langage qu'il te faut, ce sont quelques recherches dans la littérature scientifique.


    PS: 1.200.000 entrées dans une DB access, alors que tu compare toutes les entrées au contenu du texte: y a-t-il un intérêt à utiliser une base de donnée pour les mots clés?? Est-ce que son aspect relationnel est utilisé? Ensuite, mettre en production une base de donnée sur access, c'est une peu n'importe nawak. Utilise une base de donnée robuste, soit commerciale soit gratuite, mais un truc conçu pour de telles tailles (postgresql, mysql, oracle, sql server, ....)

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Alors tu as effectivement tout intérêt à soigner l'algorithme.
    Il y a énormément de possibilités, mais la toute première idée qui me vient est le rangement propre des mots clés sous forme d'arbre N-aire. Chaque cellule représente une lettre.
    Tu as une liste de premières lettres sans répétition de tous tes mots clés. Puis chaque cellule-lettre contient une liste des lettres suivantes possibles. Et chaque cellule contient un booléen pour savoir si c'est une lettre de fin de mot ou pas.
    Par exemple, pour les mot "tot", "tat", "ou" et "toto", l'arbre sera :
    une liste contenant 't' et 'o'.
    't' contient la liste 'o', 'a'
    'o' contient 'u' avec le booléen de fin de mot à vrai
    ... etc...

    A chaque lettre de la phrase, tu parcours l'arbre pour savoir si le mot existe. S'il n'existe pas, alors tu passe à la lettre suivante.
    L'avantage est que tu ne vas pas parcourir tous tes mots clés pour chaque recherche. Pour chaque lettre de la phrase, si tu utilises 26 lettres et que les mots ont une longueur N et que la phrase a une longueur P, le nombre de tests sera :
    nb_tests = P * N * 26
    Ce calcul est le pire cas. Si tu ajoutes 1 millions de mots clés, le temps de calcul dans le pire cas ne sera pas changé !!!

    EDIT : trop lent
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 244
    Points : 179
    Points
    179
    Par défaut
    Alors pourquoi Access?

    Je viens d'arriver dans cette boite et c'est ce qui est utilisé... Je ne peux donc rien révolutionner sans "Preuves" de meilleurs résultats. Je pense comme vous sur cet aspect.

    Et pourquoi utiliser une base de données? Nous utilisons bien entendu le relationnel et diverses applications se connectent à cette base.

    Je vais regarder un peu du côté des algos.

    Je vous remercie de vos commentaires.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    la question était plutot, pourquoi une DB pour cette application précise Enfin c'est toi qui vois

Discussions similaires

  1. recherche string dans fichier html en shell
    Par lacassb01 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 31/01/2008, 20h26
  2. Modification d'un algo [recherche de chaine]
    Par bluecurve dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2007, 03h42
  3. [Oracle 8] Critère de recherche string -> date
    Par DevDam dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/09/2006, 17h34
  4. Algo recherche de Pattern
    Par jemore dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2006, 17h23
  5. Algos recherche Opérationnelle
    Par cilia dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 10/05/2006, 11h14

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