Problème dans l'affichage dans un fichier [Résolu]

Signaler
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
bonjour,
j'ai écrit la fonction ci-dessous qui calcule tfidf
mon programme est bien exécutable et donne de bons résultats si j'affiche avec cout, mais je veux afficher dans un fichier de sortie, et dans ce cas j'ai eu de mauvaises résultats (il m'affiche les tfidf du dernier fichier seulement aolrs que j'ai 3 fichiers dans le dossier "in")
  void calcultfidf( const std::string& filename,const std::string folder)
{  std::multiset<std::string>::const_iterator iter;
   std::ofstream ofs ("tfidf.txt");
   std::multiset<std::string> liste;
   DIR* rep = opendir(folder.c_str());
   std::map<std::string, int> map;
  fillMap(map, filename);
  int nbtotal=0;
  int nbfic=0;
  int som = 0;
  float idf;
  float tf;
  typedef std::map<std::string, int>::const_iterator iter3;
  for (iter3 it = map.begin(); it != map.end(); ++it)
som += it->second;

  std::cout << "Les tfidf du document " << filename <<std::endl<<std::endl;
  for (iter3 it = map.begin(); it != map.end(); ++it)
{if (som !=0)
   {
 tf= (float)it->second / som;
 std::cout << "* tf du mot " << it->first << " est " << tf << std::endl;
   }

   if (rep)
{
  struct dirent* lecture;

  while ((lecture = readdir(rep)))
{
  nbtotal++;
  if (!isValid(lecture->d_name))
  continue;
  std::string filename = lecture->d_name;
  fillSet (liste, folder + "/" + filename);
}


  for (iter=liste.begin(); iter!=liste.end(); iter++)
{
  if (it->first == *iter)
 nbfic++;
}
}
closedir(rep);

if (nbfic == 0)
   idf = 0;

else
   idf = log(((float) nbtotal-2) / nbfic);

   std::cout<< "* tfidf du mot " << it->first << " est " << tf * idf<<std::endl<<std::endl<<std::endl;
   nbfic=0;

}

}


et le main est le suivant:
  	int main()
{  static const std::string folder = "in";

   DIR* rep1 = opendir(folder.c_str());
  if (rep1)
  {  struct dirent* lecture1;

  while ((lecture1 = readdir(rep1)))
{
  if (!isValid(lecture1->d_name))
continue;

calcultfidf (folder + "/" + lecture1->d_name, folder);
 }
closedir(rep1);

  }
 system("pause");
return (0);
}

j'espère bien avoir votre aide car ça me bloque et c'est vraiment obligatoire que j'aurai le résultat dans un fichier.

1 réponse

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

bon enfin je suis arrivée à résoudre mon problème;
dans la fonction tf.idf j'ai créé 2 map, la première pour tf et la deuxième pour tf.idf,
et j'ai laissé l'affichage dans le main, donc j'ai juste consulté ces 2 map pour voir les tf et les tf.idf de chaque mot.