Bonjour, vous êtes venu ici pour chercher la signification du mot
Utilisateur:PamputtBot/anagr.cpp. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot
Utilisateur:PamputtBot/anagr.cpp, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire
Utilisateur:PamputtBot/anagr.cpp au singulier et au pluriel. Tout ce que vous devez savoir sur le mot
Utilisateur:PamputtBot/anagr.cpp est ici. La définition du mot
Utilisateur:PamputtBot/anagr.cpp vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition de
Utilisateur:PamputtBot/anagr.cpp, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.
/*
g++ anagr.cpp -std=c++17 -o anagr
./anagr /chemin/vers/frwiktionary-latest-pages-articles.xml
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <string>
using namespace std;
string getCodeLangue(string line) {
size_t pos1 = line.find("{{langue|")+9;
size_t pos2 = line.find("}}", pos1);
return line.substr(pos1,pos2-pos1);
}
int main(int argc, char **argv) {
if(argc == 1 || argc>2) {
cout << argv << " /chemin/vers/frwiktionary-latest-pages-articles.xml" << endl;
return 0;
}
string nomFichier = argv;
//https://dumps.wikimedia.org/frwiktionary/latest/frwiktionary-latest-pages-articles.xml.bz2
ifstream infile(nomFichier.c_str(),ifstream::in);
if(!infile) {
cout << "Le fichier " << nomFichier << " n'existe pas" << endl;
return 0;
}
string nomFichierSortie = "/data/project/wiktionnaire-pamputt/anagramme/liste_mot_par_langue.txt";
ofstream out(nomFichierSortie.c_str(), ofstream::out);
if(!out) {
cout << "Probleme avec le fichier de sortie" << endl;
return 0;
}
string titre;
vector<string> codesLangue;
string ns;
string line;
size_t pos1, pos2;
unsigned int cmpt = 0;
map <string, unsigned int> cmpt_section_anagr;
while(getline(infile,line)) {
if(line.find("<page>")!=string::npos) {
titre = "";
codesLangue.clear();
ns = "";
bool is_redirect = false;
bool balise_text = false;
while(getline(infile,line)) {
if(line.find("<title>")!=string::npos) {
// on extrait le titre des balises <title>
pos1 = line.find("<title>");
pos2 = line.find("</title>");
titre = line.substr(pos1+7,pos2-pos1-7);
}
if(line.find("<ns>")!=string::npos) {
//on vérifie que l'espace de nom est bien « 0 »
pos1 = line.find("<ns>");
pos2 = line.find("</ns>");
ns = line.substr(pos1+4,pos2-pos1-4);
}
if(line.find("<text")!=string::npos)
balise_text = true;
if((line.find("#REDIRECT")!=string::npos ||
line.find("#redirect")!=string::npos ||
line.find("#Redirect")!=string::npos) &&
balise_text)
is_redirect = true;
if(line.find("{{langue|")!=string::npos &&
line.find("==")!=string::npos &&
balise_text)
codesLangue.push_back(getCodeLangue(line));
if(line.find("{{S|anagrammes}}") != string::npos &&
!codesLangue.empty())
cmpt_section_anagr++;
if(line.find("</page>")!=string::npos)
break;
}
if(ns=="0" &&
!is_redirect &&
titre.find("Titres non pris en charge") == string::npos) {
for (const auto& codeLangue : codesLangue)
out << titre << " ; " << codeLangue << endl;
cmpt++;
if(cmpt%10000 == 0)
cout << cmpt << "\t" << titre << endl;
}
}
// if(cmpt==10) break;
}
infile.close();
out.close();
cout << cmpt << " articles trouves" << endl;
for (auto const& : cmpt_section_anagr)
if(code == "fr")
cout << val << " sections anagrammes dans les entrées en " << code << endl;
return 1;
}