// 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"); // librairie de gestion du hanzi const opencc = require("node-opencc"); // librairie de gestion des fichiers xml const builder = require("xmlbuilder"); // découpage du pinyin var pinyinSeparate = require("pinyin-separate"); // librairie de gestion des fichiers csv var csv = require("comma-separated-values"); // 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); // 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"); fichierMotsHanzi = path.join(repertoireInitial, argument + "1.txt"); // 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); var monFichierMotsHanzi = fs.createWriteStream(fichierMotsHanzi); // on crée le fichier json var json = fs.createWriteStream(fichierJson); json.write('{"grammarwiki":['); var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8"); // DEBUG // console.log(fichierATraiter); var monjson = new csv(fichierATraiter, { header: [ "hanzi", "pinyin", "translation", "topic", "topicNumber", "level", "origin", ], cast: ["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; function ecritMots(mot, index) { fs.writeFile(fichierMotsHanzi, mot + "\n", { flag: "a" }, (err) => { console.log(err); }); } monjson.forEach(function (enregistrement) { // DEBUG // console.log(enregistrement.hanzi); ligneCSV = ""; ele = null; tableauMots = []; try { enregistrement.hanzi = enregistrement.hanzi.trim(); //tableauMots = enregistrement.hanzi.split(" "); //console.log(tableauMots); //tableauMots.forEach(ecritMots); var NomFichierSon = enregistrement.hanzi.replace(/ /g, ""); enregistrement.hanziNormalised = NomFichierSon; NomFichierSon = NomFichierSon.replace(/。/g, ""); NomFichierSon = NomFichierSon.replace(/,/g, ""); NomFichierSon = NomFichierSon.replace(/!/g, ""); NomFichierSon = NomFichierSon.replace(/?/g, ""); console.log(NomFichierSon + "\n"); enregistrement.traditional = opencc.simplifiedToTraditional( enregistrement.hanzi ); enregistrement.traditionalNormalized = enregistrement.traditional.replace( / /g, "" ); // traitement du pinyin // var normalisedPinyin = PinyinHelper.convertToPinyinString(enregistrement.hanzi, ' ', PinyinFormat.WITH_TONE_MARK); // enregistrement.pinyin = normalisedPinyin; // on enlève les espaces devant et derrière enregistrement.pinyin = enregistrement.pinyin.trim(); // tout en minuscule enregistrement.pinyinSyllabe = enregistrement.pinyin.toLowerCase(); // on enlève la ponctuation enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace( /\./g, "" ); enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace( /\,/g, "" ); enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace( /\?/g, "" ); enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace( /\:/g, "" ); enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace( /\;/g, "" ); enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace( /!/g, "" ); // on sépare les syllabes var tableauPiyin = []; TableauPinyin = pinyinSeparate(enregistrement.pinyinSyllabe); // on recolle le tout enregistrement.pinyinSyllabe = TableauPinyin.join(" "); // 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); enregistrement.sound = "[sound:" + NomFichierSon + ".mp3]"; ligneCSV = enregistrement.hanzi + tab + enregistrement.hanziNormalised + tab + enregistrement.traditional + tab + enregistrement.traditionalNormalized + tab + enregistrement.pinyin + tab + enregistrement.pinyinSyllabe + tab + enregistrement.translation + tab + enregistrement.topic + tab + enregistrement.topicNumber + tab + enregistrement.level + tab + enregistrement.sound + tab + enregistrement.origin + 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(); monFichierMotsHanzi.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();