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