// 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"); // données de stockage var fichierXml = "rudgers-table.xml"; var fichierJson = "rudgers-table.json"; var fichierCSV = "rudgers-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); 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('rudgerstable', { 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('{"rudgers":['); var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8"); // DEBUG // console.log(fichierATraiter); var monjson = new csv(fichierATraiter, { header: ['hanzi', 'pinyin', 'grammar','translation','lesson','origin','sound'], cast: ['String', 'String','String','String','String','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; }; monjson.forEach(function(enregistrement){ // DEBUG // console.log(enregistrement.hanzi); ligneCSV = ""; ele = null; try { // DEBUG: recherche du son correspondant dans la première base // var results = _.find(shtooka1données, function (record) { // return record.hanzi == enregistrement.hanzi }); enregistrement.hanzi = enregistrement.hanzi.trim(); enregistrement.normalisedPinyin = PinyinHelper.convertToPinyinString(enregistrement.hanzi, ' ', PinyinFormat.WITH_TONE_MARK); enregistrement.hanzi= enregistrement.hanzi.replace(/ /g, ""); enregistrement.locuteur = ""; enregistrement.collectionAudio = ""; 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"); var nomFichierAudio = enregistrement.hanzi + ".mp3"; // DEBUG console.log(nomFichierAudio); enregistrement.sound = "[sound:" + nomFichierAudio + "]"; enregistrement.locuteur = "Google TTS"; enregistrement.collectionAudio = ""; } } } } enregistrement.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi); // DEBUG //console.log(enregistrement.hanzi, "**", enregistrement.traditional); // console.log(enregistrement.translation); // enregistrement.translation = enregistrement.translation.replace(/;/g, " /"); enregistrement.translation = enregistrement.translation.replace(/, /g, " / "); // if (enregistrement.classifier == "") { // enregistrement.classifier = ""; // } // console.log(enregistrement.translation); ligneCSV = enregistrement.hanzi + tab + enregistrement.traditional + tab + enregistrement.pinyin + tab + enregistrement.normalisedPinyin + tab + enregistrement.translation+ tab + enregistrement.grammar + tab + enregistrement.lesson + tab + enregistrement.sound + tab + enregistrement.origin + tab + enregistrement.locuteur + tab + enregistrement.collectionAudio + tab + 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();