grwiki.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. // librairie de gestion des fichiers xml
  11. const builder = require("xmlbuilder");
  12. // découpage du pinyin
  13. var pinyinSeparate = require("pinyin-separate");
  14. // librairie de gestion des fichiers csv
  15. var csv = require("comma-separated-values");
  16. // données de stockage
  17. var fichierXml = "grammarwiki-table.xml";
  18. var fichierJson = "grammarwiki-table.json";
  19. var fichierCSV = "grammarwiki-table.csv";
  20. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  21. var repertoireInitial = "./";
  22. var argument = argv._[0];
  23. fichierDonnées = path.join(repertoireInitial, argument);
  24. // DEBUG
  25. // console.log(fichierDonnées);
  26. // utilitaires
  27. var tab = "\t";
  28. var endLine = "\n";
  29. // Variables fichier des fichiers csv, json et xml
  30. fichierXml = path.join(repertoireInitial, argument + ".xml");
  31. fichierJson = path.join(repertoireInitial, argument + ".json");
  32. fichierCSV = path.join(repertoireInitial, argument + "-1.csv");
  33. fichierMotsHanzi = path.join(repertoireInitial, argument + "1.txt");
  34. // on crée le fichier xml
  35. var feed = builder.create("grammarwikitable", {
  36. version: "1.0",
  37. encoding: "UTF-8",
  38. standalone: true,
  39. });
  40. // on crée le fichier csv
  41. var moncsv = fs.createWriteStream(fichierCSV);
  42. var monFichierMotsHanzi = fs.createWriteStream(fichierMotsHanzi);
  43. // on crée le fichier json
  44. var json = fs.createWriteStream(fichierJson);
  45. json.write('{"grammarwiki":[');
  46. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  47. // DEBUG
  48. // console.log(fichierATraiter);
  49. var monjson = new csv(fichierATraiter, {
  50. header: [
  51. "hanzi",
  52. "pinyin",
  53. "translation",
  54. "topic",
  55. "topicNumber",
  56. "level",
  57. "origin",
  58. ],
  59. cast: ["String", "String", "String", "String", "String", "String", "String"],
  60. }).parse();
  61. // la ligne CSV qu'on va écrire dans le fichier CSV
  62. var ligneCSV = "";
  63. // L'élément xml qui constitue un enregistrement du fichier xml
  64. var ele = null;
  65. function ecritMots(mot, index) {
  66. fs.writeFile(fichierMotsHanzi, mot + "\n", { flag: "a" }, (err) => {
  67. console.log(err);
  68. });
  69. }
  70. monjson.forEach(function (enregistrement) {
  71. // DEBUG
  72. // console.log(enregistrement.hanzi);
  73. ligneCSV = "";
  74. ele = null;
  75. tableauMots = [];
  76. try {
  77. enregistrement.hanzi = enregistrement.hanzi.trim();
  78. //tableauMots = enregistrement.hanzi.split(" ");
  79. //console.log(tableauMots);
  80. //tableauMots.forEach(ecritMots);
  81. var NomFichierSon = enregistrement.hanzi.replace(/ /g, "");
  82. enregistrement.hanziNormalised = NomFichierSon;
  83. NomFichierSon = NomFichierSon.replace(/。/g, "");
  84. NomFichierSon = NomFichierSon.replace(/,/g, "");
  85. NomFichierSon = NomFichierSon.replace(/!/g, "");
  86. NomFichierSon = NomFichierSon.replace(/?/g, "");
  87. console.log(NomFichierSon + "\n");
  88. enregistrement.traditional = opencc.simplifiedToTraditional(
  89. enregistrement.hanzi
  90. );
  91. enregistrement.traditionalNormalized = enregistrement.traditional.replace(
  92. / /g,
  93. ""
  94. );
  95. // traitement du pinyin
  96. // var normalisedPinyin = PinyinHelper.convertToPinyinString(enregistrement.hanzi, ' ', PinyinFormat.WITH_TONE_MARK);
  97. // enregistrement.pinyin = normalisedPinyin;
  98. // on enlève les espaces devant et derrière
  99. enregistrement.pinyin = enregistrement.pinyin.trim();
  100. // tout en minuscule
  101. enregistrement.pinyinSyllabe = enregistrement.pinyin.toLowerCase();
  102. // on enlève la ponctuation
  103. enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace(
  104. /\./g,
  105. ""
  106. );
  107. enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace(
  108. /\,/g,
  109. ""
  110. );
  111. enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace(
  112. /\?/g,
  113. ""
  114. );
  115. enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace(
  116. /\:/g,
  117. ""
  118. );
  119. enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace(
  120. /\;/g,
  121. ""
  122. );
  123. enregistrement.pinyinSyllabe = enregistrement.pinyinSyllabe.replace(
  124. /!/g,
  125. ""
  126. );
  127. // on sépare les syllabes
  128. var tableauPiyin = [];
  129. TableauPinyin = pinyinSeparate(enregistrement.pinyinSyllabe);
  130. // on recolle le tout
  131. enregistrement.pinyinSyllabe = TableauPinyin.join(" ");
  132. // DEBUG
  133. //console.log(enregistrement.hanzi, "**", enregistrement.traditional);
  134. // console.log(enregistrement.translation);
  135. //enregistrement.translation = enregistrement.translation.replace(/;/g, " /");
  136. //enregistrement.translation = enregistrement.translation.replace(/, /g, " / ");
  137. if (enregistrement.classifier == "") {
  138. enregistrement.classifier = "";
  139. }
  140. // console.log(enregistrement.translation);
  141. enregistrement.sound = "[sound:" + NomFichierSon + ".mp3]";
  142. ligneCSV =
  143. enregistrement.hanzi +
  144. tab +
  145. enregistrement.hanziNormalised +
  146. tab +
  147. enregistrement.traditional +
  148. tab +
  149. enregistrement.traditionalNormalized +
  150. tab +
  151. enregistrement.pinyin +
  152. tab +
  153. enregistrement.pinyinSyllabe +
  154. tab +
  155. enregistrement.translation +
  156. tab +
  157. enregistrement.topic +
  158. tab +
  159. enregistrement.topicNumber +
  160. tab +
  161. enregistrement.level +
  162. tab +
  163. enregistrement.sound +
  164. tab +
  165. enregistrement.origin +
  166. endLine;
  167. // DEBUG console.log(ligneCSV);
  168. // Ecriture de la ligne CSV
  169. moncsv.write(ligneCSV);
  170. // Ecriture de la ligne json
  171. json.write(JSON.stringify(enregistrement) + ",");
  172. var ele = feed.ele({ enregistrement });
  173. } catch (err) {
  174. console.log(err);
  175. }
  176. });
  177. // DEBUG
  178. // console.log(monjson);
  179. // Fermeture des fichiers json, xml et csv
  180. // on ferme le fichier CSV
  181. moncsv.end();
  182. monFichierMotsHanzi.end();
  183. // on écrit le fichier xml
  184. fs.writeFileSync(
  185. fichierXml,
  186. feed.end({
  187. pretty: true,
  188. })
  189. );
  190. // on écrit le fichier Json
  191. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  192. json.write("{},]}");
  193. json.end();