infra-ordinaire~20171217-155050.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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. # ------------------ #
  8. # en-tête du script > déclaration des fonctions et des variables
  9. # ------------------ #
  10. # on crée une liste pour stocker tous les mots
  11. all_words = []
  12. sentences = []
  13. # fonction qui extrait les mots et les stockent dans une liste
  14. def words_extract( str ):
  15. tokens = nltk.word_tokenize( str )
  16. words = []
  17. for word, pos in nltk.pos_tag(tokens):
  18. if pos == 'NN':
  19. words.append(word)
  20. return words
  21. # fonction qui génère un nombre aléatoire à partir de la liste de mots pour pouvoir choisir un mot
  22. def rand_words( list ):
  23. # test si la longueur du tableau est egal à zero
  24. list_len = len( list )
  25. if list_len != 0:
  26. ran_num = random.randint(0,list_len-1)
  27. return ran_num
  28. else:
  29. return 0;
  30. # fonction pour chercher dans duckduckgo
  31. def srch_engine( list, num ):
  32. if len(list) != 0:
  33. print('ok')
  34. if list not in all_words:
  35. srch = query(list[num], container='dict')
  36. res = srch['related_topics'][0]['text']
  37. return res
  38. else:
  39. srch = query(all_words[num], container='dict')
  40. res = srch['related_topics'][0]['text']
  41. return res
  42. else:
  43. print('pas ok', num, len(all_words))
  44. if num < len(all_words) and num >= 0 :
  45. srch = query(all_words[num], container='dict')
  46. res = srch['related_topics'][0]['text']
  47. return res
  48. else:
  49. syn = wordnet.synsets('computer')
  50. num = random.randint(0,len(syn)-1)
  51. print(num)
  52. res = syn[num].definition()
  53. return res
  54. # fonction pour générer des définitions avec wordnet
  55. def words_gen(list, num):
  56. if len(list) != 0:
  57. print('ok')
  58. if list not in all_words:
  59. syn = wordnet.synsets(list[num])
  60. num = random.randint(0,len(syn)-1)
  61. print(num)
  62. res = syn[num].definition()
  63. return res
  64. else:
  65. syn = wordnet.synsets(all_words[num])
  66. num = random.randint(0,len(syn)-1)
  67. print(num)
  68. res = syn[num].definition()
  69. return res
  70. else:
  71. print('pas ok')
  72. if num < len(all_words) and num >= 0:
  73. syn = wordnet.synsets(all_words[num])
  74. num = random.randint(0,len(syn)-1)
  75. print(num)
  76. res = syn[num].definition()
  77. return res
  78. else:
  79. syn = wordnet.synsets('computer')
  80. num = random.randint(0,len(syn)-1)
  81. print(num)
  82. res = syn[num].definition()
  83. return res
  84. # fonction principale
  85. #def main():
  86. # function pour comparer le mot avec le set
  87. # ------------------ #
  88. # corps du script > appel des fonctions, lecture de la source
  89. # ------------------ #
  90. with open('input.txt') as f:
  91. sentences = f.read().splitlines()
  92. num = rand_words(sentences)
  93. # phrase de départ
  94. sentence = sentences[num]
  95. print(sentence)
  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. print('\t 2. ' + sentence2)
  118. # extraction des mots de la phrase 2
  119. words = words_extract( sentence2 )
  120. # 2.2
  121. print(words)
  122. if words not in all_words:
  123. all_words.extend(words)
  124. print(all_words)
  125. # 2.3 - génération du nombre pour le choix du mot
  126. ran_num = rand_words( words )
  127. print(ran_num)
  128. # ------------------- #
  129. # niveau 3
  130. # ------------------- #
  131. # 3 - on va chercher une phrase à partir du mot sélectionné
  132. sentence3 = srch_engine(words, ran_num)
  133. print('\t\t 3. ' + sentence3)
  134. # extraction des mots de la phrase 2
  135. words = words_extract( sentence3 )
  136. # 3.2
  137. print(words)
  138. if words not in all_words:
  139. all_words.extend(words)
  140. print(all_words)
  141. # 3.3 - génération du nombre pour le choix du mot
  142. ran_num = rand_words( words )
  143. print(ran_num)
  144. # ------------------- #
  145. # niveau 4
  146. # ------------------- #
  147. # 4 - on va chercher une phrase à partir du mot sélectionné
  148. sentence4 = words_gen(words, ran_num)
  149. print('\t\t\t 4. ' + sentence4)
  150. # extraction des mots de la phrase 2
  151. words = words_extract( sentence4 )
  152. # 4.2
  153. print(words)
  154. if words not in all_words:
  155. all_words.extend(words)
  156. print(all_words)
  157. # 4.3 - génération du nombre pour le choix du mot
  158. ran_num = rand_words( words )
  159. print(ran_num)
  160. # ------------------- #
  161. # niveau 5
  162. # ------------------- #
  163. # 5 - on va chercher une phrase à partir du mot sélectionné
  164. sentence5 = srch_engine(words, ran_num)
  165. print('\t\t\t\t 5. ' + sentence5)
  166. # extraction des mots de la phrase 2
  167. words = words_extract( sentence5 )
  168. # 5.2
  169. print(words)
  170. if words not in all_words:
  171. all_words.extend(words)
  172. print(all_words)
  173. # 5.3 - génération du nombre pour le choix du mot
  174. ran_num = rand_words( words )
  175. print(ran_num)
  176. # ------------------- #
  177. # écriture du fichier
  178. # ------------------- #
  179. translator = Translator()
  180. translations = translator.translate([sentence, '\t'+sentence2, '\t\t'+sentence3, '\t\t\t'+sentence4, '\t\t\t\t'+sentence5], dest='fr')
  181. i = 0
  182. for translation in translations:
  183. i += 1
  184. #print(i)
  185. # on ouvre un fichier
  186. file = open('ola#5doc/jeremie_nuel/sources/output.txt', 'a')
  187. # on l'écrit
  188. file.write('\n\n' + str(i) + '. ' + translation.text )
  189. file.write('\n\n')
  190. file.close()
  191. print('fichier écrit')