// librairie de gestion des répertoires et fichiers const fs = require("fs"); const path = require("path"); 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"); // librairie de gestion des arguments de la ligne de commande var argv = require("optimist").argv; // librairie de recherche dans un json var _ = require("underscore"); // librairie de traitement du pinyin const pinyinizer = require("pinyinizer"); const pjs = require("pinyin4js"); // librairie de gestion du hanzi const opencc = require("node-opencc"); // librairie de gestion des fichiers xml const builder = require("xmlbuilder"); // librairie de gestion des fichiers csv var csv = require("comma-separated-values"); // découpage du pinyin var pinyinSeparate = require("pinyin-separate"); // découpage des phrases hanzi (tokenizer) var tokenizer = require("hanzi-tokenizer"); // données de stockage var fichierXml = "DominoTable.xml"; var fichierJson = "DominoTable.json"; var fichierCSV = "DominoTable.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); var shtooka1données = shtooka1.shtooka; var shtooka2données = shtooka2.shtooka; var shtooka3données = shtooka3.shtooka; var shtooka4données = shtooka4.shtooka; // DEBUG console.log(fichierDonnées); // 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("domino", { 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('{"domino":['); var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8"); // DEBUG // console.log(fichierATraiter); var monjson = new csv(fichierATraiter, { header: [ "hanzi", "traditional" ], cast: [ "String", "String" ], }).parse(); // DEBUG inclusion des fichiers json // console.log(shtooka1données); // 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; } var tempo = ""; function ass(x) { tempo = x; } monjson.forEach(function (enregistrement) { // DEBUG // console.log(enregistrement.hanzi); ligneCSV = ""; ele = null; try { enregistrement.traditional = ""; enregistrement.pinyin = ""; enregistrement.english = ""; enregistrement.french = ""; enregistrement.sound = "[sound:.mp3]"; enregistrement.locuteur = ""; enregistrement.collectionAudio = ""; // traitement du hanzi enregistrement.hanzi = enregistrement.hanzi.trim(); enregistrement.traditional = opencc.simplifiedToTraditional( enregistrement.hanzi ); // les fichiers sons var NomFichierSon = enregistrement.hanzi; // console.log(NomFichierSon); enregistrement.pinyin = pjs.convertToPinyinString((enregistrement.hanzi)," ",pjs.WITH_TONE_MARK); enregistrement.pinyin = enregistrement.pinyin.trim(); // recherche d'un enregistrement audio si pas fourni if (enregistrement.sound == "[sound:.mp3]") { tr = trouvé(shtooka1données, enregistrement.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka1 " ); enregistrement.sound = "[sound:" + tr.sound + "]"; enregistrement.locuteur = tr.locuteur; enregistrement.collectionAudio = "Shtooka-cmn-caen-tan"; } else { tr = trouvé(shtooka2données, enregistrement.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka2 " ); enregistrement.sound = "[sound:" + tr.sound + "]"; enregistrement.locuteur = tr.locuteur; enregistrement.collectionAudio = "Shtooka-chi-balm"; } else { tr = trouvé(shtooka3données, enregistrement.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka3 " ); enregistrement.sound = "[sound:" + tr.sound + "]"; enregistrement.locuteur = tr.locuteur; enregistrement.collectionAudio = "Shtooka-cmn-balm-congcong"; } else { tr = trouvé(shtooka4données, enregistrement.hanzi); if (tr != undefined) { //console.log("trouvé dans shtooka4 " ); enregistrement.sound = "[sound:" + tr.sound + "]"; enregistrement.locuteur = tr.locuteur; enregistrement.collectionAudio = "Shtooka-cmn-balm-hsk1"; } else { // console.log("pas trouvé! On va générer les sons avec Google tts"); // DEBUG console.log(NomFichierSon); enregistrement.sound = "[sound:" + NomFichierSon + ".mp3" + "]"; enregistrement.locuteur = "Google TTS"; enregistrement.collectionAudio = "Google TTS"; } } } } enregistrement.sound = enregistrement.sound.replace ("ogg","mp3"); } ligneCSV = enregistrement.hanzi + tab + enregistrement.traditional + tab + enregistrement.pinyin + tab + enregistrement.english+ tab + enregistrement.french + tab + enregistrement.sound + tab + enregistrement.locuteur + tab + enregistrement.collectionAudio + endLine; // DEBUG console.log(ligneCSV); // Ecriture de la ligne CSV moncsv.write(ligneCSV); // Ecriture de la ligne json json.write(JSON.stringify(enregistrement) + ","); var ele = feed.ele({ enregistrement }); } 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();