Overblog All blogs Top blogs Jobs, Education & Studies
Edit post Follow this blog Administration + Create my blog
MENU
L'Américanisation

Master 1 Plurital 2012

Advertising

Python : extraction des contextes

La dernière étape de la création du tableau est l'extraction des contextes de notre mot choisi par une expression régulière, à partir du texte brut qu'on vient d'extraire.

 

Nous avons déjà vu les expressions régulières dans l'extraction du charset (avec la module python "re").

 

L'expression choisie pour l'anglais et le français est comme suit :

 

expr = re.compile(r"((?:(?:(?:\b[^\W]+[^\w\?!]{1,4})\b){,20})(am.ricani[sz].*?)\W(?:(?:\b[^\W]+([^\w\?!]{1,4})\b){,20}))", re.I)
 

Le flag 're.I' indique que les différences de casses sont ignorées dans l'expression.  L'expression cherche le motif am.ricani[sz].*?.  Nous voulons extraire le contexte immédiat de chaque côté du mot extrait.  Donc l'expression va chercher jusqu'à 20 mots qui précèdent et 20 mots qui suivent le mot.  Ces mots sont définis par :

\b[^\W]+[^\w\?!]{1,4})\b)

c'est-à-dire le début ou la fin d'un mot, au moins un caractère alphanumérique, suivi d'un caractère non-alphanumérique qui n'est pas "?" ou "!".

Il est important d'utiliser [^\W] au lieu de \w, parce que ce dernier ne sélectionnera pas de caratères accentués.  [^\W] signifie tous les caractères qui ne sont pas non-alphanumérique, y compris ces caractères accentués.

Suivant ce mot il peut y avoir un espace, ou un signe de ponctuation, ou les deux (virgules, deux points, guillemets).  [^\w\?!]{1,4} spécifie que l'expression accepte au moins un (et au maximum 4) caractère(s) non-alpha-numérique(s) qui n'est pas "?" ou "!".  Ces deux caractères indiquent en général la fin d'une phrase, et donc un contexte qui n'est pas pertinent.  Il est plus difficile d'ajouter le point à cette liste, parce qu'il a d'autres usages que la fin d'une phrase (ex: U.S, M. Smith) et nous ne voulons pas bloquer ces contextes-là qui pourraient être pertinents.

 

Voici un petit script pour démontrer l'extraction des contextes du dump américain et le résultat dans un nouveau fichier :

Advertising
Python : extraction des contextes
Python : extraction des contextes

L'étape suivante (avec le trameur) a été anticipée avec l'ajout d'un croisillon à la fin de chaque ligne ajoutée.  Ceci sera utilisé comme délimiteur dans l'analyse linguistique des contextes.

 

Mais il y a un problème si le même script est utilisé pour le français.

Il n'y a que 8 occurrences du mot recherché et ces occurrences sont toutes non-accentuées :

Python : extraction des contextes
Advertising

Ceci serait peut-être un problème d'encodage.  Alors, on peut supposer que les caractères accentués soient codés sur 2 octets (puisque le texte est en utf-8 et que ces caractères n'ont pas été reconnu par le point qui est censé reconnaître n'importe quel caractère).  Pour vérifier on peut modifier l'expression régulière, en ajoutant un deuxième point optionnel (pour les caractères codés sur deux octets).  Voici le résultat :

Python : extraction des contextes

Donc c'est vrai que les caractères accentués sont bien codés sur 2 octets. Ce qui est très embêtant est que le résultat n'est pas affiché en utf-8, et le texte n'est pas facilement analysable. De plus, les contextes n'ont pas pu être écrits dans le fichier à cause de l'erreur "UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 31: ordinal not in range(128)". Le programme essaie de décoder un caractère qui est non-ASCII. Donc il faudrait d'abord créer un string unicode.

 

La solution serait de décoder le contenu du fichier d'abord :

 

texte=texte.decode("utf-8")

 

et d'ensuite ré-encoder le texte en utf-8 avant d'écrire dans le fichier :

 

texte=texte.encode("utf-8")

 

Cette fois-ci, le résultat est bon et l'expression originale trouve bien toutes les occurrences :

Python : extraction des contextes
Python : extraction des contextes
Advertising

Il ne reste qu'à l'intégrer dans le script (avec l'ajout de l'expression régulière en grec). Comme avec le script en bash, le programme en Perl (minigrep) est intégré dans le script, ainsi que la création des fichiers globaux pour le dump-text et les contextes.

Le script
Le script
Le script
Le script
Le script
Le script
Le script
Le script
Le script
Le script
Le script
Le script
Le script

Le script

Quelques parties des tableaux - avec les contextes et les fichiers globaux

Quelques parties des tableaux - avec les contextes et les fichiers globaux

Share this post
Repost0
To be informed of the latest articles, subscribe:
Comment on this post
S
L'année commence à toute vitesse sur votre site...
Reply