Bonjour, vous êtes venu ici pour chercher la signification du mot
Utilisateur:PamputtBot/paro.cpp. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot
Utilisateur:PamputtBot/paro.cpp, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire
Utilisateur:PamputtBot/paro.cpp au singulier et au pluriel. Tout ce que vous devez savoir sur le mot
Utilisateur:PamputtBot/paro.cpp est ici. La définition du mot
Utilisateur:PamputtBot/paro.cpp vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition de
Utilisateur:PamputtBot/paro.cpp, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.
/*
g++ paro.cpp -std=c++17 -o paro
./paro /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 = "liste_mots_avec_section_paronyme_sans_section_prononciation.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;
while(getline(infile,line)) {
if(line.find("<page>")!=string::npos) {
titre = "";
codesLangue.clear();
ns = "";
bool is_redirect = false;
bool balise_text = false;
map <string, bool> section_prononciation_presente;
map <string, bool> paro_sans_pron;
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("</text")!=string::npos)
balise_text = false;
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));
section_prononciation_presente = false;
}
if(line.find("{{S|prononciation}}") != string::npos &&
!codesLangue.empty()) {
section_prononciation_presente = true;
}
if(line.find("{{S|paronymes") != string::npos &&
line.find("====") != string::npos &&
!section_prononciation_presente)
paro_sans_pron = true;
if(line.find("</page>")!=string::npos)
break;
}
if(ns=="0" &&
!is_redirect) {
for (const auto& codeLangue : codesLangue)
if(paro_sans_pron.count(codeLangue) == 1 &&
paro_sans_pron)
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;
return 1;
}