infra-ordinaire~20171217-164958.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. # function pour stocker les mots
  2. import nltk
  3. from duckduckpy import query
  4. import random
  5. from googletrans import Translator
  6. from nltk.corpus import wordnet
  7. import codecs
  8. # ------------------ #
  9. # en-tête du script > déclaration des fonctions et des variables
  10. # ------------------ #
  11. # on crée une liste pour stocker tous les mots
  12. all_words = []
  13. sentences = []
  14. # fonction qui extrait les mots et les stockent dans une liste
  15. def words_extract( str ):
  16. tokens = nltk.word_tokenize( str )
  17. words = []
  18. for word, pos in nltk.pos_tag(tokens):
  19. if pos == 'NN':
  20. words.append(word)
  21. return words
  22. # fonction qui génère un nombre aléatoire à partir de la liste de mots pour pouvoir choisir un mot
  23. def rand_words( list ):
  24. # test si la longueur du tableau est egal à zero
  25. list_len = len( list )
  26. if list_len != 0:
  27. ran_num = random.randint(0,list_len-1)
  28. return ran_num
  29. else:
  30. return 0;
  31. # fonction pour chercher dans duckduckgo
  32. def srch_engine( list, num ):
  33. if len(list) != 0:
  34. print('ok')
  35. if list not in all_words:
  36. srch = query(list[num], container='dict')
  37. res = srch['related_topics'][0]['text']
  38. return res
  39. else:
  40. srch = query(all_words[num], container='dict')
  41. res = srch['related_topics'][0]['text']
  42. return res
  43. else:
  44. print('pas ok', num, len(all_words))
  45. if num < len(all_words) and num >= 0 :
  46. srch = query(all_words[num], container='dict')
  47. res = srch['related_topics'][0]['text']
  48. return res
  49. else:
  50. syn = wordnet.synsets('computer')
  51. num = random.randint(0,len(syn)-1)
  52. print(num)
  53. res = syn[num].definition()
  54. return res
  55. # fonction pour générer des définitions avec wordnet
  56. def words_gen(list, num):
  57. if len(list) != 0:
  58. print('ok')
  59. if list not in all_words:
  60. syn = wordnet.synsets(list[num])
  61. num = random.randint(0,len(syn)-1)
  62. print(num)
  63. res = syn[num].definition()
  64. return res
  65. else:
  66. syn = wordnet.synsets(all_words[num])
  67. num = random.randint(0,len(syn)-1)
  68. print(num)
  69. res = syn[num].definition()
  70. return res
  71. else:
  72. print('pas ok')
  73. if num < len(all_words) and num >= 0:
  74. syn = wordnet.synsets(all_words[num])
  75. num = random.randint(0,len(syn)-1)
  76. print(num)
  77. res = syn[num].definition()
  78. return res
  79. else:
  80. syn = wordnet.synsets('computer')
  81. num = random.randint(0,len(syn)-1)
  82. print(num)
  83. res = syn[num].definition()
  84. return res
  85. # fonction principale
  86. # ------------------ #
  87. # corps du script > appel des fonctions, lecture de la source
  88. # ------------------ #
  89. with open('input.txt') as f:
  90. sentences = f.read().splitlines()
  91. num = rand_words(sentences)
  92. # phrase de départ
  93. sentence = sentences[num]
  94. sentence.encode('utf-8')
  95. sentence.replace(".", "")
  96. sentence.replace(" ...", "")
  97. # ------------------- #
  98. # niveau 1
  99. # ------------------- #
  100. # 1
  101. print('\n')
  102. print('1. ' + sentence)
  103. # extraction des mots de la phrase de départ
  104. words = words_extract( sentence )
  105. # 1.2 on ajoute à all_words tous les mots trouver
  106. print(words)
  107. if words not in all_words:
  108. all_words.extend(words)
  109. print(all_words)
  110. # 1.3 - génération du nombre pour le choix du mot
  111. ran_num = rand_words( words )
  112. print(ran_num)
  113. # ------------------- #
  114. # niveau 2
  115. # ------------------- #
  116. # 2 - on va chercher une phrase à partir du mot sélectionné
  117. sentence2 = words_gen(words, ran_num)
  118. sentence2.encode('utf-8')
  119. sentence2.replace(".", "")
  120. sentence2.replace(" ...", "")
  121. print('\t 2. ' + sentence2)
  122. # extraction des mots de la phrase 2
  123. words = words_extract( sentence2 )
  124. # 2.2
  125. print(words)
  126. if words not in all_words:
  127. all_words.extend(words)
  128. print(all_words)
  129. # 2.3 - génération du nombre pour le choix du mot
  130. ran_num = rand_words( words )
  131. print(ran_num)
  132. # ------------------- #
  133. # niveau 3
  134. # ------------------- #
  135. # 3 - on va chercher une phrase à partir du mot sélectionné
  136. sentence3 = srch_engine(words, ran_num)
  137. sentence3.encode('utf-8')
  138. sentence3.replace(".", "")
  139. sentence3.replace(" ...", "")
  140. print('\t\t 3. ' + sentence3)
  141. # extraction des mots de la phrase 2
  142. words = words_extract( sentence3 )
  143. # 3.2
  144. print(words)
  145. if words not in all_words:
  146. all_words.extend(words)
  147. print(all_words)
  148. # 3.3 - génération du nombre pour le choix du mot
  149. ran_num = rand_words( words )
  150. print(ran_num)
  151. # ------------------- #
  152. # niveau 4
  153. # ------------------- #
  154. # 4 - on va chercher une phrase à partir du mot sélectionné
  155. sentence4 = words_gen(words, ran_num)
  156. sentence4.encode('utf-8')
  157. sentence4.replace(".", "")
  158. sentence4.replace(" ...", "")
  159. print('\t\t\t 4. ' + sentence4)
  160. # extraction des mots de la phrase 2
  161. words = words_extract( sentence4 )
  162. # 4.2
  163. print(words)
  164. if words not in all_words:
  165. all_words.extend(words)
  166. print(all_words)
  167. # 4.3 - génération du nombre pour le choix du mot
  168. ran_num = rand_words( words )
  169. print(ran_num)
  170. # ------------------- #
  171. # niveau 5
  172. # ------------------- #
  173. # 5 - on va chercher une phrase à partir du mot sélectionné
  174. sentence5 = srch_engine(words, ran_num)
  175. sentence5.encode('utf-8')
  176. sentence5.replace(".", "")
  177. sentence5.replace(" ...", "")
  178. print('\t\t\t\t 5. ' + sentence5)
  179. # extraction des mots de la phrase 2
  180. words = words_extract( sentence5 )
  181. # 5.2
  182. print(words)
  183. if words not in all_words:
  184. all_words.extend(words)
  185. print(all_words)
  186. # 5.3 - génération du nombre pour le choix du mot
  187. ran_num = rand_words( words )
  188. print(ran_num)
  189. # ------------------- #
  190. # niveau 6
  191. # ------------------- #
  192. # 6 - on va chercher une phrase à partir du mot sélectionné
  193. sentence6 = words_gen(words, ran_num)
  194. sentence6.encode('utf-8')
  195. sentence6.replace(".", "")
  196. sentence6.replace(" ...", "")
  197. print('\t\t\t\t\t 6. ' + sentence6)
  198. # extraction des mots de la phrase 2
  199. words = words_extract( sentence6 )
  200. # 6.2
  201. print(words)
  202. if words not in all_words:
  203. all_words.extend(words)
  204. print(all_words)
  205. # 6.3 - génération du nombre pour le choix du mot
  206. ran_num = rand_words( words )
  207. print(ran_num)
  208. # ------------------- #
  209. # écriture du fichier
  210. # ------------------- #
  211. translator = Translator()
  212. translations = translator.translate([sentence, sentence2, sentence3, sentence4, sentence5, sentence6], dest='fr')
  213. i = 0
  214. for translation in translations:
  215. i += 1
  216. #print(i)
  217. # on ouvre un fichier
  218. file = open('output.txt', 'a')
  219. # on l'écrit
  220. file.write('\n\n' + str(i) + '. ' + translation.text )
  221. file.write('\n\n')
  222. file.write('--------------- + ----------------')
  223. file.close()
  224. print('fichier écrit')