infra-ordinaire.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  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("(...$)/g", "")
  96. # ------------------- #
  97. # niveau 1
  98. # ------------------- #
  99. # 1
  100. print('\n')
  101. print('1. ' + sentence)
  102. # extraction des mots de la phrase de départ
  103. words = words_extract( sentence )
  104. # 1.2 on ajoute à all_words tous les mots trouver
  105. print(words)
  106. if words not in all_words:
  107. all_words.extend(words)
  108. print(all_words)
  109. # 1.3 - génération du nombre pour le choix du mot
  110. ran_num = rand_words( words )
  111. print(ran_num)
  112. # ------------------- #
  113. # niveau 2
  114. # ------------------- #
  115. # 2 - on va chercher une phrase à partir du mot sélectionné
  116. sentence2 = words_gen(words, ran_num)
  117. sentence2.encode('utf-8')
  118. sentence2.replace("(...$)/g", "")
  119. print('\t 2. ' + sentence2)
  120. # extraction des mots de la phrase 2
  121. words = words_extract( sentence2 )
  122. # 2.2
  123. print(words)
  124. if words not in all_words:
  125. all_words.extend(words)
  126. print(all_words)
  127. # 2.3 - génération du nombre pour le choix du mot
  128. ran_num = rand_words( words )
  129. print(ran_num)
  130. # ------------------- #
  131. # niveau 3
  132. # ------------------- #
  133. # 3 - on va chercher une phrase à partir du mot sélectionné
  134. sentence3 = srch_engine(words, ran_num)
  135. sentence3.encode('utf-8')
  136. sentence3.replace("(...$)/g", "")
  137. print('\t\t 3. ' + sentence3)
  138. # extraction des mots de la phrase 2
  139. words = words_extract( sentence3 )
  140. # 3.2
  141. print(words)
  142. if words not in all_words:
  143. all_words.extend(words)
  144. print(all_words)
  145. # 3.3 - génération du nombre pour le choix du mot
  146. ran_num = rand_words( words )
  147. print(ran_num)
  148. # ------------------- #
  149. # niveau 4
  150. # ------------------- #
  151. # 4 - on va chercher une phrase à partir du mot sélectionné
  152. sentence4 = words_gen(words, ran_num)
  153. sentence4.encode('utf-8')
  154. sentence4.replace("(...$)/g", "")
  155. print('\t\t\t 4. ' + sentence4)
  156. # extraction des mots de la phrase 2
  157. words = words_extract( sentence4 )
  158. # 4.2
  159. print(words)
  160. if words not in all_words:
  161. all_words.extend(words)
  162. print(all_words)
  163. # 4.3 - génération du nombre pour le choix du mot
  164. ran_num = rand_words( words )
  165. print(ran_num)
  166. # ------------------- #
  167. # niveau 5
  168. # ------------------- #
  169. # 5 - on va chercher une phrase à partir du mot sélectionné
  170. sentence5 = srch_engine(words, ran_num)
  171. sentence5.encode('utf-8')
  172. sentence5.replace("(...$)/g", "")
  173. print('\t\t\t\t 5. ' + sentence5)
  174. # extraction des mots de la phrase 2
  175. words = words_extract( sentence5 )
  176. # 5.2
  177. print(words)
  178. if words not in all_words:
  179. all_words.extend(words)
  180. print(all_words)
  181. # 5.3 - génération du nombre pour le choix du mot
  182. ran_num = rand_words( words )
  183. print(ran_num)
  184. # ------------------- #
  185. # niveau 6
  186. # ------------------- #
  187. # 6 - on va chercher une phrase à partir du mot sélectionné
  188. sentence6 = words_gen(words, ran_num)
  189. sentence6.encode('utf-8')
  190. sentence6.replace("(...$)/g", "")
  191. print('\t\t\t\t\t 6. ' + sentence6)
  192. # extraction des mots de la phrase 2
  193. words = words_extract( sentence6 )
  194. # 6.2
  195. print(words)
  196. if words not in all_words:
  197. all_words.extend(words)
  198. print(all_words)
  199. # 6.3 - génération du nombre pour le choix du mot
  200. ran_num = rand_words( words )
  201. print(ran_num)
  202. # ------------------- #
  203. # écriture du fichier
  204. # ------------------- #
  205. translator = Translator()
  206. translations = translator.translate([sentence, sentence2, sentence3, sentence4, sentence5, sentence6], dest='fr')
  207. i = 0
  208. for translation in translations:
  209. i += 1
  210. #print(i)
  211. # on ouvre un fichier
  212. file = open('ola#5doc/jeremie_nuel/sources/output.txt', 'a')
  213. # on l'écrit
  214. file.write('\n\n' + str(i) + '. ' + translation.text )
  215. file.write('\n\n')
  216. file.write('--------------- + ----------------')
  217. file.close()
  218. print('fichier écrit')