cs_mervat
Messages postés90Date d'inscriptionsamedi 5 juin 2010StatutMembreDernière intervention 6 mars 2015
-
16 déc. 2010 à 15:26
cs_mervat
Messages postés90Date d'inscriptionsamedi 5 juin 2010StatutMembreDerniè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;
}
}
cs_mervat
Messages postés90Date d'inscriptionsamedi 5 juin 2010StatutMembreDernière intervention 6 mars 2015 16 déc. 2010 à 16:36
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.