30
Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la-Vallée

Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Embed Size (px)

Citation preview

Page 1: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Outils pour le traitement des textes

Commandes Unix pour traiter les ressources linguistiques

Éric Laporte

Université Paris-Est Marne-la-Vallée

Page 2: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Sommaire

Objectifs

Visualiser un échantillon

head, tail, less, iconv, sed

Extraire des entrées

grep

Changer de format

sed

Page 3: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Commandes Unix pour traiter les ressources linguistiques

Avantages

Disponibles sur tout environnement Unix

Simples : scripts sans déclaration de structures de données, sinon mieux vaut utiliser perl, python, java...

Inconvénients

Toutes les versions ne font pas la même chose, donc faire des tests...

Parfois incompatibles avec UTF-16 (Unitex)

Seule structure de données : la ligne ; donc incompatible avec XML

Page 4: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Objectifs

Visualiser un échantillon

Extraire des entrées d'un lexique

Traitement de certaines entrées

Changer de format

Corpus étiqueté par TreeTagger --> Unitex

Construire l'index d'un ensemble de tables

Index pour les linguistes

Construire une table de classes

Page 5: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Visualiser un échantillon

head -30 lexique.lstextraire les 30 premières lignes

tail -30 lexique.lstextraire les 30 dernières lignes

less -20 lexique.lstvisualiser 20 lignes par 20

Vérifier le codage des caractères, le format des entrées... sur quelques exemples

Page 6: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Transcoder

La plupart des commandes Unix fonctionnent bien en UTF-8

iconv -f UTF-16LE -t UTF-8 lex16.lst > lex8.lst

Dans quel codage sont les caractères d'un fichier texte ?- Ouvrir le fichier avec Notepad++ et observer dans le menu Encodage quelle ligne est cochée : elle indique le codage utilisé.- Ou bien ouvrir le fichier avec MSWord ou Open Office, cliquer sur des lignes de la liste de codages, et vérifier à chaque fois dans l'aperçu si la visualisation correspondante est correcte.

Page 7: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Transcoder

iconv -f UTF-16LE -t UTF-8 lex16.lst > lex8.lst

Liste des codages disponibles :iconv -l

Codage utilisé par Unitex :UTF16-LE

Codages particuliers : script sedsed -f accents.sed corpus8.txt > corpus-latex.txt

Commande de substitution sed : s///g

Page 8: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

