cedict.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. // libvrairie de lecture de ligens de texte
  7. var readline = require('readline')
  8. // librairie de traitement du pinyin
  9. const pinyinizer = require('pinyinizer')
  10. // librairie de gestion du hanzi
  11. const opencc = require('node-opencc')
  12. // librairie de gestion des fichiers xml
  13. const builder = require('xmlbuilder')
  14. // librairie de gestion des fichiers csv
  15. var csv = require('comma-separated-values')
  16. // données de stockage
  17. var dataJson = []
  18. var dataCSV = []
  19. // les noms de fichiers
  20. var fichierXml = ''
  21. var fichierJson = ''
  22. var fichierCSV = ''
  23. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  24. var repertoireInitial = './'
  25. var argument = argv._[0]
  26. fichierDonnées = path.join(repertoireInitial, argument)
  27. // DEBUG
  28. // console.log(fichierDonnées);
  29. // utilitaires
  30. var tab = '\t'
  31. var endLine = '\n'
  32. // Variables fichier des fichiers csv, json et xml
  33. fichierXml = path.join(repertoireInitial, argument + '.xml')
  34. fichierJson = path.join(repertoireInitial, argument + '.json')
  35. fichierCSV = path.join(repertoireInitial, argument + '-1.csv')
  36. // on crée le fichier xml
  37. var feed = builder.create('dicotable', {
  38. version: '1.0',
  39. encoding: 'UTF-8',
  40. standalone: true
  41. })
  42. var ligne = {
  43. hanzi: '',
  44. traditional: '',
  45. pinyin: '',
  46. translations: []
  47. }
  48. var chinois = ''
  49. var phonetic = ''
  50. var traduc = ''
  51. var i, j = 0
  52. function resetLigne () {
  53. ligne.hanzi = ''
  54. ligne.traditional = ''
  55. ligne.pinyin = ''
  56. ligne.translations = []
  57. }
  58. // la ligne CSV qu'on va écrire dans le fichier CSV
  59. var ligneCSV = ''
  60. // L'élément xml qui constitue un enregistrement du fichier xml
  61. var ele = null
  62. var i = 0
  63. readline
  64. .createInterface({
  65. input: fs.createReadStream(fichierDonnées),
  66. terminal: false
  67. })
  68. .on('line', function (line) {
  69. // console.log('Line: ' + line);
  70. if (line[0] != '#') {
  71. chinois = line.split(' ', 2)
  72. // console.log(chinois[0], " ## ", chinois[1]);
  73. ligne.traditional = chinois[0]
  74. ligne.hanzi = chinois[1]
  75. i = line.search(/\[/)
  76. j = line.search(/\]/)
  77. phonetic = line.substr(i + 1, j - i - 1)
  78. // traitement des champs pinyin avec des chiffres
  79. phonetic = phonetic.toLowerCase()
  80. // on va tester ça ...
  81. try {
  82. var sauve = phonetic
  83. phonetic = pinyinizer.pinyinize(phonetic)
  84. phonetic = phonetic.replace(/5/g, '')
  85. } catch (err) {
  86. console.log('Erreur: ' + pinyin)
  87. phonetic = sauve
  88. }
  89. ligne.pinyin = phonetic
  90. // console.log(phonetic);
  91. ligne.translations = line.split(/\//g)
  92. var l = ligne.translations.length
  93. ligne.translations.pop()
  94. ligne.translations.shift()
  95. var temp = ligne.translations.join(' / ')
  96. // console.log(l);
  97. // console.log(ligne.translations);
  98. ligneCSV =
  99. ligne.hanzi +
  100. tab +
  101. ligne.traditional +
  102. tab +
  103. ligne.pinyin +
  104. tab +
  105. temp +
  106. endLine
  107. // console.log(ligneCSV);
  108. // console.log(ligne);
  109. // Ecriture de la ligne CSV
  110. // console.log('On écrit une ligne', ligneCSV)
  111. dataCSV.push(ligneCSV)
  112. // moncsv.write(ligneCSV);
  113. // Ecriture de la ligne json
  114. // json.write(JSON.stringify(ligne) + ',')
  115. resetLigne()
  116. }
  117. })
  118. .on('close', () => {
  119. // console.log(dataCSV);
  120. dataCSV.forEach(li => {
  121. console.log(li)
  122. moncsv.write(li)
  123. })
  124. console.log('Have a great day!')
  125. process.exit(0)
  126. })
  127. // on crée le fichier csv
  128. var moncsv = fs.createWriteStream(fichierCSV)
  129. // on crée le fichier json
  130. var json = fs.createWriteStream(fichierJson)
  131. json.write('{"dico":[')
  132. // On écrit le fichier CSV
  133. // test de la structure de données
  134. console.log(dataCSV);
  135. dataCSV.forEach(li => {
  136. console.log(li)
  137. moncsv.write(li)
  138. })
  139. // On écrit le fichier JSON
  140. // Fermeture des fichiers json, xml et csv
  141. // on écrit la fin du fichier Json
  142. json.write(']}')
  143. json.end()
  144. // on ferme le fichier CSV
  145. moncsv.end()
  146. // on écrit le fichier xml
  147. fs.writeFileSync(
  148. fichierXml,
  149. feed.end({
  150. pretty: true
  151. })
  152. )
  153. // fin du programme