cn1.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // librairie de gestion des répertoires et fichiers
  2. const fs = require("fs");
  3. const path = require("path");
  4. // librairie de gestion des arguments de la ligne de commande
  5. var argv = require("optimist").argv;
  6. // librairie de traitement du pinyin
  7. const pinyinizer = require('pinyinizer');
  8. // librairie de gestion du hanzi
  9. const opencc = require('node-opencc');
  10. const pinyin = require("pinyin");
  11. // librairie de gestion des fichiers xml
  12. const builder = require('xmlbuilder');
  13. // librairie de gestion des fichiers csv
  14. var csv = require("comma-separated-values");
  15. // données de stockage
  16. var fichierXml = "cn-table.xml";
  17. var fichierJson = "cn-table.json";
  18. var fichierCSV = "cn-table.csv";
  19. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  20. var repertoireInitial = "../Liste-mots-phrases/";
  21. var argument = argv._[0];
  22. fichierDonnées = path.join(repertoireInitial,argument);
  23. // DEBUG
  24. // console.log(fichierDonnées);
  25. // utilitaires
  26. var tab = "\t";
  27. var endLine = "\n";
  28. // Variables fichier des fichiers csv, json et xml
  29. fichierXml = path.join(repertoireInitial, argument + ".xml");
  30. fichierJson = path.join(repertoireInitial, argument + ".json");
  31. fichierCSV = path.join(repertoireInitial, argument + "-1.csv");
  32. // on crée le fichier xml
  33. var feed = builder.create('cn', {
  34. version: '1.0',
  35. encoding: 'UTF-8',
  36. standalone: true
  37. });
  38. // on crée le fichier csv
  39. var moncsv = fs.createWriteStream(fichierCSV);
  40. // on crée le fichier json
  41. var monjson = fs.createWriteStream(fichierJson);
  42. monjson.write('{"cn":[');
  43. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  44. // DEBUG
  45. // console.log(fichierATraiter);
  46. var lejson = new csv(fichierATraiter, {
  47. header: ['hanzi', 'pinyin', 'translation', 'lesson', 'sequence','origin']
  48. }).parse();
  49. // la ligne CSV qu'on va écrire dans le fichier CSV
  50. var ligneCSV = "";
  51. // L'élément xml qui constitue un enregistrement du fichier xml
  52. var ele = null;
  53. var l = 0;
  54. lejson.forEach(function(enregistrement){
  55. // DEBUG
  56. // console.log(enregistrement.hanzi);
  57. ligneCSV = "";
  58. ele = null;
  59. try {
  60. l = l + 1;
  61. // on met en forme les enregistrements initiaux
  62. enregistrement.hanzi = enregistrement.hanzi.trim();
  63. enregistrement.hanzi = enregistrement.hanzi.replace(/ /g, '');
  64. enregistrement.hanzi = enregistrement.hanzi.replace(/ /g, '');
  65. if (enregistrement.pinyin == "") {
  66. enregistrement.pinyin = pinyin(enregistrement.hanzi).join((' '));
  67. enregistrement.pinyin = enregistrement.pinyin.replace(/,/g, " ");
  68. }
  69. enregistrement.pinyin = enregistrement.pinyin.replace(/。/g, ".");
  70. enregistrement.pinyin = enregistrement.pinyin.replace(/?/g, "?");
  71. enregistrement.pinyin = enregistrement.pinyin.replace(/ ,/g, ",");
  72. enregistrement.pinyin = enregistrement.pinyin.replace(/ \?/g, "?");
  73. enregistrement.pinyin = enregistrement.pinyin.replace(/ \./g, ".");
  74. enregistrement.pinyin = enregistrement.pinyin[0].toUpperCase() + enregistrement.pinyin.substring(1);
  75. console.log(l, " -> ", enregistrement.pinyin);
  76. // enregistrement.pinyin = enregistrement.pinyin.trim();
  77. enregistrement.translation = enregistrement.translation.trim();
  78. //enregistrement.grammar = enregistrement.grammar.trim();
  79. enregistrement.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi);
  80. // DEBUG
  81. //console.log(enregistrement.hanzi, "**", enregistrement.traditional);
  82. // console.log(enregistrement.translation);
  83. //enregistrement.translation = enregistrement.translation.replace(/;/g, " /");
  84. //enregistrement.translation = enregistrement.translation.replace(/, /g, " / ");
  85. // if (enregistrement.classifier == "") {
  86. // enregistrement.classifier = "";
  87. // }
  88. enregistrement.sound = "[sound:##]";
  89. // console.log(enregistrement.translation);
  90. ligneCSV = enregistrement.hanzi + tab
  91. + enregistrement.traditional
  92. + tab + enregistrement.pinyin
  93. //+ tab + enregistrement.grammar
  94. + tab + enregistrement.translation
  95. + tab + enregistrement.lesson
  96. + tab + enregistrement.sequence
  97. + tab + enregistrement.sound
  98. + tab + enregistrement.origin
  99. + endLine;
  100. // DEBUG console.log(ligneCSV);
  101. // Ecriture de la ligne CSV
  102. moncsv.write(ligneCSV);
  103. // Ecriture de la ligne json
  104. monjson.write(JSON.stringify(enregistrement) + ",");
  105. var ele = feed.ele({enregistrement});
  106. } catch (err) {
  107. console.log(err);
  108. }
  109. })
  110. // DEBUG
  111. // console.log(lejson);
  112. // Fermeture des fichiers json, xml et csv
  113. // on ferme le fichier CSV
  114. moncsv.end();
  115. // on écrit le fichier xml
  116. fs.writeFileSync(fichierXml, feed.end({
  117. pretty: true
  118. }));
  119. // on écrit le fichier Json
  120. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  121. monjson.write('{},]}');
  122. monjson.end();