prevocab.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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. // découpage du pinyin
  22. var pinyinSeparate = require("pinyin-separate");
  23. // découpage des phrases hanzi (tokenizer)
  24. var tokenizer = require("hanzi-tokenizer");
  25. // données de stockage
  26. var fichierXml = "DominoTable.xml";
  27. var fichierJson = "DominoTable.json";
  28. var fichierCSV = "DominoTable.csv";
  29. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  30. var repertoireInitial = "./";
  31. var argument = argv._[0];
  32. fichierDonnées = path.join(repertoireInitial, argument);
  33. var shtooka1données = shtooka1.shtooka;
  34. var shtooka2données = shtooka2.shtooka;
  35. var shtooka3données = shtooka3.shtooka;
  36. var shtooka4données = shtooka4.shtooka;
  37. // DEBUG
  38. console.log(fichierDonnées);
  39. // utilitaires
  40. var tab = "\t";
  41. var endLine = "\n";
  42. // Variables fichier des fichiers csv, json et xml
  43. fichierXml = path.join(repertoireInitial, argument + ".xml");
  44. fichierJson = path.join(repertoireInitial, argument + ".json");
  45. fichierCSV = path.join(repertoireInitial, argument + "-1.csv");
  46. // on crée le fichier xml
  47. var feed = builder.create("domino", {
  48. version: "1.0",
  49. encoding: "UTF-8",
  50. standalone: true,
  51. });
  52. // on crée le fichier csv
  53. var moncsv = fs.createWriteStream(fichierCSV);
  54. // on crée le fichier json
  55. var json = fs.createWriteStream(fichierJson);
  56. json.write('{"domino":[');
  57. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  58. // DEBUG
  59. // console.log(fichierATraiter);
  60. var monjson = new csv(fichierATraiter, {
  61. header: [
  62. "hanzi",
  63. "traditional"
  64. ],
  65. cast: [
  66. "String",
  67. "String"
  68. ],
  69. }).parse();
  70. // DEBUG inclusion des fichiers json
  71. // console.log(shtooka1données);
  72. // la ligne CSV qu'on va écrire dans le fichier CSV
  73. var ligneCSV = "";
  74. // L'élément xml qui constitue un enregistrement du fichier xml
  75. var ele = null;
  76. // a = liste json
  77. // b = le hanzi à trouver dans la liste ci-dessus(enregistrement.hanzi)
  78. function trouvé(a, b) {
  79. var t = _.find(a, function (record) {
  80. return record.hanzi == b;
  81. });
  82. return t;
  83. }
  84. var tempo = "";
  85. function ass(x) {
  86. tempo = x;
  87. }
  88. monjson.forEach(function (enregistrement) {
  89. // DEBUG
  90. // console.log(enregistrement.hanzi);
  91. ligneCSV = "";
  92. ele = null;
  93. try {
  94. enregistrement.traditional = "";
  95. enregistrement.pinyin = "";
  96. enregistrement.english = "";
  97. enregistrement.french = "";
  98. enregistrement.sound = "[sound:.mp3]";
  99. enregistrement.locuteur = "";
  100. enregistrement.collectionAudio = "";
  101. // traitement du hanzi
  102. enregistrement.hanzi = enregistrement.hanzi.trim();
  103. enregistrement.traditional = opencc.simplifiedToTraditional(
  104. enregistrement.hanzi
  105. );
  106. // les fichiers sons
  107. var NomFichierSon = enregistrement.hanzi;
  108. // console.log(NomFichierSon);
  109. enregistrement.pinyin = pjs.convertToPinyinString((enregistrement.hanzi)," ",pjs.WITH_TONE_MARK);
  110. enregistrement.pinyin = enregistrement.pinyin.trim();
  111. // recherche d'un enregistrement audio si pas fourni
  112. if (enregistrement.sound == "[sound:.mp3]") {
  113. tr = trouvé(shtooka1données, enregistrement.hanzi);
  114. if (tr != undefined) {
  115. //console.log("trouvé dans shtooka1 " );
  116. enregistrement.sound = "[sound:" + tr.sound + "]";
  117. enregistrement.locuteur = tr.locuteur;
  118. enregistrement.collectionAudio = "Shtooka-cmn-caen-tan";
  119. } else {
  120. tr = trouvé(shtooka2données, enregistrement.hanzi);
  121. if (tr != undefined) {
  122. //console.log("trouvé dans shtooka2 " );
  123. enregistrement.sound = "[sound:" + tr.sound + "]";
  124. enregistrement.locuteur = tr.locuteur;
  125. enregistrement.collectionAudio = "Shtooka-chi-balm";
  126. } else {
  127. tr = trouvé(shtooka3données, enregistrement.hanzi);
  128. if (tr != undefined) {
  129. //console.log("trouvé dans shtooka3 " );
  130. enregistrement.sound = "[sound:" + tr.sound + "]";
  131. enregistrement.locuteur = tr.locuteur;
  132. enregistrement.collectionAudio = "Shtooka-cmn-balm-congcong";
  133. } else {
  134. tr = trouvé(shtooka4données, enregistrement.hanzi);
  135. if (tr != undefined) {
  136. //console.log("trouvé dans shtooka4 " );
  137. enregistrement.sound = "[sound:" + tr.sound + "]";
  138. enregistrement.locuteur = tr.locuteur;
  139. enregistrement.collectionAudio = "Shtooka-cmn-balm-hsk1";
  140. } else {
  141. // console.log("pas trouvé! On va générer les sons avec Google tts");
  142. // DEBUG
  143. console.log(NomFichierSon);
  144. enregistrement.sound = "[sound:" + NomFichierSon + ".mp3" + "]";
  145. enregistrement.locuteur = "Google TTS";
  146. enregistrement.collectionAudio = "Google TTS";
  147. }
  148. }
  149. }
  150. }
  151. enregistrement.sound = enregistrement.sound.replace ("ogg","mp3");
  152. }
  153. ligneCSV =
  154. enregistrement.hanzi +
  155. tab +
  156. enregistrement.traditional +
  157. tab +
  158. enregistrement.pinyin +
  159. tab +
  160. enregistrement.english+
  161. tab +
  162. enregistrement.french +
  163. tab +
  164. enregistrement.sound +
  165. tab +
  166. enregistrement.locuteur +
  167. tab +
  168. enregistrement.collectionAudio +
  169. endLine;
  170. // DEBUG console.log(ligneCSV);
  171. // Ecriture de la ligne CSV
  172. moncsv.write(ligneCSV);
  173. // Ecriture de la ligne json
  174. json.write(JSON.stringify(enregistrement) + ",");
  175. var ele = feed.ele({ enregistrement });
  176. } catch (err) {
  177. console.log(err);
  178. }
  179. });
  180. // DEBUG
  181. // console.log(monjson);
  182. // Fermeture des fichiers json, xml et csv
  183. // on ferme le fichier CSV
  184. moncsv.end();
  185. // on écrit le fichier xml
  186. fs.writeFileSync(
  187. fichierXml,
  188. feed.end({
  189. pretty: true,
  190. })
  191. );
  192. // on écrit le fichier Json
  193. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  194. json.write("{},]}");
  195. json.end();