Extraire les noms et les verbes du Lexique dans deux fichiers.

Extraire les noms et les verbes du Lexique dans deux fichiers. - Divers - Programmation

Marsh Posté le 10-01-2013 à 10:36:15    

Bonjour, je souhaite extraire les verbes et les noms du Lexique380 dans deux fichiers nommées Verbes.txt et Noms.txt sans doublon dans chacun des fichiers résultants.
Je suis sur Gnu/linux,
 
Quelle serait votre solution s'il vous plaît.
 
Merci.

Reply

Marsh Posté le 10-01-2013 à 10:36:15   

Reply

Marsh Posté le 10-01-2013 à 15:02:27    

j'ai fait ceci, mais ça marche pas parce que le ficher source est mal formaté apparement :
 

Code :
  1. awk '{ print($3, $4=VER) }' Lexique380-utf8.txt > Verbes-utf8.txt
  2. awk '{ print($3, $4=NOM) }' Lexique380-utf8.txt > Noms-utf8.txt


Message édité par Profil supprimé le 10-01-2013 à 15:03:42
Reply

Marsh Posté le 10-01-2013 à 15:24:39    

:hello: Et il vient d'ou ton fichier Lexique380-utf8.txt?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-01-2013 à 17:47:31    

gilou a écrit :

:hello: Et il vient d'ou ton fichier Lexique380-utf8.txt?
A+,


 
De Lexique380.txt que 'jai converti de iso-8859.
 
Quant à lexique380.txt tu peux le trouver sur le site de Lexique.org Dans Bases et Scripts
 
 
Bonjour Gilou bise et meilleurs voeux.


Message édité par Profil supprimé le 10-01-2013 à 17:51:33
Reply

Marsh Posté le 10-01-2013 à 18:39:02    

J'en suis là, mais j'obtiens encore un résultat erroné.

awk '{ if ($4="NOM" ) print($3) }' Lexique380-utf8.txt > Noms-utf8.txt

Reply

Marsh Posté le 11-01-2013 à 01:02:22    

Ce script perl devrait coller pour NOM (rediriger sa sortie vers Noms.txt)

Code :
  1. #!/usr/bin/perl
  2. use v5.10.1; # pour interpréter ~~ comme l'opérateur de smart match
  3. # code propre
  4. use strict;
  5. use warnings;
  6. use autodie;
  7.  
  8. open my $fh, "Lexique380.txt";
  9. foreach (<$fh> ) {
  10.  print if (split(/\t/, $_))[3] ~~ /NOM/;
  11. }
  12. close $fh;


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-01-2013 à 11:11:39    

Salut Jovalise,
 
Je travaille avec cette "base". Perso, j'ai traité le fichier txt pour le transformer en BD Mysql (un champ en BD = une colonne dans le fichier). Pour les traitements, après, c'est beaucoup plus simple ;)
 
Si tu veux, je peux t'envoyer par MP mon code php qui convertit le fichier txt en BD...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-01-2013 à 11:59:11    

Merci Gilou, Avec Awk après j'ai extrait la la colonne qui m'intéresse, et un bout de code Ada pur supprimer les doublon, et c'est fait.
 
Merci rufo, Je connais rien à php encore, alors, pour le moment j'en ferait rien, mais merci.  :jap:

Reply

Marsh Posté le 11-01-2013 à 15:09:24    

:hello: Pour avoir la colonne qui t'intéressait, il suffisait de remplacer  
print if (split(/\t/, $_))[3] ~~ /NOM/;
par  
my @fields = split /\t/;
print $fields[j] if $fields[3] ~~ /NOM/;
ou j est le numéro de la colonne (numérotation débutant à 0)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-01-2013 à 15:55:08    

gilou a écrit :

:hello: Pour avoir la colonne qui t'intéressait, il suffisait de remplacer  
print if (split(/\t/, $_))[3] ~~ /NOM/;
par  
my @fields = split /\t/;
print $fields[j] if $fields[3] ~~ /NOM/;
ou j est le numéro de la colonne (numérotation débutant à 0)
A+,


 
 
