123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- # function pour stocker les mots
- import nltk
- from duckduckpy import query
- import random
- from googletrans import Translator
- from nltk.corpus import wordnet
- # ------------------ #
- # en-tête du script > déclaration des fonctions et des variables
- # ------------------ #
- # on crée une liste pour stocker tous les mots
- all_words = []
- sentences = []
- # fonction qui extrait les mots et les stockent dans une liste
- def words_extract( str ):
- tokens = nltk.word_tokenize( str )
- words = []
- for word, pos in nltk.pos_tag(tokens):
- if pos == 'NN':
- words.append(word)
- return words
- # fonction qui génère un nombre aléatoire à partir de la liste de mots pour pouvoir choisir un mot
- def rand_words( list ):
- # test si la longueur du tableau est egal à zero
- list_len = len( list )
- if list_len != 0:
- ran_num = random.randint(0,list_len-1)
- return ran_num
- else:
- return 0;
- # fonction pour chercher dans duckduckgo
- def srch_engine( list, num ):
- if len(list) != 0:
- print('ok')
- if list not in all_words:
- srch = query(list[num], container='dict')
- res = srch['related_topics'][0]['text']
- return res
- else:
- srch = query(all_words[num], container='dict')
- res = srch['related_topics'][0]['text']
- return res
- else:
- print('pas ok', num, len(all_words))
- if num < len(all_words) and num >= 0 :
- srch = query(all_words[num], container='dict')
- res = srch['related_topics'][0]['text']
- return res
- else:
- syn = wordnet.synsets('computer')
- num = random.randint(0,len(syn)-1)
- print(num)
- res = syn[num].definition()
- return res
- # fonction pour générer des définitions avec wordnet
- def words_gen(list, num):
- if len(list) != 0:
- print('ok')
- if list not in all_words:
- syn = wordnet.synsets(list[num])
- num = random.randint(0,len(syn)-1)
- print(num)
- res = syn[num].definition()
- return res
- else:
- syn = wordnet.synsets(all_words[num])
- num = random.randint(0,len(syn)-1)
- print(num)
- res = syn[num].definition()
- return res
- else:
- print('pas ok')
- if num < len(all_words) and num >= 0:
- syn = wordnet.synsets(all_words[num])
- num = random.randint(0,len(syn)-1)
- print(num)
- res = syn[num].definition()
- return res
- else:
- syn = wordnet.synsets('computer')
- num = random.randint(0,len(syn)-1)
- print(num)
- res = syn[num].definition()
- return res
- # fonction principale
- #def main():
- # function pour comparer le mot avec le set
- # ------------------ #
- # corps du script > appel des fonctions, lecture de la source
- # ------------------ #
- with open('input.txt') as f:
- sentences = f.read().splitlines()
- num = rand_words(sentences)
- # phrase de départ
- sentence = sentences[num]
- print(sentence)
- # ------------------- #
- # niveau 1
- # ------------------- #
- # 1
- print('\n')
- print('1. ' + sentence)
- # extraction des mots de la phrase de départ
- words = words_extract( sentence )
- # 1.2 on ajoute à all_words tous les mots trouver
- print(words)
- if words not in all_words:
- all_words.extend(words)
- print(all_words)
- # 1.3 - génération du nombre pour le choix du mot
- ran_num = rand_words( words )
- print(ran_num)
- # ------------------- #
- # niveau 2
- # ------------------- #
- # 2 - on va chercher une phrase à partir du mot sélectionné
- sentence2 = words_gen(words, ran_num)
- print('\t 2. ' + sentence2)
- # extraction des mots de la phrase 2
- words = words_extract( sentence2 )
- # 2.2
- print(words)
- if words not in all_words:
- all_words.extend(words)
- print(all_words)
- # 2.3 - génération du nombre pour le choix du mot
- ran_num = rand_words( words )
- print(ran_num)
- # ------------------- #
- # niveau 3
- # ------------------- #
- # 3 - on va chercher une phrase à partir du mot sélectionné
- sentence3 = srch_engine(words, ran_num)
- print('\t\t 3. ' + sentence3)
- # extraction des mots de la phrase 2
- words = words_extract( sentence3 )
- # 3.2
- print(words)
- if words not in all_words:
- all_words.extend(words)
- print(all_words)
- # 3.3 - génération du nombre pour le choix du mot
- ran_num = rand_words( words )
- print(ran_num)
- # ------------------- #
- # niveau 4
- # ------------------- #
- # 4 - on va chercher une phrase à partir du mot sélectionné
- sentence4 = words_gen(words, ran_num)
- print('\t\t\t 4. ' + sentence4)
- # extraction des mots de la phrase 2
- words = words_extract( sentence4 )
- # 4.2
- print(words)
- if words not in all_words:
- all_words.extend(words)
- print(all_words)
- # 4.3 - génération du nombre pour le choix du mot
- ran_num = rand_words( words )
- print(ran_num)
- # ------------------- #
- # niveau 5
- # ------------------- #
- # 5 - on va chercher une phrase à partir du mot sélectionné
- sentence5 = srch_engine(words, ran_num)
- print('\t\t\t\t 5. ' + sentence5)
- # extraction des mots de la phrase 2
- words = words_extract( sentence5 )
- # 5.2
- print(words)
- if words not in all_words:
- all_words.extend(words)
- print(all_words)
- # 5.3 - génération du nombre pour le choix du mot
- ran_num = rand_words( words )
- print(ran_num)
- # ------------------- #
- # écriture du fichier
- # ------------------- #
- translator = Translator()
- translations = translator.translate([sentence, '\t'+sentence2, '\t\t'+sentence3, '\t\t\t'+sentence4, '\t\t\t\t'+sentence5], dest='fr')
- i = 0
- for translation in translations:
- i += 1
- #print(i)
- # on ouvre un fichier
- file = open('ola#5doc/jeremie_nuel/sources/output.txt', 'a')
- # on l'écrit
- file.write('\n\n' + str(i) + '. ' + translation.text )
- file.write('\n\n')
- file.close()
- print('fichier écrit')
|