123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- // 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();
|