s+''\([^']\)+{''}\1+g s+à+\\`{a}+g s+à+\\`{a}+g s+â+\\^{a}+g s+é+\\'{e}+g s+è+\\`{e}+g s+ê+\\^{e}+g s+ë+\\"{e}+g s+î+\\^{\\i}+g s+ï+\\"{\\i}+g s+ô+\\^{o}+g s+ù+\\`{u}+g s+û+\\^{u}+g s+ü+\\"{u}+g s+ç+\\c{c}+g s+oe+{\\oe}+g

Page 9: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Séparateur de champs : n'importe quel caractère qui n'apparaît pas dans les champs s+é+\\'{e}+g s/é/\\'{e}/g s:é:\\'{e}:g s!é!\\'{e}!g

Si on omet le g à la fin, la substitution est faite au plus une fois par ligne, à la première occurrence

Page 10: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Extraire des entrées

Extraire des entrées d'un lexique

egrep "+hum" lexique.lst > hum.lst

extraire les entrées de noms marqués comme désignant des personnes

egrep -c "+hum" lexique.lst

compter ces entrées

egrep -v "+hum" lexique.lst > non-hum.lst

extraire les entrées non marquées comme désignant des personnes

Page 11: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

grep, egrep

Vérifier le format des entréesegrep -v "^[^,.]*,[^,.]*\.[^,.]*$" lexique.lst

Syntaxe interne aux lignes

Rechercher des contre-exemples

Entrées qui n'ont pas exactement les deux délimiteurs attendus dans l'ordre attendu

Expressions rationnelles possibles

Page 12: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

fgrep

Extraire les entrées de certains motsfgrep voici lex.lst

fgrep -f liste-nue.lst lex.lst > sous-lex.lst

Aucune expression rationnelle possible

Page 13: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Extraire une intersection

Extraire les participes passés pour lesquels il existe aussi une entrée comme adjectif (poli)fgrep :Kms delaf.lst > Kms-0.lst

abaissé,abaisser.V+z1:Kms

abalourdi,abalourdir.V+z3:Kms

abandonné,abandonner.V+z1:Kms

abasourdi,abasourdir.V+z2:Kms

cut -d , -f 1 Kms-0.lst > Kms.lstabaissé

abalourdi

abandonné

abasourdi

egrep "\.A.*:ms" delaf.lst > A.lst

fgrep -f Kms.lst A.lst > Kms-inter-A.lst

Page 14: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

cut

Extraire de chaque ligne un ou plusieurs champsabaissé,abaisser.V+z1:Kms

abalourdi,abalourdir.V+z3:Kms

abandonné,abandonner.V+z1:Kms

abasourdi,abasourdir.V+z2:Kms

cut -d , -f 1 Kms-0.lst > Kms.lstabaissé

abalourdi

abandonné

abasourdi

Les champs sont numérotés à partir de 1

fgrep :Kms delaf.lst | cut -d , -f 1 > Kms.lst

Page 15: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

fgrep

Extraire les participes passés pour lesquels il existe aussi une entrée comme adjectif (poli)fgrep :Kms delaf.lst | cut -d , -f 1 > Kms.lst

abaissé

abalourdi

abandonné

abasourdi

egrep "\.A.*:ms" delaf.lst > A.lst

fgrep -f Kms.lst A.lst > Kms-inter-A.lst

Ce script extrait abolitionniste car aboli est un participe passé

Page 16: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

fgrep

fgrep -f Kms.lst A.lst > Kms-inter-A.lst

Le script extrait abolitionniste car aboli est un participe passé

Kms.lstablutionné

aboli

abominé

abondé

A.lstablatif,.A+z2:ms

aboli,.A+z3:ms

abolitionniste,.A+z1:ms:fs

abominable,.A+z1:ms:fs

Kms-inter-A.lstabîmé,.A+z1:ms

aboli,.A+z3:ms

abolitionniste,.A+z1:ms:fs

abonné,.A+z1:ms

Page 17: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

fgrep

fgrep -f Kms-1.lst A-0.lst > Kms-inter-A-1.lst

Le script n'extrait pas abolitionniste

Kms-1.lst{ablutionné,

{aboli,

{abominé,

{abondé,

A-0.lst{ablatif,.A+z2:ms}

{aboli,.A+z3:ms}

{abolitionniste,.A+z1:ms:fs}

{abominable,.A+z1:ms:fs}

Kms-inter-A-1.lst{abîmé,.A+z1:ms}

{aboli,.A+z3:ms}

{abonné,.A+z1:ms}

{abordé,.A+z3:ms}

Page 18: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Extraire les participes passés pour lesquels il existe aussi une entrée comme adjectif (poli)

Délimiter les champssed -e "s/.*/{&}/" A.lst > A-0.lst

{aalénien,.A+z3:ms}

{abactérien,.A+z3:ms}

{abaissable,.A+z2:ms:fs}

{abaissant,.A+z2:ms}

sed -e "s/.*/{&,/" Kms.lst > Kms-1.lst{abaissé,

{abalourdi,

{abandonné,

{abasourdi,

fgrep -f Kms-1.lst A-0.lst > Kms-inter-A-1.lst

Ce script n'extrait pas abolitionniste

Page 19: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

sed -e "s/.*/{&}/" A.lst > A-0.lst{aalénien,.A+z3:ms}

{abactérien,.A+z3:ms}

{abaissable,.A+z2:ms:fs}

{abaissant,.A+z2:ms}

Expressions rationnelles dans le premier champ de s///

& dans le deuxième champ : la séquence reconnue par le premier champ

s/// si on veut reconnaître un seul motif par ligne

Page 20: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Extraire une différence

Extraire les participes passés pour lesquels il n'existe pas d'entrée comme adjectif (fallu)egrep "\.A.*:ms" delaf.lst | cut -d, -f1 |

sed -e "s/.*/{&,/" > A.lst

fgrep :Kms delaf.lst | sed -e "s/.*/{&}/" > Kms.lst{abaissé,abaisser.V+z1:Kms}

{abalourdi,abalourdir.V+z3:Kms}

{abandonné,abandonner.V+z1:Kms}

{abasourdi,abasourdir.V+z2:Kms}

fgrep -v -f A.lst Kms.lst > K-sauf-A.lst{abalourdi,abalourdir.V+z3:Kms}

{abcédé,abcéder.V+z3:Kms}

{abdiqué,abdiquer.V+z1:Kms}

{abeausi,abeausir.V+z3:Kms}

Page 21: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

Changer de format

Changer de format par des substitutionssed -f treetagger2unitex.sed treetagger.txt > unitex.txt

Passer du format de sortie de TreeTagger au format d'entrée d'Unitex (tagged text)

France NAM France

: PUN :

la DET:ART le

nouvelle ADJ nouveau

génération NOM génération

{France,France.N+PR} : {la,le.DET} {nouvelle,nouveau.A}

{génération,génération.N}

Page 22: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

treetagger.txt : la DET:ART le

unitex.txt : {la,le.DET}

Scripts sedsed -f treetagger2unitex.sed treetagger.txt > unitex.txt

# treetagger2unitex.sed

s/DET:ART/.DET/

# remplacer DET:ART par .DET

avant : la DET:ART le

après : la .DET le

Page 23: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Reconnaître des séquences ambiguëstreetagger.txt : ? SENT ?unitex.txt : ?{S}

SENT : code (sentence) ou mot (sentir) ?

Utiliser les délimiteurs de champss/\tSENT\t/{S}\t/

avant : ? SENT ?

après : ?{S} ?

Le délimiteur peut être différent pour chaque champS'il le faut, introduire des délimiteurs de champs

Page 24: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Séquences ambiguëstreetagger.txt : ? SENT ?

unitex.txt : ?{S}

SENT : code (sentence) ou mot (sentir) ?

Rechercher des exemples de la séquence pour voir si le problème se pose réellementegrep "SENT" treetagger.txt > auxiliaire.lst

Page 25: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Changer de délimiteurstreetagger.txt : génération NOM génération

unitex.txt : {génération,génération.N}

s/\t/,/avant : génération.N génération

après : génération.N,génération

Dans les substitutions qui viennent ensuite, les tabulations ont déjà été remplacées par des virgulesLe fait d'avoir des substitutions successives introduit une confusion entre niveaux :- virgule du texte ?- virgule-délimiteur ?

Page 26: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Substitutions successivestreetagger.txt : génération NOM génération

unitex.txt : {génération,génération.N}

Utiliser des délimiteurs de champs non ambiguss/\t/\t,/

avant : génération.N génération

après : génération.N ,génération

Le délimiteur "\t," est moins ambigu que ","

Page 27: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Déplacer, intervertir des champstreetagger.txt : la DET:ART le

unitex.txt : {la,le.DET}

Utiliser les délimiteurs de champss/\.\([^.,\t]\+\)\t,\([^.,\t]\+\)$/,\2.\1/

avant : la.DET ,le

après : la,le.DET

Reconnaître les fins de lignes$ fin de ligne

Page 28: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Reconnaître les débuts et fins de lignes

.* toute la ligne^ début de ligne$ fin de ligne

Page 29: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Copier un champtreetagger.txt : la DET:ART le

unitex.txt : {la,le.DET}

Utiliser les délimiteurs de champs

s/.*/{&}/

avant : la,le.DET

après : {la,le.DET}

Copier& (dans la zone sortie, copie de la zone reconnue)

Page 30: Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques Éric Laporte Université Paris-Est Marne-la- Vallée

sed

Caractères spéciaux dans le premier champ mais pas dans le deuxième

* ^ $ [ .

s/\.\([^.,\t]\+\)\t,\([^.,\t]\+\)$/,\2.\1/

Séquences spéciales dans le premier champ\+ \? \{ \} \( \)