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

C# Discussion :

Problème en c#


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Problème en c#
    Je fais un projet qui dois permettre de faire des recherches sur un fichier texte j'utilise lucene mais sa ne fonctionne pas. voila mon code si qqun a une idé ou est ma faute merci d'avanceee !!!!

    Code d'indexation:

    Code C# : 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
    //Création d'un nouvel index.
                    IndexWriter writer = new IndexWriter(@"C:\Users\schaffora\Desktop\Test2\", new SimpleAnalyzer(), true);
                //Création d'un nouveau document.
                    Document doc = new Document();
                //Céation de la variable qui va contenir le texte.
                    string rawText;
                //Choix du type d'encodage
                    Encoding objEncoding = Encoding.Default;
                // Lecture du fichier jusqu'à sa fin et récupération du texte dans rawText
                    using (StreamReader sr = new StreamReader(path, objEncoding))
                    {
                        rawText = (sr.ReadToEnd());
                    }
                    doc.Add(Field.Keyword("text", rawText));
                    doc.Add(Field.Keyword("path", path));
                // ajout du document
                    writer.AddDocument(doc);
                    writer.Optimize();
                    writer.Close();
                // Fermeture de l'index pour permettre une meilleure performance

    Code pour la recherche :


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Query query = new TermQuery(new Term("postBody", tbxMot.Text));
                //Choix de l'index (index que l'on a créé juste en dessus)
                IndexSearcher searcher = new IndexSearcher(@"C:\Users\schaffora\Desktop\Test2\");
                Hits hits = searcher.Search(query);
                DataTable dt = new DataTable();
                dt.Columns.Add("path", typeof(string));
                dt.Columns.Add("sample", typeof(string));
     
                for (int i = 0; i < hits.Length(); i++)
                {
                    Document doc1 = hits.Doc(i);
                    DataRow row = dt.NewRow();
                    row["path"] = doc1.Get("path");
                    dt.Rows.Add(row);
                }

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Bonjour,

    Pourquoi ajoutes tu les colonnes dans recherche, elles ne devraient pas plutôt être créer dans ta partie index??

    Et autre chose, tes parenthèses ne sont d'aucune utilité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rawText = (sr.ReadToEnd());

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Hello et merci de la réponse deja

    Enfaite je fait les deux colonnes ds la database pour séparer le texte et le chemin du document mais je suis pas sur ou je dois le faire je dois avouer :$

    Vous pensez que c'est mieu de le faire ou ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Je pense surtout qu'il serait préférable que tu nous explique précisément ce que tu veux faire.
    Et qu'est ce qui ne fonctionne pas

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Alors je vous explique^^

    Je veux faire un programmes qui créer un index se basant d'un document texte (.txt). De cette index je dois pouvoir faire des recherches de mots. Si le mot que je tappe il éxiste dans cette index sa me renvoi combien de fois et si possible sa foit me renvoyer le nom du document (car je vais ajouter plusieurs document texte a la suite). Le but principale est de pouvoir faire une recherche de mot rapide et performante sur un fichier texte.

    Si vous connaissez d'autre manière comment y arriver faites moi signe

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Bonjour. J'ai utilisé Lucene il y a un bout de temps mais j'en garde malheureusement des souvenirs assez flous. Par exemple, je ne suis pas certain qu'il faille expressément définir les colonnes, il me semble qu'elles sont créées à la volée lors de la spécification des champs.

    Quoi qu'il en soit, s'il faut effectivement manuellement créer des colonnes, ce sera lors de la création de la DB et en aucun cas au moment de la recherche.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Hello Merci de la réponse il faut créer la database lors de l'indexation ? enfaite c'est surtout sa que j'ai pas vraiment compris.

  8. #8
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par 696969 Voir le message
    Hello Merci de la réponse il faut créer la database lors de l'indexation ? enfaite c'est surtout sa que j'ai pas vraiment compris.
    Tout dépend si tu compte te servir plusieurs fois de l'indexation, le but des tables est de stocker des éléments.
    Si tu crées un colonne à ta recherche celle-ci sera vide donc la recherche sera négative, donc le mieux serait de créer ta datatable avant ta partie indexation ainsi que ces colonnes puis d'ajouter tes éléments (dans l'indexation) dans les colonnes correspondante.
    Ainsi tu pourra accéder à tes éléments durant la recherche

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup Je créer la database ensuite je fais l'index et je dois rechercher dans l'index ensuite c bien sa ? ^^

  10. #10
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Je viens de relire ton code et je l'avais lu trop rapidement. Je croyais que tu ajoutais des colonnes à la DB Lucene, or je vois qu'en fait tu crées une DataTable à la volée pour y stocker les résultats tirés de Lucene ? Ça doit marcher mais c'est tordu, pas besoin de stocker ça dans une DataTable, n'importe quelle classe ou structure fera l'affaire. Tu pourrais aussi bien te contenter de renvoyer le nom du fichier recherché.

    Maintenant après une lecture de A à Z...
    * Tu indexes tes colonnes comme mots-clés (keyword) ! Tu ne risques pas de trouver quoi que ce soit ainsi, c'est uniquement adapté aux recherches à base de contenu intégral (si tu recherche "jazz", seules les entrées ayant exactement la valeur "jazz" seront retournées, pas "jaz" ou "jazzy"). Pour le texte tu veux... un "Text". Pour l'url, si tu ne souhaites pas faire de recherche basée sur celle-ci mais simplement la récupérer tu dois utiliser "Store" il me semble.
    * Il me semblait que l'initialisation était beaucoup plus lourdingue que ça, je me trompe peut-être ou ça a pu changer. Dans tous les cas je pense qu'il faudra à terme ne pas rouvrir un IndexWriter à chaque ajout d'un document mais plutôt le garder durant la durée de vie de l'application.
    * Ta requête stipule que tu cherches tous les documents contenant le mot "postData", c'est bien ce que tu veux ?

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Enfaite on peut deja faire la recherche sans la database si j'ai bien compris mais jdoi avouer j'ai pas bien compris comment coder cela :$

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Voila j'ai modifier un peu mon code


    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
    private void indexe_Click(object sender, EventArgs e)
            {        
                AddDocument(@"C:\Users\schaffora\Desktop\Test1.txt");
            }
     
            public void AddDocument(string path)
            {
     
                //Création d'un nouvel index.
                    IndexWriter writer = new IndexWriter(@"C:\Users\schaffora\Desktop\Test2\", new SimpleAnalyzer(), true);
                //Création d'un nouveau document.
                    Document doc = new Document();
     
                //Création de la variable qui va contenir le texte.
                    string rawText;
                //Choix du type d'encodage
                    Encoding objEncoding = Encoding.Default;
                // Lecture du fichier jusqu'à sa fin et récupération du texte dans rawText
                    using (StreamReader sr = new StreamReader(path, objEncoding))
                    {
                        rawText = sr.ReadToEnd();
                    }
                    doc.Add(Field.Text("text", rawText));
                    doc.Add(Field.UnStored("path", path));
                    //doc.Add(new Field("Text",rawText,true,true,true));
                    //doc.Add(new Field("path",path,true,true,true));
                // ajout du document
                    writer.AddDocument(doc);
                    writer.Optimize();
                    writer.Close();
     
                //Choix de l'index (index que l'on a créé juste en dessus)
                    IndexSearcher searcher = new IndexSearcher(@"C:\Users\schaffora\Desktop\Test2\");
                    Query query = new TermQuery(new Term("postBody", tbxMot.Text));
                    Hits hits = searcher.Search(query);
                    int J = 0;
                    for (int i = 0; i < hits.Length(); i++)
                    {
                        Document doc1 = hits.Doc(i);
                        J = i;
                    }
                    lblRep.Text = J.ToString();
     
     
            }





    Je veux essayer d'afficher combien de fois je trouve le mot avec J mais a chaque fois que je teste je trouve 0 le query trouve tjrs 0 résultats meme que le mot saisis existe tel quel dans le fichier texte sa me semble parfaitement correcte pourtant. ^^

  13. #13
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Oui, en fait j'avais encore lu trop rapidement, te requête est fausse : tu recherches un mot dans la colonne postBody alors qu'il n'y a pas aucune colonne de ce nom.

    PS : utilise les balises [ quote ] ... [ /quote ] s'il te plaît.

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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