// librairie de gestion des répertoires et fichiers const fs = require("fs"); const path = require("path"); // librairie de gestion des arguments de la ligne de commande var argv = require("optimist").argv; // librairie de traitement du pinyin const pinyinizer = require("pinyinizer"); const bopo = require("hanzi-to-zhuyin"); // librairie de gestion du hanzi const opencc = require("node-opencc"); // librairie de gestion des fichiers xml const builder = require("xmlbuilder"); // librairie de recherche dans un json var _ = require("underscore"); // librairie de gestion des fichiers csv var csv = require("comma-separated-values"); // sons const shtooka1 = require("./cmn-caen-tan.json.json"); const shtooka2 = require("./chi-balm.json.json"); const shtooka3 = require("./cmn-balm-congcong.json.json"); const shtooka4 = require("./cmn-balm-hsk1.json.json"); // données de stockage var fichierXml = "grammarwiki-table.xml"; var fichierJson = "grammarwiki-table.json"; var fichierCSV = "grammarwiki-table.csv"; // en entrée, on donne le nom du fichier à traiter sans le répertoire var repertoireInitial = "./"; var argument = argv._[0]; fichierDonnées = path.join(repertoireInitial, argument); // DEBUG // console.log(fichierDonnées); // sons var shtooka1données = shtooka1.shtooka; var shtooka2données = shtooka2.shtooka; var shtooka3données = shtooka3.shtooka; var shtooka4données = shtooka4.shtooka; // utilitaires var tab = "\t"; var endLine = "\n"; // Variables fichier des fichiers csv, json et xml fichierXml = path.join(repertoireInitial, argument + ".xml"); fichierJson = path.join(repertoireInitial, argument + ".json"); fichierCSV = path.join(repertoireInitial, argument + "-1.csv"); // on crée le fichier xml var feed = builder.create("grammarwikitable", { version: "1.0", encoding: "UTF-8", standalone: true }); // on crée le fichier csv var moncsv = fs.createWriteStream(fichierCSV); // on crée le fichier json var json = fs.createWriteStream(fichierJson); json.write('{"grammarwiki-vocab":['); var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8"); // DEBUG // console.log(fichierATraiter); var monjson = new csv(fichierATraiter, { header: [ "hanzi", "traditional", "pinyin", "translation", "classifier", "taiwanpinyin", "samepinyin", "examples", "x", "y", "z", "tag" ], cast: [ "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String" ] }).parse(); // la ligne CSV qu'on va écrire dans le fichier CSV var ligneCSV = ""; // L'élément xml qui constitue un enregistrement du fichier xml var ele = null; // a = liste json // b = le hanzi à trouver dans la liste ci-dessus(enregistrement.hanzi) function trouvé(a, b) { var t = _.find(a, function(record) { return record.hanzi == b; }); return t; } monjson.forEach(function(enregistrement) { // DEBUG // console.log(enregistrement.hanzi); ligneCSV = ""; ele = null; var enregistrementFinal = {}; try { // hanzi enregistrementFinal.hanzi = enregistrement.hanzi.trim(); var NomFichierSon = enregistrementFinal.hanzi.replace(/ /g, ""); // traditional enregistrementFinal.traditional = opencc.simplifiedToTraditional( enregistrementFinal.hanzi ); // pinyin enregistrementFinal.pinyin = enregistrement.pinyin; // translation enregistrementFinal.translation = enregistrement.translation; // classifier if (enregistrement.classifier == "") { enregistrementFinal.classifier = ""; } else { enregistrementFinal.classifier = enregistrement.classifier; } // samepinyin // if (enregistrement.samepinyin == "") { // enregistrementFinal.samepinyin = ""; // } else { // enregistrementFinal.samepinyin = enregistrement.samepinyin; // console.log(enregistrementFinal.samepinyin); // } // examples enregistrementFinal.examples = enregistrement.examples; //sequence if (enregistrement.tag == "A1") { enregistrementFinal.sequence = "A1"; } else if (enregistrement.tag == "A2") { enregistrementFinal.sequence = "A2"; } // lesson //enregistrementFinal.lesson = ""; // sound tr = trouvé(shtooka1données, enregistrementFinal.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka1 " ); enregistrementFinal.sound = "[sound:" + tr.sound + "]"; enregistrementFinal.locuteur = tr.locuteur; enregistrementFinal.collectionAudio = "Shtooka-cmn-caen-tan"; } else { tr = trouvé(shtooka2données, enregistrementFinal.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka2 " ); enregistrementFinal.sound = "[sound:" + tr.sound + "]"; enregistrementFinal.locuteur = tr.locuteur; enregistrementFinal.collectionAudio = "Shtooka-chi-balm"; } else { tr = trouvé(shtooka3données, enregistrementFinal.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka3 " ); enregistrementFinal.sound = "[sound:" + tr.sound + "]"; enregistrementFinal.locuteur = tr.locuteur; enregistrementFinal.collectionAudio = "Shtooka-cmn-balm-congcong"; } else { tr = trouvé(shtooka4données, enregistrementFinal.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka4 " ); enregistrementFinal.sound = "[sound:" + tr.sound + "]"; enregistrementFinal.locuteur = tr.locuteur; enregistrementFinal.collectionAudio = "Shtooka-cmn-balm-hsk1"; } else { // console.log("pas trouvé! On va générer les sons avec Google tts"); var nomFichierAudio = enregistrementFinal.hanzi + ".mp3"; // DEBUG console.log(nomFichierAudio); enregistrementFinal.sound = "[sound:" + nomFichierAudio + "]"; enregistrementFinal.locuteur = "Google TTS"; enregistrementFinal.collectionAudio = "Google TTS"; } } } } // origin enregistrementFinal.origin = "Grammar Wiki"; // bopomofo: on le fait à la fin et on enregistre la ligne // dès que la traduction est faite // bopo(enregistrement.hanzi).then(x => { // enregistrement.taiwanpinyin = x; //enregistrementFinal.taiwanpinyin = ""; // on écrit les lignes et enregistrements dans les fichiers ligneCSV = enregistrementFinal.hanzi + tab + enregistrementFinal.traditional + tab + enregistrementFinal.pinyin + tab + enregistrementFinal.translation + tab + enregistrementFinal.classifier + tab + enregistrementFinal.examples + tab + // enregistrementFinal.taiwanpinyin + // tab + // enregistrementFinal.samepinyin + // tab + enregistrementFinal.sequence + tab + // enregistrementFinal.lesson + // tab + enregistrementFinal.sound + tab + enregistrementFinal.locuteur + tab + enregistrementFinal.collectionAudio + tab + enregistrementFinal.origin + endLine; // DEBUG console.log(ligneCSV); // Ecriture de la ligne CSV moncsv.write(ligneCSV); // Ecriture de la ligne json json.write(JSON.stringify(enregistrementFinal) + ","); // ecriture de la ligne xml var ele = feed.ele({ enregistrementFinal }); //.catch(err => console.log(err)); // }); } catch (err) { console.log(err); } }); // DEBUG // console.log(monjson); // Fermeture des fichiers json, xml et csv // on ferme le fichier CSV moncsv.end(); // on écrit le fichier xml fs.writeFileSync( fichierXml, feed.end({ pretty: true }) ); // on écrit le fichier Json // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8"); json.write("{},]}"); json.end();