IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème API Googletrans [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut Problème API Googletrans
    Bonjour à toutes et tous,

    j'essaye de traduire un fichier xml pour un mod(jeu) qui est en russe. j'ai programmé quelques lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    import codecs
    from googletrans import Translator
     
     
    handle = open("stable_dialogs_new.xml", encoding="windows-1251")
     
    count = 0
    for line in handle:
        if line.startswith('<string id="'):
            pos = len(line)
            apos = line.find('"' )
            print(line[apos+1:pos-3])
        elif line.startswith('<text>'):
            posT = len(line)
            line = line[6:posT-8]
            print(line)
     
            try:
                trad = Translator()
                t = trad.translate(line, src='ru', dest='fr')
            except:
                t = "\n"
            print(t.line)
            count = count + 1
     
    print("Il y a ", count , "id et text dans le fichier xml")
    et j'ai le message suivant:
    sar_first_dialog_0
    Приветствую тебя, брат! Слава Монолиту!
    Traceback (most recent call last):
    File "C:\py4e\test2-xml.py", line 24, in <module>
    print(t.line)
    AttributeError: 'str' object has no attribute 'line'
    je n'arrive pas à voir d’où vient le problème, j'ai testé le type de line avant de rentrer dans Googletrans et j'obtient du 'str'. j'ai fait une recherche sur ce message d'erreur, mais je ne vois la solution.

    Merci de m'éclairer sur ce problème et pour votre aide

    Bien à vous

    Tremens

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Puisque tu obtiens un chaine (str) alors le message est normal.
    Il est provoqué par la ligne 24 (c'est dans le message d'erreur) où tu as t.line.

    La chaine t ne possède pas de propriété line.

    Au passage, python possède des librairies pour traiter du XML.
    Exemple ici : https://python.doctor/page-xml-python-xpath

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par tremens Voir le message
    je n'arrive pas à voir d’où vient le problème
    Il vient de la ligne indiquée (24). Les messages d'erreur Python sont pourtant assez explicites quoi !!! Parce que franchement, je ne vois pas ce qu'on peut faire de plus pour l'indiquer. Peut-être le mettre en rouge fluo...
    Cette ligne, qui est aussi indiquée dans le message, est la suivante: print(t.line). A la simple lecture, je ne sais pas ce qu'est "t" mais ce que je sais, c'est que c'est un objet qui doit contenir un attribut "line".

    Le message d'erreur continue avec "AttributeError: 'str' object has no attribute 'line' ". Ce qui m'apprend donc que "t" est de type "str" (et en effet un "str" ne contient pas d'attribut "line"). Ok je te l'accorde ça c'est de la connaissance que tu n'es pas obligé d'avoir de suite mais tu ferais un simple dir(str) dans une console Python (après-tout, Python c'est aussi possible en mode direct) et ça te donne la liste de tous les attributs et méthodes de l'objet "str", triés par ordre alphabétique (donc quand après avoir lu "join" tu lis "ljust" ça veut dire que "line" n'y est pas, plus la peine de chercher). Ou alors un encore plus simple "line" in dir(str) te dira ce qu'il en est à ce sujet.

    Ne reste qu'à trouver à quel endroit "t" a pu passer d'un truc éventuellement correct à un str incorrect. En remontant en amont dans le code (parce que oui, fatalement le truc n'a pu se produire qu'avant la ligne 24), je tombe sur deux lignes (lignes 21 et 23, donc pas si extraordinairement loin de la ligne incriminée qu'elles auraient pu t'échapper accidentellement si tu avais vraiment cherché au lieu de te précipiter sur un forum à la première mini-difficulté pour faire chercher les autres à ta place)
    • t = trad.translate(line, src='ru', dest='fr')
    • t = "\n"

    Pour la première je ne sais pas (il faudrait regarder la doc de Translator qui doit expliquer ce que renvoie la fonction translate()) mais en revanche, pour la seconde, tout le monde (toi le premier) peut parfaitement voir que ça c'est du str pur et dur.

    Voilà, sans même tester ton code, juste en lisant le message d'erreur et ce que tu avais écrit ; et en réfléchissant. Ce que tu aurais parfaitement pu faire tout seul.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    trad = Translator()
    try:
    	t = trad.translate(line, src='ru', dest='fr')
    except:
    	print()
    else:
    	print(t.line)
    Et à mon avis, créer "trad" avant la boucle serait un plus.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Merci pour vos retour et source d'informations sur le xml.

    Je sais bien que mon problème ne viens pas de t = "\n".

    Même si je mets print(t.text), ça ne fonctionne pas. (propriété de t)

    La phrase qui rentre est bien en str, en revanche la sortie quid. j'ai essayé avec une petite phrase directement et j'ai une erreur.

    Je vais fouiller plus en détail cet api googletrans.

    Je reviendrai vers avec la solution...

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tremens Voir le message
    Je sais bien que mon problème ne viens pas de t = "\n".
    Pourtant, de mon point de vue, c'est là, c'est le seul endroit où il y a un str. De toute façon afficher t.line après avoir potentiellement traité l'instruction t="\n" est au mieux une probable source de bug.

    Citation Envoyé par tremens Voir le message
    La phrase qui rentre est bien en str, en revanche la sortie quid. j'ai essayé avec une petite phrase directement et j'ai une erreur.
    Et tu as essayé print(type(t)) pour voir "quoi" est t? C'est quand-même la solution de base. Ensuite un print("text" in dir(t)) suivi d'un print("line" in dir(t)) te diront directement ce que tu veux savoir (tout ça bien évidemment dans ce qui correspond au "else" de mon dernier exemple parce que dans le "except" ça servira évidemment à rien, là on sait ce qu'est "t").

    Après on peut aller un peu plus loin. Déjà remplacer except par except Exception as e puis print(e) te dira pourquoi trad.translate() ne fonctionne pas.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Merci pour ton aide précieuse.

    Après recherche, il apparait que je n'utilise pas l'API officielle mais celle qui dérive d'AJAX, enfin c'est pas très claire pour moi.

    si j'ai bien compris je crois que j'ai un problème de formatage de mon entrée str dans l'API.

    J'ai testé tes dernières recommandations, mais comme il ne sort rien de t, je n'ai pas d'info.

    mon dernier test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    from googletrans import Translator
     
    translator = Translator()
     
    text = 'Слава Монолиту! Приветствую нашего нового брата!'
     
    result = translator.translate(text, src='ru', dest='fr')
     
    print(type(result))
    print("text" in dir(result))
    et la réponse console:
    C:\py4e>test3-xml.py
    Traceback (most recent call last):
    File "C:\py4e\test3-xml.py", line 7, in <module>
    result = translator.translate(text, src='ru', dest='fr')
    File "C:\Users\Mou\AppData\Local\Programs\Python\Python310\lib\site-packages\googletrans\client.py", line 182, in translate
    data = self._translate(text, dest, src, kwargs)
    File "C:\Users\Mou\AppData\Local\Programs\Python\Python310\lib\site-packages\googletrans\client.py", line 78, in _translate
    token = self.token_acquirer.do(text)
    File "C:\Users\Mou\AppData\Local\Programs\Python\Python310\lib\site-packages\googletrans\gtoken.py", line 194, in do
    self._update()
    File "C:\Users\Mou\AppData\Local\Programs\Python\Python310\lib\site-packages\googletrans\gtoken.py", line 62, in _update
    code = self.RE_TKK.search(r.text).group(1).replace('var ', '')
    AttributeError: 'NoneType' object has no attribute 'group'
    ,
    Mais quid de la façon de formater mon entrée, quel module lié à googletrans je dois installer?
    j'ai lu dans mes recherches, l'api rest! Elle formate la requête au format JSON... je crois.

    Je continue de chercher, et merci encore

    Tremens

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tremens Voir le message
    J'ai testé tes dernières recommandations, mais comme il ne sort rien de t, je n'ai pas d'info.
    Si, il ya des infos !!
    L'erreur se situe ligne 7 result = translator.translate(text, src='ru', dest='fr') (évidemment c'est l'action principale de ton test). Mais cette erreur hérite des diverses erreurs survenues dans le module googletrans (où tu n'as pas la main) qui remontent au final dans ton code.
    De là, on peut formuler deux hypothèses
    1. ta façon d'appeler translator.translate() ne correspond pas à celle qu'il faut employer (et là, seule la doc poura te le dire)
    2. le module est foireux

    Je viens de recopier ton dernier test, pareil pour moi. Mais pire, je vais sur leur site (je pense qu'il s'agit de celui sur pypi) et je tape leur propre exemple...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from googletrans import Translator
    translator = Translator()
    translator.translate('안녕하세요.')
    translator.translate('안녕하세요.', dest='ja')
    translator.translate('veritas lux mea', src='la')
    ... et là, même erreur !!!
    A partir de là, on ne peut que partir sur l'hypothèse que ce truc est foireux...

    Pour ton histoire d'ajax, c'est pas ça. Ce que la page dit (https://pypi.org/project/googletrans), c'est que ce module fait appel à une API de google pour traduire. En résumé, le module ne fait qu'appeler des outils qui sont chez google

    Citation Envoyé par tremens Voir le message
    Mais quid de la façon de formater mon entrée, quel module lié à googletrans je dois installer?
    Yapas. Après, si ton truc à traduire n'est pas très long tu peux aller sur DeepL (je le préfère à celui de google) tenter le copier/coller.

    PS: on a quitté le domaine du souci originel, à savoir pourquoi print(t.line) ne marche pas (réponse, parce que translate() ne marche pas donc tu rentres dans le "except" dans lequel "t" est une string et ne contient pas d'attribut "line"). Il est intéressant de noter que si tu avais écrit ton code correctement (comme mon exemple), ça n'aurait pas mieux fait fonctionner translate() mais n'ayant pas d'erreur d'exécution tout en entrant à chaque fois dans le "except", tu aurais eu un document entièrement vide à la sortie
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Merci Sve@r pour le temps que tu as passé.

    J'abandonne goolgetrans API, je regarder du côté de deepl et de yandex.

    J'ai beaucoup de fichier à faire... je vais continuer dans cette voie. Je reviendrai...

    Bonne soirée

    Tremens

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tremens Voir le message
    je vais regarder du côté de deepl et de yandex.
    yandex il est vieux (2019). J'ai trouvé translators (08/2022).

    Après installation, j'ai tapé leur premier exemple...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import translators as ts
     
    wyw_text = '季姬寂,集鸡,鸡即棘鸡。棘鸡饥叽,季姬及箕稷济鸡。'
    chs_text = '季姬感到寂寞,罗集了一些鸡来养,鸡是那种出自荆棘丛中的野鸡。野鸡饿了唧唧叫,季姬就拿竹箕中的谷物喂鸡。'
    html_text = '''
    <!DOCTYPE html>
    <html>
    <head>
        <title>这是标题</title>
    </head>
    <body>
    <p>这是文章《父亲写的散文诗》</p>
    </body>
    </html>
    '''
     
    ## language
    # input languages
    print(ts.google(wyw_text, to_language='fr')) # default: from_language='auto', to_language='en'
    print(ts.google(chs_text, to_language='fr')) # default: from_language='auto', to_language='en'
    print(ts.google(html_text, to_language='fr')) # default: from_language='auto', to_language='en'
    ... qui a parfaitement (qui a correctement) tout traduit (et suis en train de tester les différents modules, ts.yandex() traduit mieux que ts.google())
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    waouh Sve@r tu m'impressionnes, merci pour toutes ses bonnes infos. Je regarderai tout ça demain et je reviendrai vers toi

    Comment ai-je pu passer à côté de translate.... , il parait pas mal du tout ! Et en plus tu as une multitude de traducteurs...

    Pour moi le mieux c'est Deepl, Yandex et googletrans en dernier car moins bon. Cependant, googletrans permet de traduire du texte avec les balises xml. Je n'ai pas testé Yandex mais je sais que Deepl n'aime pas les balises.

    Pour Deepl il faut rentrer une CB... et c'est pour cela que je ne l'ai pas pris.

    Je ne sais pas ce que vaut l'API officiel de Google, peut-être quelle est mieux....

    Merci encore et bonne soirée

    tremens

  11. #11
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Hello,

    Citation Envoyé par Sve@r Voir le message
    Si, il ya des infos !!
    L'erreur se situe ligne 7 result = translator.translate(text, src='ru', dest='fr') (évidemment c'est l'action principale de ton test). Mais cette erreur hérite des diverses erreurs survenues dans le module googletrans (où tu n'as pas la main) qui remontent au final dans ton code.
    Il faut vraiment que je fasse plus d'attention à ces messages d'erreurs !

    Bon je viens de tester translator
    Avec Deepl :
    C:\py4e>test2-xml.py
    Using state Auvergne-Rhone-Alpes server backend.
    sar_first_dialog_0
    Приветствую тебя, брат! Слава Монолиту!
    <class 'str'>
    Salutations, frère ! Vive le Monolithe !
    sar_first_dialog_1
    И тебе привет! Есть дело ко мне?
    <class 'str'>
    Bonjour à toi aussi ! Tu as quelque chose pour moi ?
    sar_first_dialog_2
    Брат, тебя ждёт Настоятель. Он поведает тебе о наших правилах и заповедях. Слушай его и вникай во всё. Вот, возьми, для тебя специально приготовлено: оружие и снаряжение. Да пребудет с тобой сила Монолита!
    <class 'str'>
    Frère, le Gardien vous attend. Il vous parlera de nos règles et de nos commandements. Écoutez-le et absorbez tout. Tenez, prenez ça, c'est spécialement préparé pour vous : armes et équipements. Que le pouvoir du Monolithe soit avec vous !
    sar_first_dialog_3
    Спасибо, уже иду, брат.
    <class 'str'>
    Merci, je suis en route, mon frère.
    monolit_repair_0
    Наставник, мне надо кое что отремонтировать.

    monolit_repair_1
    Да уж, наши враги не дремлют, давай, посмотрю.
    Il a traduit les 4 premières et puis plus rien ensuite. J'ai dans ce fichier 1610 balises <text></text> à traduire. Mais c'est un bon début.
    peut-être faut-il mettre une tempo entre chaque ligne à traduire...?

    Ensuite Yandex:
    C:\py4e>test2-xml.py
    Using state Auvergne-Rhone-Alpes server backend.
    sar_first_dialog_0
    Приветствую тебя, брат! Слава Монолиту!

    sar_first_dialog_1
    И тебе привет! Есть дело ко мне?

    sar_first_dialog_2
    Брат, тебя ждёт Настоятель. Он поведает тебе о наших правилах и заповедях. Слушай его и вникай во всё. Вот, возьми, для тебя специально приготовлено: оружие и снаряжение. Да пребудет с тобой сила Монолита!

    sar_first_dialog_3
    Спасибо, уже иду, брат.

    monolit_repair_0
    Наставник, мне надо кое что отремонтировать.
    La, rien du tout !
    mon code avec yandex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        try:
                #line2 = ts.deepl(line, from_language='ru', to_language='fr')
                line2 = ts.yandex(line, from_language='ru', to_language='fr')
                print(line2)
            except:
                print()
    Voilà je continue le tour des traducteurs avec ce module translators

    Bonne journée à toutes et tous

    Tremens

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tremens Voir le message
    peut-être faut-il mettre une tempo entre chaque ligne à traduire...?
    Peut-être créer une fonction qui traduit une seule ligne (donc la fonction ouvre le traducteur, traduit la ligne puis le referme) et tu appelles la fonction pour chaque ligne. Ainsi le traducteur lui ne sera pas surchargé (pour lui c'est une seule ligne).

    Citation Envoyé par tremens Voir le message
    Ensuite Yandex: La, rien du tout !
    Je t'ai dit, si tu veux savoir pourquoi, tu remplaces except: print() par except Exception as e: print(e) et tu auras le message d'erreur associé

    Citation Envoyé par tremens Voir le message
    Voilà je continue le tour des traducteurs avec ce module translators
    Au lieu de recopier chaque ligne avec un traducteur différent, comme ton exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #line2 = ts.deepl(line, from_language='ru', to_language='fr')
    line2 = ts.yandex(line, from_language='ru', to_language='fr')
    tu écris ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fct=ts.deepl
    line2 = fct(line, from_language='ru', to_language='fr')
    Ensuite tu remplaces juste "deepl" par le traducteur que tu veux tester. Et tu peux même le faire dans une boucle
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for fct in (ts.deepl, ts.yandex, ts.google, ..., ...):
    	try:
    		line2 = fct(line, from_language='ru', to_language='fr')
    	except Exception as e:
    		print(fct, e)
    	else:
    		print(line2)
    # for
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Je t'ai dit, si tu veux savoir pourquoi, tu remplaces except: print() par except Exception as e: print(e) et tu auras le message d'erreur associé
    Oui voilà le retour de l'erreur
    C:\py4e>test2-xml.py
    Using state Auvergne-Rhone-Alpes server backend.
    sar_first_dialog_0
    Приветствую тебя, брат! Слава Монолиту!
    403 Client Error: Forbidden for url: https://translate.yandex.com/
    sar_first_dialog_1
    И тебе привет! Есть дело ко мне?
    403 Client Error: Forbidden for url: https://translate.yandex.com/
    sar_first_dialog_2
    Certainement un problème de clé/ID, je vais fouillez chez yandex

    Citation Envoyé par Sve@r Voir le message
    Peut-être créer une fonction qui traduit une seule ligne (donc la fonction ouvre le traducteur, traduit la ligne puis le referme) et tu appelles la fonction pour chaque ligne. Ainsi le traducteur lui ne sera pas surchargé (pour lui c'est une seule ligne).
    Normalement mon code envoie une ligne à traduire à chaque fois

    Citation Envoyé par Sve@r Voir le message

    Au lieu de recopier chaque ligne avec un traducteur différent, comme ton exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #line2 = ts.deepl(line, from_language='ru', to_language='fr')
    line2 = ts.yandex(line, from_language='ru', to_language='fr')
    tu écris ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fct=ts.deepl
    line2 = fct(line, from_language='ru', to_language='fr')
    Ensuite tu remplaces juste "deepl" par le traducteur que tu veux tester. Et tu peux même le faire dans une boucle
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for fct in (ts.deepl, ts.yandex, ts.google, ..., ...):
    	try:
    		line2 = fct(line, from_language='ru', to_language='fr')
    	except Exception as e:
    		print(fct, e)
    	else:
    		print(line2)
    # for
    Merci pour les tuyaux, je vais les mettre dans mon code.

    Tremens

  14. #14
    Invité
    Invité(e)
    Par défaut
    Salut !

    Je m'amuse à essayer d'utiliser Google Translate, pas facile... Je bute sur le scrapping, si quelqu'un d'autre veut s'amuser :

    #J'ai installé chromedriver.exe sur mon bureau Windows, à adapter en fonction de la config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.chrome.service import Service
    from subprocess import CREATE_NO_WINDOW
    #import time
     
    url = 'https://translate.google.com/?source=gtx&sl=auto&tl=fr&text='
    end = '&op=translate'
     
    YOUR_TEXT = '''Hi guys !\nMy name is toto !'''
    YOUR_TEXT = YOUR_TEXT.replace(' ', '%20')
    YOUR_TEXT = YOUR_TEXT.replace('\n', '%0A')
     
    link = url+YOUR_TEXT+end
     
    service = Service(r'chromedriver.exe')
    service.creationflags = CREATE_NO_WINDOW
     
    chrome_options = Options()
    chrome_options.add_argument('--headless')
     
    driver = webdriver.Chrome('chromedriver', options=chrome_options, service=service)
     
    driver.get(link)
    #time.sleep(1)
    buttons = driver.find_elements(By.XPATH, "//*[contains(text(), 'Tout accepter')]")
    for button in buttons:
        try:
            button.click()
        except:
            pass
    #time.sleep(1)
    source = driver.page_source

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    pas facile... Je bute sur le scrapping
    YOUR_TEXT = '''Hi guys !\nMy name is toto !'''
    C'est normal, c'est parce que tu ne t'appelles pas toto...

    Citation Envoyé par LeNarvalo Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    YOUR_TEXT = YOUR_TEXT.replace(' ', '%20')
    YOUR_TEXT = YOUR_TEXT.replace('\n', '%0A')

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (x, y) in (
    	(' ', '%20'),
    	('\n', '%0a'),
    ): YOUR_TEXT = YOUR_TEXT.replace(x, y)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Avec google, j'arrive à traduire l'ensemble du fichier!
    solomon_case_dialog_0
    Слушаю тебя, брат.
    Je t'écoute, frère.
    solomon_case_dialog_1
    Брат, ты проявил себя с хорошей стороны, я вижу - ты парень смышлёный. Есть спецзадание для тебя.
    Frère, vous vous êtes montré du bon côté, je vois - vous êtes un gars intelligent. Il y a une tâche spéciale pour vous.
    solomon_case_dialog_2
    Говори Соломон, я рад что мне доверяют, особенно, такой мастер, как ты.
    Parlez Salomon, je suis content qu'ils me fassent confiance, en particulier, un maître comme vous.
    solomon_case_dialog_3
    Значит так брат, когда мы сюда только-только пришли, здесь еще не было так пустынно. То там, то здесь можно было встретить отряды военных сталкеров. Кое-как нам удалось их выпроводить отсюда, ох, и много мы тогда братьев потеряли! Но, Слава Монолиту, мы выстояли, и враги повержены. От одного нашего брата, кстати, бывшего спецназовца, участвовавшего в спецоперации, мы узнали, что они искали документацию, которую один учёный, работавший до Большого Взрыва (Дородин, кажется его фамилия), аккуратно собрал и сложил в 3 несгораемых кейса. Найти документы они так и не смогли... Мы сумели отследить местонахождение 2-х кейсов, координаты скинул тебе на ПДА, а третий как сквозь землю провалился. Ну, так вот, боец, слушай приказ: перерой всю западную часть Чаэс-2, но найди 3 кейса. Единственное, что ещё могу сказать, это то, что слабый сигнал, возможно именно от третьего кейса, идёт откуда то с внешних верхних уровней Саркофага, примерное место я обозначу на твоём ПДА. Но, дело в том, что на верхние уровни попасть можно только через аномалию-телепорт, а мои бойцы в него лезть боятся.
    Donc, le frère, quand nous venons ici, n'était pas si désert ici. Là et ici, il a été possible de trouver des détachements de harceleurs militaires. D'une manière ou d'une autre, nous avons réussi à les sortir d'ici, oh, puis nous avons perdu beaucoup de frères! Mais, la gloire du monolithe, nous avons survécu et les ennemis ont été vaincus. Depuis l'un de notre frère, en passant, les anciennes forces spéciales qui ont participé à une opération spéciale, nous avons appris qu'ils cherchaient une documentation qu'un scientifique qui travaillait avant la grande explosion (Dorodin, son nom de famille) a doucement recueilli et plié en 3 étuis ignifuges. Ils ne pouvaient pas trouver de documents ... nous avons réussi à suivre le sort de 2 cas, a jeté les coordonnées sur le PDA, et le troisième a échoué à travers le sol. Eh bien, donc, combattant, écoutez l'ordre: marquer toute la partie ouest du CEC-2, mais trouvez 3 cas. La seule chose que je peux dire, c'est qu'un signal faible, peut-être du troisième cas, vient de quelque part des niveaux supérieurs externes du sarcophage, je désignerai l'endroit approximatif de votre PDA. Mais, le fait est que vous ne pouvez accéder aux niveaux supérieurs que par une anomalie-téleport, et mes combattants ont peur d'y grimper.
    solomon_case_dialog_4
    Соломон, я cделаю всё что смогу и даже больше, да пребудет со мной сила и разум Монолита. Да поможет мне вера моя, я готов!
    Salomon, je ferai tout ce que je peux et encore plus, que la force et l'esprit du monolithe soient avec moi. Que ma foi m'aide, je suis prêt!
    solomon_case_est_0
    Слава Монолиту, я не подвел тебя, Соломон.
    Gloire au monolithe, je ne vous ai pas laissé tomber, Salomon.
    solomon_case_est_1
    Ты нашел их?
    Les avez-vous trouvés?
    solomon_case_est_2
    Да Соломон, вот они - все три.
    Oui, Salomon, les voici - tous les trois.
    Это очень ценная информация, молодец! Вот, возьми, ты заслужил.
    Ce sont des informations très précieuses, bravo! Ici, prenez, vous le méritez.
    Il y a 1610 id et text dans le fichier xml
    3633s pour traduire les 1610 lignes
    C:\py4e>
    Bon la qualité de traduction de Google n'est pas terrible

    Je vais essayer Youdao...

    Tremens

  17. #17
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Pour Youdao, il ne prend pas du russe vers le français. Je n'ai pu traduire que du russe vers l'anglais. la traduction me parait bonne, par rapport à google!
    enc_zone_artifact_armor_4
    Этот абсолют снижает повреждения от агрессивных химических сред, добавляет здоровья и очень хорошо экранирует пси-излучение! Еще одним, довольно нужным качеством абсолюта является то, что у человека, носящего его на поясе, изменяется структура кожи. Она, не теряя эластичности, грубеет, в итоге повышается стойкость к огнестрельным ранениям. Отрицательным свойством является увеличение потребности в еде.
    This absolute reduces damage from aggressive chemical environments, adds health and very well shielded psi radiation! Another rather necessary quality of absolute is that the person wearing it on the belt changes the skin structure. It does not lose its elasticity, it is rude, as a result increased resistance to gunshot wounds. The negative characteristic is the increased need for food.
    af_simbion
    "Симбион"
    "Symbion"
    enc_zone_artifact_simbion
    Уникальный модификат "Симбион" получают путём совместной трансмутации в аномалии "Холодец" сразу четырёх артефактов. "Медуза", "Капля", "Кровь камня" и "Колючка", конвертируемые в единое целое, дают носящему его на поясе человеку довольно чувствительную экранировку от пси-излучения и выводят радиацию. Но при этом "Симбион" усиливает кровотечение, снижает выносливость и стойкость к разрыву.
    The unique modification "symbion" is obtained by joint transmutation into the anomaly "cold" of four artifacts. "Medusa "," drop ", "blood of stone" and "thorn ", convertible into a single unit, give the person wearing it on his belt a rather sensitive screen from psi radiation and produce radiation. But at the same time simbion intensifies bleeding, reduces endurance and resistance to rupture.
    Il y a 56 id et text dans le fichier xml
    nom du fichier traduit : string_table_amk_arts_desc.xml
    Durée de la traduction en heure : 0.1336446330944697
    La même avec Google;
    enc_zone_artifact_armor_4
    Этот абсолют снижает повреждения от агрессивных химических сред, добавляет здоровья и очень хорошо экранирует пси-излучение! Еще одним, довольно нужным качеством абсолюта является то, что у человека, носящего его на поясе, изменяется структура кожи. Она, не теряя эластичности, грубеет, в итоге повышается стойкость к огнестрельным ранениям. Отрицательным свойством является увеличение потребности в еде.
    This Absolute reduces damage from aggressive chemical media, adds health and very well shields psi radiation! Another, quite necessary quality of the Absolute is that a person who wears it on a belt changes the structure of the skin. She, without losing elasticity, is rude, as a result, resistance to gunshot wounds increases. A negative property is an increase in the need for food.
    af_simbion
    "Симбион"
    "Simbion"
    enc_zone_artifact_simbion
    Уникальный модификат "Симбион" получают путём совместной трансмутации в аномалии "Холодец" сразу четырёх артефактов. "Медуза", "Капля", "Кровь камня" и "Колючка", конвертируемые в единое целое, дают носящему его на поясе человеку довольно чувствительную экранировку от пси-излучения и выводят радиацию. Но при этом "Симбион" усиливает кровотечение, снижает выносливость и стойкость к разрыву.
    The unique Simbion modification is obtained by joint transmutation in the anomaly of "Belts" at once four artifacts. “Medusa”, “drop”, “blood of stone” and “thorns”, converted into a single whole, give a rather sensitive shield to psi radiation on a person and derive radiation. But at the same time, the Symbion enhances bleeding, reduces endurance and resistance to rupture.
    Il y a 56 id et text dans le fichier xml
    nom du fichier traduit : string_table_amk_arts_desc.xml
    Durée de la traduction : 0.015288994246058995
    Bon j'arrête de polluer le forum avec mes essais de traduction... Désolé

    Tremens

  18. #18
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tremens Voir le message
    Pour Youdao, il ne prend pas du russe vers le français. Je n'ai pu traduire que du russe vers l'anglais
    Bah, t'as qu'à rajouter une couche anglais-français...
    Ca me rappelle le film "le magnifique", avec Belmondo. Dans le film ils ont fait prisonnier un terroriste de je sais plus quelle nationalité (on va dire russe) mais ils n'ont pas d'interprète russe-français, seulement un interprète russe-yougoslave. Ensuite ils rajoutent un interprète yougoslave-bulgare, puis un interprèet bulgare-polonais puis enfin un interprète polonais-français. Et le temps que chaque question soit traduite et traverse la chaine ils n'ont le temps que poser 3 questions style "quel est ton nom" etc puis le prisonnier (qui avait été blessé) meurt...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Invité
    Invité(e)
    Par défaut
    @Sve@r Ah la la ! Heureusement que je suis là pour apporter un peu de sérieux sur ce forum...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.chrome.service import Service
    from subprocess import CREATE_NO_WINDOW
    #import time
     
    url = 'https://translate.google.com/?source=gtx&sl=auto&tl=fr&text='
    end = '&op=translate'
     
    YOUR_TEXT = '''Hi guys !\nMy name is toto !'''
    YOUR_TEXT = YOUR_TEXT.replace(' ', '%20')
    YOUR_TEXT = YOUR_TEXT.replace('\n', '%0A')
     
    link = url+YOUR_TEXT+end
     
    service = Service(r'chromedriver.exe')
    service.creationflags = CREATE_NO_WINDOW
     
    chrome_options = Options()
    chrome_options.add_argument('--headless')
     
    driver = webdriver.Chrome('chromedriver', options=chrome_options, service=service)
     
    driver.get(link)
    #time.sleep(1)
    buttons = driver.find_elements(By.XPATH, "//*[contains(text(), 'Tout accepter')]")
    for button in buttons:
        try:
            button.click()
        except:
            pass
    #time.sleep(1)
    source = driver.page_source
    texts = source.split('</textarea')
    for text in texts[:-1]:
        index = text[::-1].index('>')
        print(text[-index:])
    driver.quit()
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Hi guys !
    My name is toto !
    Salut les gars !
    Mon nom est toto!
    Dernière modification par Invité ; 15/10/2022 à 17h18.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème api Windows
    Par abdennour bouaicha dans le forum Windows
    Réponses: 4
    Dernier message: 06/05/2009, 12h49
  2. Problème API JAVAX.COMM
    Par dude78 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 10/02/2009, 09h33
  3. Problème API snmp
    Par kuribo dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 02/04/2008, 09h45
  4. [VBA-E] Problème API FindWindowA
    Par stos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/01/2007, 16h36
  5. [Win2000]Problème API, DLL ou... ?
    Par izacalva dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 24/06/2006, 21h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo