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

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- - Dernière réponse : cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- 16 déc. 2010 à 16:36
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.
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_mervat