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

Langage Java Discussion :

Fonction de recherche dans plusieurs types de fichiers


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut Fonction de recherche dans plusieurs types de fichiers
    Bonjour a tous et a toutes,

    Contexte :

    Je suis actuellement dans l'élaboration d'un programme de recherche.

    La fonction principale de ce logiciel est l’administration d’une interface graphique utilisée pour la recherche et le classement des rapports. La recherche s’effectue donc avec trois mots clés à rentrer par l’utilisateur avant de lancer la recherche.

    Ce que je cherche :

    Une fonction recherche qui se sert donc des mots clés insérés pour les chercher dans une multitude de rapport (plus de 2000 généralement en .xls, .doc, .pdf) via un "open file" qui ferai une lecture de chaque fichier en boucle et affiche chaque fois ou un des mot clé est trouvé

    1. Lancer la boucle genre : while (array.strlengh) loop
    2. Vérifier les donnée : if motclé1==.... && motclé2 ==... && motclé3 ==
    3. Si elles y sont on incrémente et on stock l'affichage
    4. a la fin on affiche toutes les rapports qui contiennent les mots clés dans une liste cliquable (lien vers le rapport)

    Voici mon code d'affichage actuel :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    package ui;
     
    import java.awt.Font;
     
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
     
    public class Recherche_LAB {
    	private JTextField textField;
    	private JTextField textField_1;
    	private JTextField textField_2;
     
    	/**
             * @wbp.parser.entryPoint
             */
    	public void fenetre(){
    		JFrame fenetre=new JFrame();
    		fenetre.setVisible(true);
    		fenetre.setSize(330, 420);
    		fenetre.setLocationRelativeTo(null);
    		fenetre.setTitle("Recherche des rapports du LAB");
    		fenetre.getContentPane().setLayout(null);
     
    		JLabel lblMoteurDeRecherche = new JLabel("Moteur de recherche des Rapports du LAB");
    		lblMoteurDeRecherche.setFont(new Font("Tahoma", Font.BOLD, 12));
    		lblMoteurDeRecherche.setHorizontalAlignment(SwingConstants.CENTER);
    		lblMoteurDeRecherche.setBounds(0, 0, 314, 58);
    		fenetre.getContentPane().add(lblMoteurDeRecherche);
     
    		JPanel panel = new JPanel();
    		panel.setBounds(0, 164, 314, 38);
    		fenetre.getContentPane().add(panel);
     
    		JLabel lblMotCl = new JLabel("Mot cl\u00E9 1 :");
    		lblMotCl.setHorizontalAlignment(SwingConstants.CENTER);
    		panel.add(lblMotCl);
     
    		textField = new JTextField();
    		textField.setHorizontalAlignment(SwingConstants.CENTER);
    		panel.add(textField);
    		textField.setColumns(10);
     
    		JPanel panel_1 = new JPanel();
    		panel_1.setBounds(0, 201, 314, 38);
    		fenetre.getContentPane().add(panel_1);
     
    		JLabel lblMotCl_1 = new JLabel("Mot cl\u00E9 2 :");
    		panel_1.add(lblMotCl_1);
     
    		textField_1 = new JTextField();
    		textField_1.setHorizontalAlignment(SwingConstants.CENTER);
    		textField_1.setColumns(10);
    		panel_1.add(textField_1);
     
    		JPanel panel_2 = new JPanel();
    		panel_2.setBounds(0, 238, 314, 38);
    		fenetre.getContentPane().add(panel_2);
     
    		JLabel lblMotCl_2 = new JLabel("Mot cl\u00E9 3 :");
    		panel_2.add(lblMotCl_2);
     
    		textField_2 = new JTextField();
    		textField_2.setHorizontalAlignment(SwingConstants.CENTER);
    		textField_2.setColumns(10);
    		panel_2.add(textField_2);
     
    		JButton btnValider = new JButton("Valider");
    		btnValider.setBounds(140, 305, 89, 23);
    		fenetre.getContentPane().add(btnValider);
     
    		JLabel lblNewLabel = new JLabel("");
    		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
    		lblNewLabel.setIcon(new ImageIcon(Recherche_LAB.class.getResource("/images/logo.jpg")));
    		lblNewLabel.setBounds(0, 54, 314, 74);
    		fenetre.getContentPane().add(lblNewLabel);
    	}
     
    }

    Et voici ce que j'ai trouvé concernant ma recherche :

    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
     
    package nf;
     
    import java.io.File;
    import java.util.ArrayList;
     
     
    public class RechercherFichier {
     
    	private ArrayList<String> al;
     
    	public void valider (String args[]) {
    		this.al = new ArrayList<String>();
     
    		chercher_fichier(new File("C:\\"),"fichier.extension");
     
    		int n = al.size();
    		for(int i=0;i<n;i++) {
    			System.out.println(al.get(i));
    		}
    	}
     
    	private void chercher_fichier(File f,String s) {
    		if(f.getName().equals(s)) al.add(f.getPath());
     
    		File[] liste_fils = f.listFiles();
     
    		if(liste_fils!=null)
    		{
    			for(int i=0;i<liste_fils.length;i++)
    			{
    				chercher_fichier(liste_fils[i],s);
    			}
    		}
    	}
     
    }
    Voila merci de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Sujet intéressant, mais c'est quoi la question au juste ?

    Sinon, je te conseille de regarder Lucene ou Elastic Search.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Question : comment je peux faire une fonction recherche qui se sert donc des mots clés insérés pour les chercher dans une multitude de rapport (plus de 2000 généralement en .xls, .doc, .pdf) via un "open file" qui ferai une lecture de chaque fichier en boucle et affiche chaque fois ou un des mot clé est trouvé

    1. Lancer la boucle genre : while (array.strlengh) loop
    2. Vérifier les donnée : if motclé1==.... && motclé2 ==... && motclé3 ==
    3. Si elles y sont on incrémente et on stock l'affichage
    4. a la fin on affiche toutes les rapports qui contiennent les mots clés dans une liste cliquable (lien vers le rapport)

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Au niveau de la boucle, ça ne va pas être une boucle sur un tableau forcément : ça dépend où et comment sont stockés les fichiers, et s'ils sont indexés ou pas (en mémoire ou pas). Ensuite, ton premier message parle de chercher "dans les documents", donc ta condition ça ne pas être une égalité, mais une recherche à l'intérieur de texte, donc une lecture ligne à ligne pour du texte, et une conversion de format ensuite, puis un contains(), ou un indexOf() (ou une même une méthode par égalité, "par l’arrière" plutôt parce que plus efficace, mais elle te sera plus complexe à développer, et je ne connais pas d'api toute faite), ou une méthode de recherche dédiée à chaque format. En tout cas pas de notion d'"open file" qui est une notion d'explorateur de fichiers. Pour le stockage et l'affichage, ça fait un peu partie des bases.

    Mais comme je le disais précédemment, à moins qu'il s'agisse d'un exercice type, il vaut mieux utiliser un moteur d'indexation/rechercher à la lucene ou elastic search, ce sera plus efficace pour faire de la recherche. Tu vas peut-être perdre un peu de temps sur l'indexation, mais tu vas en gagner sur la recherche, et tu pourras faire de la recherche plus puissante. En plus, ces moteurs étant très répandus, tu trouveras plus facilement du code déjà fait pour faire l'indexation des fichiers non texte.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    D'accord merci j'ai regardé du coté de Lucene mais en fait si je comprends bien le principe j'index des fichiers (ceux dans lesquels je souhaite effectuer ma recherche) mais je vois pas trop comment m'y prendre ensuite pour lancer ma recherche dans un document (.xls, .doc, .pdf). Du style si on trouve un mot clé parmi les trois on incrémente chaque fichier + chemin et on affiche a la fin :/

Discussions similaires

  1. Format url elasticsearch, recherche dans plusieurs types
    Par encoremoi21258 dans le forum C#
    Réponses: 0
    Dernier message: 05/04/2015, 15h15
  2. Recherche dans plusieurs fichiers pas tres rapide
    Par andromeda dans le forum C#
    Réponses: 15
    Dernier message: 13/03/2009, 09h57
  3. Fonction de recherche dans un fichier
    Par Blo0d4x3 dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2008, 21h19
  4. Réponses: 7
    Dernier message: 18/11/2007, 12h38
  5. [Tableaux] Fonction de recherche dans un fichier texte
    Par danathane dans le forum Langage
    Réponses: 6
    Dernier message: 09/07/2007, 16h45

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