1 / 30

Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques

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.

Download Presentation

Outils pour le traitement des textes Commandes Unix pour traiter les ressources linguistiques

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Sommaire Objectifs Visualiser un échantillon head, tail, less, iconv, sed Extraire des entrées grep Changer de format sed

  3. 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

  4. 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

  5. Visualiser un échantillon head -30 lexique.lst extraire les 30 premières lignes tail -30 lexique.lst extraire les 30 dernières lignes less -20 lexique.lst visualiser 20 lignes par 20 Vérifier le codage des caractères, le format des entrées... sur quelques exemples

  6. 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.

  7. 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 sed sed -f accents.sed corpus8.txt > corpus-latex.txt Commande de substitution sed : s///g

  8. 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

  9. 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

  10. 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

  11. grep, egrep Vérifier le format des entrées egrep -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

  12. fgrep Extraire les entrées de certains mots fgrep voici lex.lst fgrep -f liste-nue.lst lex.lst > sous-lex.lst Aucune expression rationnelle possible

  13. 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.lst abaissé abalourdi abandonné abasourdi egrep "\.A.*:ms" delaf.lst > A.lst fgrep -f Kms.lst A.lst > Kms-inter-A.lst

  14. cut Extraire de chaque ligne un ou plusieurs champs 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.lst abaissé abalourdi abandonné abasourdi Les champs sont numérotés à partir de 1 fgrep :Kms delaf.lst | cut -d , -f 1 > Kms.lst

  15. 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é

  16. fgrep Kms.lst ablutionné aboli abominé abondé A.lst ablatif,.A+z2:ms aboli,.A+z3:ms abolitionniste,.A+z1:ms:fs abominable,.A+z1:ms:fs fgrep -f Kms.lst A.lst > Kms-inter-A.lst Le script extrait abolitionniste car aboli est un participe passé Kms-inter-A.lst abîmé,.A+z1:ms aboli,.A+z3:ms abolitionniste,.A+z1:ms:fs abonné,.A+z1:ms

  17. fgrep 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} fgrep -f Kms-1.lst A-0.lst > Kms-inter-A-1.lst Le script n'extrait pas abolitionniste Kms-inter-A-1.lst {abîmé,.A+z1:ms} {aboli,.A+z3:ms} {abonné,.A+z1:ms} {abordé,.A+z3:ms}

  18. sed Extraire les participes passés pour lesquels il existe aussi une entrée comme adjectif (poli) Délimiter les champs 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} 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

  19. 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

  20. 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}

  21. Changer de format Changer de format par des substitutions sed -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}

  22. sed treetagger.txt :la DET:ART le unitex.txt : {la,le.DET} Scripts sed sed -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

  23. sed Reconnaître des séquences ambiguës treetagger.txt : ? SENT ? unitex.txt : ?{S} SENT : code (sentence) ou mot (sentir) ? Utiliser les délimiteurs de champs s/\tSENT\t/{S}\t/ avant :? SENT ? après :?{S} ? Le délimiteur peut être différent pour chaque champ S'il le faut, introduire des délimiteurs de champs

  24. sed Séquences ambiguës treetagger.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éellement egrep "SENT" treetagger.txt > auxiliaire.lst

  25. sed Changer de délimiteurs treetagger.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 virgules Le fait d'avoir des substitutions successives introduit une confusion entre niveaux : - virgule du texte ? - virgule-délimiteur ?

  26. sed Substitutions successives treetagger.txt :génération NOM génération unitex.txt : {génération,génération.N} Utiliser des délimiteurs de champs non ambigus s/\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 ","

  27. sed Déplacer, intervertir des champs treetagger.txt :la DET:ART le unitex.txt : {la,le.DET} Utiliser les délimiteurs de champs s/\.\([^.,\t]\+\)\t,\([^.,\t]\+\)$/,\2.\1/ avant :la.DET ,le après :la,le.DET Reconnaître les fins de lignes $ fin de ligne

  28. sed Reconnaître les débuts et fins de lignes .* toute la ligne ^ début de ligne $ fin de ligne

  29. sed Copier un champ treetagger.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)

  30. 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 \+ \? \{ \} \( \)

More Related