programminghistorian / ph-submissions

The repository and website hosting the peer review process for new Programming Historian lessons
http://programminghistorian.github.io/ph-submissions
136 stars 112 forks source link

Traduction en français : Normaliser des données textuelles avec Python #564

Open marie-flesch opened 1 year ago

marie-flesch commented 1 year ago

Le Programming Historian en français a reçu une proposition de traduction de la leçon Normalizing Textual Data with Python de la part de Fantine Horvath (@Cosette-chan).

Nous avons convenu d'un délai de 3 mois pour l'envoi de la traduction, qui aurait ainsi lieu aux alentours du 9 aout.

Nous confierons ensuite le suivi éditorial de cette traduction à une rédactrice ou à un rédacteur du Programming Historian en français.

charlottejmc commented 10 months ago

Bonjour, @marie-flesch.

Vous trouverez les fichiers ici :

Vous pouvez parcourir l’aperçu de la soumission ici :


marie-flesch commented 10 months ago

Merci @charlottejmc! La leçon va donc prochainement être confiée à un rédacteur ou rédactrice.

marie-flesch commented 10 months ago

C'est donc Matthias (@matgille ) qui sera le rédacteur en charge du suivi de cette traduction :)

matgille commented 9 months ago

Bonjour à tout le monde, bonjour @Cosette-chan et merci pour votre travail !

Je suis en train de chercher une personne pour l'évaluation de la traduction, je reviendrai ici sous peu.

En attendant, un travail préliminaire peut être effectué sur le texte traduit. Il reste encore un certain nombre de coquilles (inversions de lettres essentiellement) et d'erreurs mineures (confusions participe passé / infinitif). Je vous recommande d'utiliser un correcteur orthographique afin de les identifier et les corriger.

Il y a une petite coquille dans la phrase suivante:

Si vous n'avez pas les fichiers de la leçon précédente cités ci-dessus, vous pouvez les télécharger ici : [`.zip`](https://github.com/programminghistorian/jekyll/blob/gh-pages/assets/python-lessons3.zip).

Le nom du fichier n'apparaît que par son extension, il faudrait corriger et ajouter le nom complet du fichier.

Plus bas, paragraphe 21, je vois une imprécision à corriger dans la traduction d'une ligne de code et de son commentaire: text = obo.stripTags(html).lower() #add the string method here. string method, qui vient commenter le code lower(), doit être traduit comme méthode applicable à une chaîne de caractères (comme cela est bien traduit plus haut par ailleurs).

Par ailleurs, et cela est plus difficile à gérer car c'est le fait de la leçon originelle, certains éléments du texte original mes semblent faux ou du moins imprécis. Au paragraphe 19 du texte anglais par exemple, le commentaire dans le bloc suivant:

# Given a text string, remove all non-alphanumeric
# characters (using Unicode definition of alphanumeric).

def stripNonAlphaNum(text):
    import re
    return re.compile(r'\W+', re.UNICODE).split(text)

Décrit le code de façon trop imprécise. La fonction en question opère une scission d'une chaîne de caractère en liste selon un certain nombre de délimiteurs (tous les caractères ou suites de caractères non alphanumériques), caractères délimiteurs qui sont de fait supprimés. Je recommande donc de modifier le commentaire pour qu'il reflète le fonctionnement précis de la fonction (en indiquant que l'effet est effectivement de supprimer tous les caractères alphanumériques).

Enfin, il y a une dernière imprécision dans le texte original, quelques lignes plus bas:

The regular expression in the above code is the material inside the string, in other words `W+`.

La traduction proposée est très bien (L'expression régulière dans ce code est le contenu de la chaine de caractères, autrement dit W+.) mais le texte original oublie le caractère \ qui fait de \W+ un metacaractère désignant n'importe quel caractère ou suite de caractères non alphanumériques (sans cela, l'expression ne ciblerait que les lettres ou suites de lettres W majuscule). Il est donc important d'ajouter la barre oblique inversée \.

Je reviens vers vous dès que j'ai trouvé un.e relecteurice ! Il semblerait aussi qu'il faille discuter de la question de la tokénisation en français, nous verrons cela dans un second temps = ).

Cordialement,

Matthias Gille Levenson

anisa-hawes commented 9 months ago

Bonjour @Cosette-chan,

I've sent you an invitation to join our ph-submissions repository as an outside collaborator.

We invite you to make direct adjustments to the file, which is here: /en-cours/traductions/normaliser-donnees-textuelles-python.md.

We don't use the Pull Request system during this Phase of the workflow, rather authors can make direct changes to their lesson. GitHub's agility for capturing successive versions of a file is a great asset to us in this Phase: Matthias will be able to review exactly what has been edited in the file's commit history.

Please ask me if you have any questions or uncertainties – I'm more than happy to help.

Thank you, Anisa

matgille commented 8 months ago

Bonjour @Cosette-chan,

Avez-vous pu prendre connaissance des messages précédents et de mes remarques préliminaires ?

Cordialement,

Matthias Gille Levenson

marie-flesch commented 5 months ago

Hi @anisa-hawes, it seems that @Cosette-chan doesn't have write access to edit her translation :) Could you provide it to her?

anisa-hawes commented 5 months ago

Hello @marie-flesch.

I've added @Cosette-chan as a collaborator with write permissions on this repository. 🙂

marie-flesch commented 5 months ago

Thank you so much Anisa!

matgille commented 5 months ago

Bonjour @Cosette-chan,

Avez-vous pu reprendre la leçon et les suggestions indiquées plus haut ?

Cosette-chan commented 5 months ago

Bonjour,

Oui, j'ai presque terminé, j'essaye de rechercher les coquilles au passage, je l'enverrai demain normalement.

Encore désolée pour le délai.

Cosette-chan commented 5 months ago

Bonjour @matgille,

J'ai modifié les éléments que vous aviez souligné, j'ai également fait la chasse aux coquilles. Je me tiens à votre disposition pour tout autre soucis.

matgille commented 5 months ago

Bonjour @Cosette-chan,

Merci de vos corrections. Je vais contacter les évaluateurs dans le courant de la semaine prochaine, et reviendrai vers vous après les premiers retours.

Cordialement,

matgille commented 4 months ago

Bonjour à toustes,

J'assume donc le rôle de rédacteur en charge du suivi du processus de l'évaluation de la traduction de @Cosette-chan sur la normalisation de données textuelles en python.

Voici un rappel des liens vers les deux documents:

La première évaluation sera faite par Marianne Reboul (@OdysseusPolymetis), que je remercie ici; je devrais avoir une réponse sous peu quant à la deuxième personne qui évaluera la traduction.

Les relecteurs et relectrices peuvent utiliser la numérotation des lignes fournie dans l'aperçu pour organiser leurs commentaires, si cela leur convient, tout en restant libres de présenter leur évaluation de la manière qui leur semble la meilleure.

Tout membre de la communauté peut faire un retour constructif sur ce fil de commentaires, après avoir pris connaissance de nos consignes aux évaluateurs et évaluatrices et accepté notre politique contre le harcèlement (voir ci-dessous). Nous demandons que toutes les relectures cessent après réception de la seconde évaluation formelle, pour que le traducteur puisse travailler sur la révision de son texte. Le rédacteur ou la rédactrice l'annoncera sur ce fil quand cette étape aura été atteinte.

La discussion s'organise au niveau de Github. Si quelqu'un préfère de discuter de manière privée, merci de m'envoyer un message électronique. Vous avez toujours la possibilité de vous tourner vers notre médiatrice Hélène Huet si vous avez le sentiment qu'une médiation est nécessaire, sans aucune incidence négative sur l'évaluation de cette leçon.

Politique contre le harcèlement

Vous trouverez ci-dessous les principes du Programming Historian en français qui doivent inspirer les échanges entre évaluateurs et évaluatrices, autrices et auteurs, rédacteurs et rédactrices, ainsi que toute personne contribuant à nos forums publics.

Le Programming Historian en français tient à garantir un environnement académique ouvert à la communauté, qui offre la pleine liberté d’explorer minutieusement des idées, poser des questions, faire des suggestions ou demander des clarifications. Il fournit aussi un espace libre de toute discrimination envers les personnes contribuant au projet indépendamment du genre, de l’orientation sexuelle, des situations d’handicap, de l’apparence physique, de la masse corporelle, de l’origine, de l’âge, de la religion ou de l’expérience technique. Nous ne tolérons aucune forme d’harcèlement ou d’attaque personnelle contre les membres de la communauté. Les personnes qui violent ces règles sont susceptibles d’être expulsées de la communauté à la discrétion du conseil éditorial. Toute personne en mesure de témoigner de tels comportements ou qui en est la victime peut contacter notre dispositif de médiation (Hélène Huet). Merci de nous aider à créer un espace d’échange et de discussion sûr.

OdysseusPolymetis commented 4 months ago

Bilan de l'évaluation

Le propos est clair et le déroulement facile à suivre. Globalement, je n'ai vu que peu d'approximations, mises à part celles mentionnées plus haut dans le ticket. Voici mes suggestions (les lignes se réfèrent au .md). Il ne s'agit que de suggestions, bien entendu.

Remarques

ligne 38 : "chaine" --> "chaîne" ligne 38 : il faudrait expliquer succinctement ce que veut dire "normaliser". ligne 49 : "tel que présenté" --> "telle que présentée" ? ligne 49 : "dans la liste qui suis" --> "dans la liste qui suit" ligne 49 : ""Akerman" plus un marqueur" --> ""Akeman" accompagné d'un marqueur" ligne 71 : "en soit" --> "en soi" ligne 71 : "pouvoir séparer... lire" : je trouve cette phrase un peu étrange, je ne vois pas le but de l'énoncé. J'aurais plus pensé à quelque chose comme : "le fait de séparer un texte en mots n'apporte pas une plus-value épistémologique claire. Mais c'est une étape nécessaire pour etc." ligne 71 : "faire des choses qui" me semble maladroit. ligne 71 : "ce qui est une mesure classique à faire sur un texte" --> "ce qui se fait fréquemment dans le cadre d'une analyse textuelle" ? ligne 73 : "connaitre" --> "connaître" ligne 73 : phrase maladroite. Plutôt quelque chose comme : "ce que nous voulons, c'est savoir combien de fois les mots sémantiquement importants apparaissent dans notre texte." ligne 77 : qu'est-ce qu'un "caractère étrange ou inhabituel" ? ligne 78 : "apparait" --> "apparaît" ligne 79 : "retirer les mots trop courants" : peut-être dire qu'on appelle ça mots outils et qu'il y a des listes pré-établies dispos en ligne (je sais que nous sommes dans une traduction et que ça limite les potentiels apports) ? et que c'est des mots à faible poids sémantique ? ligne 86 : "c'est donc ce que nous allons faire en utilisant le tag sur chaines de caractères lower" : pas clair du tout, comme mentionné dans le ticket. D'autre part, lower() est une méthode (ou une fonction à la limite). J'aurais tendance à dire plutôt : "c'est ce que nous allons faire en appliquant la méthode lower() à chaque token." ligne 86 : "chaine" --> "chaîne" (il y en a plusieurs dans la ligne) ligne 104 : "En appelant chaque méthode l'une après l'autre de cette façon" : quelles méthodes ? ligne 108 : "A" --> "À" ligne 127 : "patterns" --> "patrons lexicaux" ? ligne 127 : "sous-chaine" --> "sous-chaîne" ligne 127 : je trouve la phrase mal tournée et trop longue. Je suggère : "mettons que nous voulions trouver une lettre de l'alphabet dans une chaîne de caractères. Plutôt que de créer une boucle qui vérifie si chaque lettre de la chaîne correspond d'abord à "a", puis à "b", puis à "c", etc., nous pouvons nous servir d'une expression régulière pour voir si le caractère de la chaîne est une lettre entre "a" et "z"." ligne 146 : "après avoir peaufiner" --> "après avoir peaufiné" ligne 162 : "vous verrez qu'il fait du plutôt bon travail" --> "vous verrez que le résultat est correct (ou plutôt du bon travail)."

matgille commented 4 months ago

Merci, Marianne, pour ces retours constructifs. Je suggère l'utilisation un outil comme gedit, vim, notepad++ ou sublime editor, en fonction de votre système d'exploitation, pour identifier les lignes.

Pour rebondir sur la remarque de la ligne 79, et cela vaut pour toute la leçon, je vous demanderai @Cosette-chan, tant que faire se peut, d'indiquer le concept original entre parenthèses pour tous les concepts techniques rencontrés. Ici, l'équivalent anglais est stopwords. Cela vaut aussi pour pattern par exemple.

Cosette-chan commented 4 months ago

Bonjour à tous,

Merci pour vos retours, j'ai corrigé la plupart des erreurs relevées et j'ai fais au mieux pour éclaircir les passages flous, en essayant de ne pas trop m'éloigner du texte original. J'ai cependant un soucis pour corrgier les remarques sur les lignes 77 et 104 : le texte original ne précise pas ce qu'est un "caractère étrange" ou à quelles "méthodes" il fait référence, et je ne sais pas comment procéder pour expliciter ces termes (pour la ligne 77 par exemple, j'ai l'impression que l'auteur du texte anglais a volontairement utilisé des termes flous, et je ne sais pas comment préciser).

matgille commented 4 months ago

Concernant la ligne 77 et 104, je pense que nous pouvons prendre la liberté d'expliciter le texte. Pour 77, j'avoue partager votre incompréhension; je me demande si le plus simple ne serait pas de supprimer cette phrase, je ne sais pas quel est votr avis.

Pour 104, je pense que les auteurs évoquent la ligne 97: text = obo.stripTags(html).lower(). En réalité, on applique la fonction stripTags() du module obo (qui est présenté dans la leçon antérieure), qui retourne une chaîne de caractères, sur laquelle on applique effectivement la méthode lower(). Je vous laisse trouver une autre formulation que En appelant chaque méthode l'une après l'autre, de sorte à rendre le texte plus clair et plus précis !

J'en profite pour souligner que la traduction de this par ça me semble inadaptée du point de vue du registre. J'utiliserais plutôt cela.

Bien cordialement,

Matthias Gille Levenson

Cosette-chan commented 4 months ago

J'ai apporté les modifications. Pour la ligne 77, j'ai tenté d'expliciter avec un exemple, mais nous pouvons aussi retirer simplement la ligne si cela ne convient pas. Pour ce qui est de la ligne 104, j'ai pris le partie d'expliquer en amont le fonctionnement des fonctions utilisées, cela convient-il ?

"Normalement, vous devriez obtenir la même liste de mots que précédemment, mais cette fois avec tous les caractères en minuscules. En effet, la fonction stripTags() du module obo retourne une chaîne de caractère à partir des données extraites (contenues dans la variable 'html'), que nous convertissons en minuscules avec la fonction lower(). En appliquant ainsi les deux fonctions sur une même ligne, nous gardons un code assez court tout en apportant des modifications majeures à notre programme."

spapastamkou commented 4 months ago

Juste un rapide commentaire au passage sur la l.77: cela porte fort probablement sur les diacritiques qui peuvent poser problème, notamment lorsqu'il s'agit d'autres langues que l'anglais.

matgille commented 4 months ago

Merci Sofia !

"Normalement, vous devriez obtenir la même liste de mots que précédemment, mais cette fois avec tous les caractères en minuscules. En effet, la fonction stripTags() du module obo retourne une chaîne de caractère à partir des données extraites (contenues dans la variable 'html'), que nous convertissons en minuscules avec la fonction lower(). En appliquant ainsi les deux fonctions sur une même ligne, nous gardons un code assez court tout en apportant des modifications majeures à notre programme."

Il faut distinguer ici la fonction stripTags(), qui ne s'applique sur aucun objet mais prend un objet en paramètre et la méthode lower() qui elle s'applique sur les objets de type str. Il faut que ces deux termes apparaissent dans le texte car ils ne sont pas équivalents (voir https://stackoverflow.com/a/75264471).

matgille commented 4 months ago

Bonjour à tout le monde, la deuxième évaluatrice sera Andrea Escobar Castillo (@aescocasti); Andrea, je te laisse prendre connaissance de la leçon et proposer des pistes de correction et/ou d'amélioration sur ce fil !

Cordialement,

Matthias

aescocasti commented 4 months ago

Bonjour à toutes et à tous. Voici quelques suggestions suite à l'évaluation de @OdysseusPolymetis

Évaluation

Au début, j'ai mis du temps à m'immerger dans la lecture car il y a, à mon avis, une rédaction moins fluide dans l'introduction du sujet. Cependant, progressivement, j'ai trouvé que les explications étaient claires, rendant ainsi la lecture très compréhensible.

ligne 49 :

Dans la leçon Du html à une liste de mots (2), nous avons rédigé un programme Python nommé html-to-list-1.py, qui après avoir téléchargé une page web en extrait le format et les métadonnées, et renvoie une liste de « mots » tel que présentée plus bas.

À mon avis pour améliorer la clarté de la formulation, je suggère :

Dans la leçon Du HTML à une liste de mots (2), nous avons rédigé un programme Python, html-to-list-1.py. Ce programme télécharge le contenu d'une page web, extrait le formatage et les métadonnées, puis produit une liste de « mots », comme celle ci-dessous.

J'ai remplacé le mot format par formatage, car celui-ci me paraît plus précis (s'il s'agit de référencer les balises).

ligne 49 :

D’autre peuvent...D'autres peuvent...

ligne 73

Il est clair que notre liste va avoir besoin d'être nettoyée avant d'être utilisée pour mesurer des fréquences.

A mon avis, ce serait plus simple d'utiliser la forme synthétique du verbe :

la liste aura besoin d'être nettoyée

A l’aide des méthodesÀ l'aide des méthodes

ligne 87

c’est ce que nous allons faire en appliquant la méthode lower() à chaque token, qui a été introduit dans la leçon Manipuler des chaînes de caractères en Python. Il s’agit d’une méthode applicable à des chaînes de caractères, nous allons donc devoir l’appliquer à notre chaîne de caractère text dans le programme html-to-list1.py.

Je trouve qu'il y a une petite confusion avec l'antécédent du pronom relatif. Je suggère :

c’est ce que nous allons faire en appliquant la méthode lower() à chaque token. Il s'agit d'une méthode applicable à des chaînes de caractères et qui a déjà été introduite dans la leçon Manipuler des chaînes de caractères en Python. Nous allons donc devoir l'appliquer à notre chaîne de caractères text dans le programme html-to-list1.py

ligne 109

par exemple, pour distinguer des quantités monétaires comme « 1300$ » ou « 1865£ » des dates, ou reconnaître la différence entre « 1629-40 » et « 1629 40 »

Il faudrait changer les virgules dans cette énumération :

par exemple, pour distinguer des quantités monétaires comme « 1300$ » ou « 1865£ », des dates ou reconnaître la différence entre « 1629-40 » et « 1629 40 »

ligne 167

Si vous souhaitez pratiquer d'avantage les expressions régulières, le chapitre 7 de Dive into Python de Mark Pilgrim peut être un bon entrainement.entraînement

ligne 171

A la fin de chaque chapitreÀ la fin...

matgille commented 4 months ago

Bonjour @aescocasti, et merci de ces retours !

@Cosette-chan, je vous laisse reprendre votre leçon avec les suggestions des deux évaluatrices.

J'attire votre attention sur l'importance de la précision de la traduction. En ce qui concerne la ligne 49 de la leçon traduite, le texte original lit lignes 55-56: stripped out the HTML formatting, ce qui signifie au contraire que la structure HTML est ignorée, pour ne garder que le texte.

Cordialement,

Matthias Gille Levenson

matgille commented 3 months ago

Bonjour @Cosette-chan, avez-vous pu reprendre la leçon ?

Cordialement,

Matthias Gille Levenson

Cosette-chan commented 1 week ago

Bonjour à tous,

je suis revenue sur la version. Je m'excuse pour le temps de réaction, j'étais revenu dessus le mois dernier et je pensais avoir implémenté toutes les remarques, mais j'avais en effet oublié quelques modifications à faire. J'espère ne rien avoir oublié cette fois-ci.

Cordialement, Fantine Horvath

anisa-hawes commented 1 week ago

Merci beaucoup, Fantine @Cosette-chan!

--

Bonjour @matgille et @marie-flesch,

Please let us know when you've had a chance to read through Fantine's revisions. When you're both happy, @charlottejmc and I can move forwards with our Phase 6 Sustainability and Accessibility checks ahead of publication.

Thank you ☺️

anisa-hawes commented 2 days ago

Bonjour Fantine @Cosette-chan.

Many thanks again for your work on Phase 5 revisions. Just a quick note to let you know that Matthias @matgille is away at the moment, but will aim to review your revisions and will post a comment in this Issue by ~29th July to confirm that he's happy to move onwards to the next Phase (Phase 6 Sustainability and Accessibility).

Nous vous remercions de votre patience // We are grateful for your patience 🙂