« TranslatorBot » : différence entre les versions
(→Code) |
|||
Ligne 6 : | Ligne 6 : | ||
On traduit par bloc d'environ 5000 caractères, en adaptant la taille du bloc selon la ponctuation (afin d'être certain de traduire une phrase complète et non une partie de la phrase). | On traduit par bloc d'environ 5000 caractères, en adaptant la taille du bloc selon la ponctuation (afin d'être certain de traduire une phrase complète et non une partie de la phrase). | ||
Afin d'avoir une meilleure synergie avec d'autres bots, [[TranslatorBot]] prendra la liste des pages à traduire qu'on lui fournit ainsi que la langue choisie. | Afin d'avoir une meilleure synergie avec d'autres bots, [[TranslatorBot]] prendra la liste des pages à traduire qu'on lui fournit ainsi que la langue choisie. Cela permet de garder le contrôle du bot et d'éviter qu'il traduisse tout wikipast. | ||
[[TranslatorBot]] est entièrement modulable grâce à un système de vérification du vocabulaire distinguant les noms propres des noms communs. | [[TranslatorBot]] est entièrement modulable grâce à un système de vérification du vocabulaire distinguant les noms propres des noms communs. |
Version du 30 avril 2018 à 16:51
Description
TranslatorBot a pour but de traduire les pages en plusieurs langues au moyen de la librairie de Python, googletrans.
Méthode de traduction
On traduit par bloc d'environ 5000 caractères, en adaptant la taille du bloc selon la ponctuation (afin d'être certain de traduire une phrase complète et non une partie de la phrase).
Afin d'avoir une meilleure synergie avec d'autres bots, TranslatorBot prendra la liste des pages à traduire qu'on lui fournit ainsi que la langue choisie. Cela permet de garder le contrôle du bot et d'éviter qu'il traduisse tout wikipast.
TranslatorBot est entièrement modulable grâce à un système de vérification du vocabulaire distinguant les noms propres des noms communs.
TranslatorBot crée la page traduite dans un répertoire correspondant à la langue choisie.
Problèmes rencontrés
- Un des premiers problèmes considérés, au vu des pages déjà existantes sur WikiPast, a été la traduction des pages générées ou modifiées par des bots. Celles-ci étant parfois victimes d'actions indésirables d'autres bots, leur contenu n'a aucun sens et, par conséquent, devient impossible à traduire.
→ Le problème s'est réglé de lui-même: la méthode appelée par TranslatorBot garde la partie problématique du texte non modifiée. Il s'agit d'un soucis à considérer par le ManagerBot.
- Un autre problème important consiste en traduction des noms propres. A première vue, les noms propres tels que les noms géographiques doivent être traduits; cependant, les noms des personnes ne sont pas à traduire. Un autre problème se pose ici: comment distinguer un nom de famille d'origine géographique d'un nom géographique?
→ La solution la plus élégante serait de laisser à la prochaine volée d'étudiants la création d'un nouveau bot qui classerait les pages existantes selon leur genre. Ceci permettrait de facilement distinguer les pages de personnalités des autres.
- Comment gérer les pages traduites répertoire non réglé (NR)
- séparation des blocs à traduire NR
→ On sait un peu comment faire
- mise en page ?
- Si on traduit pas les hyperlinks, comment faire la différence entre un hyperlink d'un nom propre qui va vers une page en français et celui qui mène en anglais -> nouveau bot qui classe les pages selon personne ou non
Exemples de Résultats
Ici y aura des résultats.
Évaluation du Bot
temps de traduction
qualité
Programmation
programmation: GitHub, recherche sur des bots, environnement: Anaconda, Jupiter Notebook Python est comme du Java.
Code
import requests from bs4 import BeautifulSoup from googletrans import Translator user='testbot' passw='dhbot2017' baseurl='http://wikipast.epfl.ch/wikipast/' summary='Wikipastbot update' names=['Henri Dunant'] translator = Translator() # login request payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} r1=requests.post(baseurl + 'api.php', data=payload) # login confirm login_token=r1.json()['query']['tokens']['logintoken'] payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) # get edit token2 params3='?format=json&action=query&meta=tokens&continue=' r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) edit_token=r3.json()['query']['tokens']['csrftoken'] edit_cookie=r2.cookies.copy() edit_cookie.update(r3.cookies) # we fetch the text we want to translate for name in names: result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') soup=BeautifulSoup(result.text, "lxml") code='' for primitive in soup.findAll("text"): code += primitive.string translated_text = translator.translate(code[:5000], src='fr', dest='en').text #Create names with english prefix en_name = 'en/' + translator.translate(name, src='fr', dest='en').text
Conclusion et Remerciements
organisation
efficace
flexibilité