Enlever les accents (avec R)

Date 11 mars 2013

En travaillant dans un langue autre que l’anglais, on est souvent amené à fréquenter des caractères exotiques : lettres munies d’accents (é), tildes (ñ), ronds (Å) et autres barres (ø) – sans compter les formes non-latines (de ∆ à भैं, en passant par ش). Mais comme l’informatique moderne a été développée avec des claviers étas-uniens, leur traitement ne va pas sans difficultés.

Des procédures standardisées, dites d’encodage, permettent d’utiliser ces caractères dans des textes ou des bases de données. Toutefois, dans le cas du français, le plus simple est bien souvent d’enlever les accents, si bien sûr on ne perd pas d’information cruciale au passage.

R permet d’effectuer cette opération, grâce à la fonction iconv munie d’une option de translittération : é est ainsi transformé en ´e, par exemple. On enlève ensuite les apostrophes (et équivalents) pour compléter la procédure de désaccentuation. Pour le faire de manière systématique, on définit la fonction suivante:

Unaccent <- function(text) {
  text <- gsub("['`^~\"]", " ", text)
  text <- iconv(text, to="ASCII//TRANSLIT//IGNORE")
  text <- gsub("['`^~\"]", "", text)
  return(text)
}

Il suffit d’exécuter ces quelques lignes au début d’un script R et cette fonction Unaccent devient disponible pour toute la suite de votre programme. Trois remarques:

  • Elle ne fonctionne que pour les caractères latins.
  • Les apostrophes et guillemets anglais sont également évacués, et remplacés par des espaces.
  • Vous venez de créer une fonction en R, un outil très utile qui permet d'empaqueter un ensemble d'instructions (éventuellement long) plutôt que de les réécrire à chaque fois.

Son utilisation donne ainsi :

> Unaccent("à é î ø ü ç ß ñ ƒ")
[1] "a e i o u c ss n f"

> Unaccent("J'ai dévoré les Grundriße")
[1] J ai devore les Grundrisse

Attention, les caractères non-latins sont purement et simplement effacés :

> Unaccent("∆")
[1] ""

Il est possible de travailler en gardant l'ensemble des caractères et des accents, mais cela nécessite d’être extrêmement soigneux dans la manipulation des encodages, voire des expressions régulières. Ces sujets, très techniques, seront abordés prochainement. Mais si vous pouvez y échapper, profitez-en !


alexandre

Doctorant en sociologie politique à l'EHESS (CMH-ETT).

More Posts - Website

Imprimer ce billet Imprimer ce billet

4 commentaires pour  “Enlever les accents (avec R)”

  1. […] réorganise ses données, voire mieux, en rajoute. Cela ne fera pas disparaître la nécessité de bien nettoyer les […]

    Répondre
  2. [...] utilise ici une fonction que l’on a détaillée ailleurs, et que l’on appelle [...]

    Répondre
  3. Alexandre a dit le 23/03/2013 à 17:00 :

    Bonjour, merci beaucoup de votre message,

    Je ne suis pas certain de ce que vous désignez par "non-conforme", mais j'imagine qu'il s'agit d'un fichier de données (par exemple CSV) dont l'importation donne des caractères bizarres dans les champs de texte, du genre "Ã@", "\x8e" ou "\u0089"…

    Si c'est le cas, alors au moment de l'importation il faut spécifier l'encodage utilisé pour créer ce fichier de données, à savoir la table de correspondance entre les octets et les caractères. D'habitude si on ne spécifie rien, alors ça marche pour les fichier créés avec un encodage ASCII, ISO-8859-1 (dit "LATIN1"), ou Unicode ("UTF-8").

    Les encodages utilisés les plus couramment en dehors de ces deux-là sont "WINDOWS-1252" (ou "CP1252", parfois aussi appelé "ANSI") sous Windows, et "MACROMAN" sous Mac OS.

    Si vous utilisez une fonction d'importation de la famille des read.table(), comme par exemple read.csv2(), cela s'écrit alors ainsi :

    mon.dataset <- read.csv2(file="…/monfichier.csv",
    fileEncoding="WINDOWS-1252")

    Pour voir la liste des encodages disponibles sous R sur votre machine, vous pouvez utiliser la fonction iconvlist() .

    Une fois que l'importation s'est effectuée correctement, vous pourrez ensuite enlever les accents sans difficulté.

    Est-ce que cela répond à votre problème ?

    Alexandre

    Répondre
  4. Charles-André Coste a dit le 23/03/2013 à 11:31 :

    Bonjour,

    superbe procédure ! Bravo.

    mais par contre question pour l'import d'un data frame non conforme, comment fait-on avant, puisque en principe il ne faut importer qu'après nettoyage (que je fais aujourd'hui avec cmdaccut de Pierre Torris.

    pourriez vous préciser la procédure complète avant et après le nettoyage ?

    Charles-André

    Répondre

Laisser un commentaire

XHTML: Vous pouvez utilisez ces balises :<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <embed style="" type="" id="" height="" width="" src="" object="" allowfullscreen="" allowscriptaccess="" cachebusting="" bgcolor="" quality="" flashvars=""> <iframe width="" height="" frameborder="" scrolling="" marginheight="" marginwidth="" src=""> <object style="" height="" width="" param="" embed=""> <param name="" value="">