Avec ce code, j'ai tous les mots sur une seule ligne.  :heink:  
Merci Gilou. A+

Reply

Marsh Posté le 11-01-2013 à 15:55:08   

Reply

Marsh Posté le 11-01-2013 à 16:57:17    

Ben faut modifier en fonction de ses besoins:
 
print "$fields[j]\n" if $fields[3] ~~ /NOM/;  
 
A+,

Message cité 1 fois
Message édité par gilou le 11-01-2013 à 16:57:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-01-2013 à 17:02:17    

gilou a écrit :

Ben faut modifier en fonction de ses besoins:
 
print "$fields[j]\n" if $fields[3] ~~ /NOM/;  
 
A+,


 
Ah Ok, merci Gilou, je connais toujours pas du tout Perl, saufe que pour affichier un saut de ligne il faut un \n dans la chaîne, et encore, je suis pas certain.
Mais dès que j'aurait besoin d'un truc, je me débrouillerait tous seul, sauf si vraiment j'y arrive pas.
On peux encore causer quant même ?
Ou on ne s'exprime plus qu'au travers des programme que nous produisons ?


Message édité par Profil supprimé le 11-01-2013 à 17:02:55
Reply

Marsh Posté le 11-01-2013 à 20:30:18    

Citation :

On peux encore causer quant même ?

Sans pb!
Mais j'ai été quasiment absent de mon écran les 3/4 de le journées d'ou ma faible réactivité.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-01-2013 à 21:33:22    

Merci encore Gilou ton code est plus efficace que mon awk.

Reply

Marsh Posté le 31-08-2017 à 16:10:49    

Bonjour,
 
Je voudrais réutiliser le code perl de Gilou.
 
Ceci dis ça passe pas :  
 

Code :
  1. #!/usr/bin/perl                                                                
  2. use v5.10.1; # pour interpréter ~~ comme l'opérateur de smart match            
  3. # code propre                                                                  
  4.  
  5. use strict;
  6. use warnings;
  7. use autodie;
  8.  
  9. open my $fh, "Lexique381.txt";
  10. foreach (<$fh> ) {
  11.    my @fields = split /\t/;
  12.    print "$fields[j]\n" if $fields[3] ~~ /NOM/;
  13. }
  14. close $fh;


 

Citation :

Smartmatch is experimental at ./name_extract.pl line 12.
Argument "j" isn't numeric in array element at ./name_extract.pl line 12.
Bareword "j" not allowed while "strict subs" in use at ./name_extract.pl line 12.
Execution of ./name_extract.pl aborted due to compilation errors.


 
Comment refaire compiler ou interpréter ce code ?
 
Svp, ... Merci

Reply

Marsh Posté le 31-08-2017 à 18:10:02    

j'ai lancé ça si non :  

Code :
  1. cat Lexique381.txt | grep NOM | awk '{ print($1) }' > Noms.txt

Reply

Marsh Posté le 31-08-2017 à 21:34:24    

gilou a écrit :

:hello: Pour avoir la colonne qui t'intéressait, il suffisait de remplacer  
print if (split(/\t/, $_))[3] ~~ /NOM/;
par  
my @fields = split /\t/;
print $fields[j] if $fields[3] ~~ /NOM/;
ou j est le numéro de la colonne (numérotation débutant à 0)
A+,

Je sais pas comment je pouvais être plus clair:
ou j est le numéro de la colonne (numérotation débutant à 0)
Bref si tu veux la 137e colonne de ton tableau, tu remplaces j par 136 dans le code.
Pour que ça soit lisible, vaudra mieux faire print "$fields[j] " ou print "$fields[j]\n" d'ailleurs.
 
 
A+,


Message édité par gilou le 31-08-2017 à 21:44:13

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 31-08-2017 à 22:50:50    

ok gilou, sorry. thank's.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed