from transformers import MarianMTModel, MarianTokenizer

# Modèle et tokenizer pour la traduction français vers allemand
modele_francais_allemand = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-fr-de")
tokenizer_francais_allemand = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-fr-de")

# Modèle et tokenizer pour la traduction allemand vers français
modele_allemand_francais = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-de-fr")
tokenizer_allemand_francais = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-de-fr")

# Texte en français
texte_francais = '''Au sens ordinaire le mot foule représente une réunion d’individus quelconques, quels que soient leur nationalité, leur profession ou leur sexe, et quels que soient aussi les hasards qui les rassemblent.
Au point de vue psychologique, l’expression foule prend une signification tout autre. Dans certaines circonstances données, et seulement dans ces circonstances, une agglomération d’hommes possède des caractères nouveaux fort différents de ceux des individus composant cette agglomération. La personnalité consciente s’évanouit, les sentiments et les idées de toutes les unités sont orientés dans une même direction. Il se forme une âme collective, transitoire sans doute, mais présentant des caractères très nets. La collectivité est alors devenue ce que, faute d’une expression meilleure, j’appellerai une foule organisée, ou, si l’on préfère, une foule psychologique. Elle forme un seul être et se trouve soumise à la loi de l’unité mentale des foules.
Il est visible que ce n’est pas par le fait seul que beaucoup d’individus se trouvent accidentellement côte à côte, qu’ils acquièrent les caractères d’une foule organisée. Mille individus accidentellement réunis sur une place publique sans aucun but déterminé, ne constituent nullement une foule au point de vue psychologique. Pour en acquérir les caractères spéciaux, il faut l’influence de certains excitants dont nous aurons à déterminer la nature.
L’évanouissement de la personnalité consciente et l’orientation des sentiments et des pensées dans un sens déterminé, qui sont les premiers traits de la foule en voie de s’organiser, n’impliquent pas toujours la présence simultanée de plusieurs individus sur un seul point. 
'''

# Tokenisation du texte français
tokens_francais = tokenizer_francais_allemand.encode(texte_francais, return_tensors="pt")

# Traduction français vers allemand
traduction_allemand_ids = modele_francais_allemand.generate(tokens_francais, max_length=10000)
texte_allemand = tokenizer_francais_allemand.decode(traduction_allemand_ids[0], skip_special_tokens=True)

# Tokenisation du texte allemand
tokens_allemand = tokenizer_allemand_francais.encode(texte_allemand, return_tensors="pt")

# Traduction allemand vers français
traduction_francais_ids = modele_allemand_francais.generate(tokens_allemand, max_length=10000)
texte_francais_retour = tokenizer_allemand_francais.decode(traduction_francais_ids[0], skip_special_tokens=True)

# Affichage des résultats
print("Texte en français : ", texte_francais)
print(" ")
print("Texte traduit en allemand : ", texte_allemand)
print(" ")
print("Texte traduit d'allemand à français (retour) : ", texte_francais_retour)
