vocab.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. // librairie de gestion des répertoires et fichiers
  2. const fs = require("fs");
  3. const path = require("path");
  4. const shtooka1 = require('./cmn-caen-tan.json.json');
  5. const shtooka2 = require('./chi-balm.json.json');
  6. const shtooka3 = require('./cmn-balm-congcong.json.json');
  7. const shtooka4 = require('./cmn-balm-hsk1.json.json');
  8. // librairie de gestion des arguments de la ligne de commande
  9. var argv = require("optimist").argv;
  10. // librairie de recherche dans un json
  11. var _ = require('underscore');
  12. // librairie de traitement du pinyin
  13. const pinyinizer = require('pinyinizer');
  14. const pjs = require("pinyin4js");
  15. // librairie de gestion du hanzi
  16. const opencc = require('node-opencc');
  17. // librairie de gestion des fichiers xml
  18. const builder = require('xmlbuilder');
  19. // librairie de gestion des fichiers csv
  20. var csv = require("comma-separated-values");
  21. // données de stockage
  22. var fichierXml = "rudgers-table.xml";
  23. var fichierJson = "rudgers-table.json";
  24. var fichierCSV = "rudgers-table.csv";
  25. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  26. var repertoireInitial = "./";
  27. var argument = argv._[0];
  28. fichierDonnées = path.join(repertoireInitial,argument);
  29. var shtooka1données = shtooka1.shtooka;
  30. var shtooka2données = shtooka2.shtooka;
  31. var shtooka3données = shtooka3.shtooka;
  32. var shtooka4données = shtooka4.shtooka;
  33. // DEBUG
  34. // console.log(fichierDonnées);
  35. // utilitaires
  36. var tab = "\t";
  37. var endLine = "\n";
  38. // Variables fichier des fichiers csv, json et xml
  39. fichierXml = path.join(repertoireInitial, argument + ".xml");
  40. fichierJson = path.join(repertoireInitial, argument + ".json");
  41. fichierCSV = path.join(repertoireInitial, argument + "-1.csv");
  42. // on crée le fichier xml
  43. var feed = builder.create('rudgerstable', {
  44. version: '1.0',
  45. encoding: 'UTF-8',
  46. standalone: true
  47. });
  48. // on crée le fichier csv
  49. var moncsv = fs.createWriteStream(fichierCSV);
  50. // on crée le fichier json
  51. var json = fs.createWriteStream(fichierJson);
  52. json.write('{"rudgers":[');
  53. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  54. // DEBUG
  55. // console.log(fichierATraiter);
  56. var monjson = new csv(fichierATraiter, {
  57. header: ['hanzi', 'pinyin', 'grammar','translation','lesson','origin','sound'],
  58. cast: ['String', 'String','String','String','String','String','String']
  59. }).parse();
  60. // DEBUG inclusion des fichiers json
  61. // console.log(shtooka1données);
  62. // la ligne CSV qu'on va écrire dans le fichier CSV
  63. var ligneCSV = "";
  64. // L'élément xml qui constitue un enregistrement du fichier xml
  65. var ele = null;
  66. // a = liste json
  67. // b = le hanzi à trouver dans la liste ci-dessus(enregistrement.hanzi)
  68. function trouvé(a,b) {
  69. var t = _.find(a, function (record) {
  70. return record.hanzi == b });
  71. return t;
  72. };
  73. monjson.forEach(function(enregistrement){
  74. // DEBUG
  75. // console.log(enregistrement.hanzi);
  76. ligneCSV = "";
  77. ele = null;
  78. try {
  79. // DEBUG: recherche du son correspondant dans la première base
  80. // var results = _.find(shtooka1données, function (record) {
  81. // return record.hanzi == enregistrement.hanzi });
  82. enregistrement.hanzi = enregistrement.hanzi.trim();
  83. var normalisedPinyin = PinyinHelper.convertToPinyinString(enregistrement.hanzi, ' ', PinyinFormat.WITH_TONE_MARK);
  84. enregistrement.pinyin = normalisedPinyin;
  85. enregistrement.hanzi= enregistrement.hanzi.replace(/ /g, "");
  86. enregistrement.locuteur = "";
  87. enregistrement.collectionAudio = "";
  88. tr = trouvé(shtooka1données,enregistrement.hanzi);
  89. if (tr != undefined) {
  90. //console.log("trouvé dans shtooka1 " );
  91. enregistrement.sound = "[sound:" + tr.sound + "]";
  92. enregistrement.locuteur = tr.locuteur;
  93. enregistrement.collectionAudio = "Shtooka-cmn-caen-tan";
  94. } else {
  95. tr = trouvé(shtooka2données,enregistrement.hanzi);
  96. if (tr != undefined) {
  97. //console.log("trouvé dans shtooka2 " );
  98. enregistrement.sound = "[sound:" + tr.sound + "]";
  99. enregistrement.locuteur = tr.locuteur;
  100. enregistrement.collectionAudio = "Shtooka-chi-balm";
  101. } else {
  102. tr = trouvé(shtooka3données,enregistrement.hanzi);
  103. if (tr != undefined) {
  104. //console.log("trouvé dans shtooka3 " );
  105. enregistrement.sound = "[sound:" + tr.sound + "]";
  106. enregistrement.locuteur = tr.locuteur;
  107. enregistrement.collectionAudio = "Shtooka-cmn-balm-congcong";
  108. } else {
  109. tr = trouvé(shtooka4données,enregistrement.hanzi);
  110. if (tr != undefined) {
  111. //console.log("trouvé dans shtooka4 " );
  112. enregistrement.sound = "[sound:" + tr.sound + "]";
  113. enregistrement.locuteur = tr.locuteur;
  114. enregistrement.collectionAudio = "Shtooka-cmn-balm-hsk1";
  115. } else {
  116. // console.log("pas trouvé! On va générer les sons avec Google tts");
  117. var nomFichierAudio = enregistrement.hanzi + ".mp3";
  118. // DEBUG
  119. console.log(nomFichierAudio);
  120. enregistrement.sound = "[sound:" + nomFichierAudio + "]";
  121. enregistrement.locuteur = "Google TTS";
  122. enregistrement.collectionAudio = "";
  123. }
  124. }
  125. }
  126. }
  127. enregistrement.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi);
  128. // DEBUG
  129. //console.log(enregistrement.hanzi, "**", enregistrement.traditional);
  130. // console.log(enregistrement.translation);
  131. // enregistrement.translation = enregistrement.translation.replace(/;/g, " /");
  132. enregistrement.translation = enregistrement.translation.replace(/, /g, " / ");
  133. // if (enregistrement.classifier == "") {
  134. // enregistrement.classifier = "";
  135. // }
  136. // console.log(enregistrement.translation);
  137. ligneCSV = enregistrement.hanzi + tab +
  138. enregistrement.traditional + tab +
  139. enregistrement.pinyin + tab +
  140. //enregistrement.normalisedPinyin + tab +
  141. enregistrement.translation+ tab +
  142. enregistrement.grammar + tab +
  143. enregistrement.lesson + tab +
  144. enregistrement.sound + tab +
  145. enregistrement.origin + tab +
  146. enregistrement.locuteur + tab +
  147. enregistrement.collectionAudio + tab +
  148. endLine;
  149. // DEBUG console.log(ligneCSV);
  150. // Ecriture de la ligne CSV
  151. moncsv.write(ligneCSV);
  152. // Ecriture de la ligne json
  153. json.write(JSON.stringify(enregistrement) + ",");
  154. var ele = feed.ele({enregistrement});
  155. } catch (err) {
  156. console.log(err);
  157. }
  158. })
  159. // DEBUG
  160. // console.log(monjson);
  161. // Fermeture des fichiers json, xml et csv
  162. // on ferme le fichier CSV
  163. moncsv.end();
  164. // on écrit le fichier xml
  165. fs.writeFileSync(fichierXml, feed.end({
  166. pretty: true
  167. }));
  168. // on écrit le fichier Json
  169. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  170. json.write('{},]}');
  171. json.end();