Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
939 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  segmentation core dumped

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

segmentation core dumped

n°2298517
mouda
Posté le 31-03-2017 à 16:27:37  profilanswer
 

Pour un script perl permettant de segmenter une texte en mot , pour un fichier de taille 1,1 Go , j'ai obtenu l'erreur suivante :
panic: POPSTACK
Erreur de segmentation (core dumped)

 
le code est le suivant :

Code :
  1. #Script de Segmentation de corpus en mots
  2.  
  3. use strict;
  4. use utf8;
  5. use autodie;
  6.  
  7. use constant ARABIC_TEXT => '/home/lenovo/Bureau/MesTravaux/ARABICTEXT.txt';
  8. use constant FICHIER_RESULAT   => '/home/lenovo/Bureau/MesTravaux/ARABICTEXT_2.txt';
  9.  
  10.  
  11. open my $fh1, "<:utf8", ARABIC_TEXT;
  12. open my $fh_resultat, '>:utf8', FICHIER_RESULAT;
  13.  
  14. my @tab = <$fh1>;
  15. my $size = $#tab+1;
  16.  
  17. for (my $i = 0; $i < $size; $i++)
  18. {
  19.     chomp();
  20.     chomp($tab[$i]);
  21.  
  22.     my @words = split(/ /, $tab[$i]);
  23.     chomp();
  24.     foreach my $val ( @words )
  25.     {
  26.         chomp();
  27.        chomp($val);
  28.         print $fh_resultat "$val\n"; chomp($val);
  29.     }
  30.     
  31. }
  32.     
  33. close $fh1;
  34. close $fh_resultat;
  35.  
  36. comment je peux résoudre  ce type de problème ??

mood
Publicité
Posté le 31-03-2017 à 16:27:37  profilanswer
 

n°2298519
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2017 à 19:08:18  profilanswer
 

Citation :

comment je peux résoudre  ce type de problème ??

Peut-être en essayant pas de lire tout le fichier d'un coup (ce que my @tab = <$fh1>; fait) mais en faisant la lecture et le traitement ligne par ligne?
 
D'ailleurs tout tes chomp() à part celui de la ligne 20 ne servent à rien.

n°2298520
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2017 à 19:19:47  profilanswer
 

Même si j'ai l'impression que le forum (ou disons gilou) fait ton boulot...
 
CODE SANS GARANTIE etc!
 
De mémoire toutes les versions de Perl à peu près modernes font du Unicode par défault, je pense qu'il est inutile de spécifier utf8 mais je ne suis pas sûr. gilou? :D  
 

Code :
  1. use strict;
  2. use warnings; #<--!!!!!!!!!!!!! OBLIGATOIRE pour un débutant
  3. use utf8;
  4. use autodie;
  5. use constant ARABIC_TEXT => 't1.txt';
  6. use constant FICHIER_RESULAT   => 'ARABICTEXT_2.txt';
  7. open my $fh1, "<:utf8", ARABIC_TEXT;
  8. open my $fh_resultat, '>:utf8', FICHIER_RESULAT;
  9. my $mot;
  10. while(($mot=<$fh1> ))
  11. {
  12.     chomp($mot);
  13.     print $fh_resultat join("\n", split(/ +/, $mot)),"\n";
  14. }
  15.    
  16. close $fh1;
  17. close $fh_resultat;

n°2298521
mouda
Posté le 31-03-2017 à 19:23:37  profilanswer
 

D'abord Merci pour la réponse !!!!
    Même si j'ai l'impression que le forum (ou disons gilou) fait ton boulot...  
je poste mes problèmes et gilou ,comme étant expert en perl, m'aide à les résoudre .. comme les autres font je pense.. ceci est l'objectif du forum non ??

Message cité 1 fois
Message édité par mouda le 31-03-2017 à 19:26:04
n°2298522
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2017 à 19:46:48  profilanswer
 

mouda a écrit :

je poste mes problèmes et gilou ,comme étant expert en perl, m'aide à les résoudre .. comme les autres font je pense.. ceci est l'objectif du forum non ??

C'est que - à mon avis - tu postes beaucoup de problèmes et des choses (très) simples qui prouvent que tu devrais faire un effort pour améliorer ton niveau de Perl ou simplement utiliser un moteur de recherche plutôt que de venir poster pour chaque petit truc. M'enfin bon, inutile de passer 3h à discuter là-dessus, chacun est libre de te répondre ou pas finalement...

n°2298523
mouda
Posté le 31-03-2017 à 19:53:02  profilanswer
 

soit sure que poster est la dernière solution, je sais qu'il existe des moteurs de recherche ...  peut etre pour toi se sont des petites trucs...  
Dans tous les cas tu peux faire un vue et tu passes, tu n'est pas obligé à  me répondre  si mes problèmes te dérange..


Message édité par mouda le 31-03-2017 à 19:54:03
n°2298526
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 21:10:59  profilanswer
 

Si tu enlèves tous les chomp(); ça fait encore coredump?
 
De toute façon ca pouvait se réécrire
 

Code :
  1. use strict;
  2.    use warnings;
  3.    use autodie;
  4.    
  5.    my $file1 = '/home/lenovo/Bureau/MesTravaux/ARABICTEXT.txt';
  6.    my $file2 = '/home/lenovo/Bureau/MesTravaux/ARABICTEXT_2.txt';
  7.    
  8.    
  9.    open my $fh1, "<", $file1;
  10.    open my $fh_resultat, '>', $file2;
  11.    
  12.    my @tab = <$fh1>;
  13.    foreach (@tab) {
  14.        chomp();
  15.        my @words = split(/\s+/, $_);
  16.        foreach (@words ) {
  17.            chomp();
  18.            print $fh_resultat "$_\n";
  19.        }
  20.    }
  21.        
  22.    close $fh1;
  23.    close $fh_resultat;


 
A+,


Message édité par gilou le 31-03-2017 à 21:19:04

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2298530
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2017 à 21:40:10  profilanswer
 

gilou, quel est l'intérêt du chomp() ligne 17 dans ton code? Il ne peut pas y avoir de \n à la fin d'un mot non?
Bonne idée le /\s+/ (et non / +/) pour split, j'ai pas fait gaffe. :o

n°2298534
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 22:19:39  profilanswer
 

Oui, tu as raison ça fait un chomp de trop.
Je peux aussi faire ca sans chomps... :whistle:  

Code :
  1. use strict;
  2.    use warnings;
  3.    use autodie;
  4.    
  5.    my $file1 = '/home/lenovo/Bureau/MesTravaux/ARABICTEXT.txt';
  6.    my $file2 = '/home/lenovo/Bureau/MesTravaux/ARABICTEXT_2.txt';
  7.    
  8.    
  9.    open my $fh1, "<", $file1;
  10.    open my $fh_resultat, '>', $file2;
  11.  
  12.    print $fh_resultat join("\n", (split(/\s+/, $_))), "\n"  while (<$fh1> );
  13.  
  14.    close $fh1;
  15.    close $fh_resultat;


 
A+,

Message cité 1 fois
Message édité par gilou le 31-03-2017 à 22:53:23

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2298537
mouda
Posté le 31-03-2017 à 22:35:36  profilanswer
 

le problème existe toujours, merci pour vos réponses .. je vais réfléchir et chercher encore.

mood
Publicité
Posté le 31-03-2017 à 22:35:36  profilanswer
 

n°2298538
mouda
Posté le 31-03-2017 à 22:36:01  profilanswer
 

le problème existe toujours, merci pour vos réponses .. je vais réfléchir et chercher encore.

n°2298539
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 22:46:56  profilanswer
 

Euh chez moi ça marche (mon dernier post) avec un fichier de lignes de mots arabes (un de tes exemples d'une autre fois)
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2298540
mouda
Posté le 31-03-2017 à 22:50:44  profilanswer
 

gilou a écrit :

Euh chez moi ça marche (mon dernier post) avec un fichier de lignes de mots arabes (un de tes exemples d'une autre fois)
 
A+,


le pblme est du à la grande taille du fichier si nn sur un fichier de petite taille ça marche correctement

n°2298541
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 22:54:21  profilanswer
 

Ce pourquoi j'ai fait une lecture ligne a ligne avec un while.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2298543
mouda
Posté le 31-03-2017 à 22:58:08  profilanswer
 

j'ai déjà testé mais le problème n'est pas résolu, il faut faire un break into chunks et traiter chaque chunk .. ceci permet de résoudre le pblme de memoire

n°2298544
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2017 à 23:55:56  profilanswer
 

gilou a écrit :

Oui, tu as raison ça fait un chomp de trop.
Je peux aussi faire ca sans chomps... :whistle:  

Code :
  1. use strict;
  2.    use warnings;
  3.    use autodie;
  4.    
  5.    my $file1 = '/home/lenovo/Bureau/MesTravaux/ARABICTEXT.txt';
  6.    my $file2 = '/home/lenovo/Bureau/MesTravaux/ARABICTEXT_2.txt';
  7.    
  8.    
  9.    open my $fh1, "<", $file1;
  10.    open my $fh_resultat, '>', $file2;
  11.  
  12.    print $fh_resultat join("\n", (split(/\s+/, $_))), "\n"  while (<$fh1> );
  13.  
  14.    close $fh1;
  15.    close $fh_resultat;


 
A+,

Ca c'est intéressant, il n'y a pas besoin de chomp() effectivement dans ce code puisque split(/\s+/, ...) l'enlève c'est bien ça?  Je vois aussi que tu as viré les :utf8 pour open, j'avais donc raison que c'est le cas/comportement par défaut?
 
edit: perl -pne "s/\s+/\n/g;" <ARABICTEXT.txt >ARABICTEXT_2.txt :D  
 

mouda a écrit :

j'ai déjà testé mais le problème n'est pas résolu, il faut faire un break into chunks et traiter chaque chunk .. ceci permet de résoudre le pblme de memoire

C'est quoi un chunk? J'ai pas testé faute d'un fichier adéquat mais en principe Perl c'est LE language pour faire du traitement de texte et il n'y a pas de limites de taille, en tout cas pas un truc ridicule comme 1,1 Go... (sachant que pour un fichier texte c'est énorme mais pour un fichier tout court non) Tu es sûr que ton problème ne vient pas d'ailleurs? C'est quoi ton code complet?


Message édité par rat de combat le 01-04-2017 à 00:07:40
n°2298545
gilou
Modérateur
Modzilla
Posté le 01-04-2017 à 01:16:49  profilanswer
 

Hier j'avais un document xml qui une fois sérialisé faisait 76Mo, en mémoire, donc plusieurs fois plus gros, manipulé en perl avec LibXML, sans pb.
 
A+,


Message édité par gilou le 01-04-2017 à 01:17:12

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2298547
rat de com​bat
attention rongeur méchant!
Posté le 01-04-2017 à 02:28:07  profilanswer
 

@gilou:

Citation :

un fichier de taille 1,1 Go

(à moins que ce soit une faute de frappe?)

n°2298548
gilou
Modérateur
Modzilla
Posté le 01-04-2017 à 10:33:04  profilanswer
 

Je le pense aussi, parce que la, 96Mo, c'est la taille d'une grosse encyclo juridique avec pas mal de volumes.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2298554
mouda
Posté le 01-04-2017 à 19:17:30  profilanswer
 

ce n'est pas une faute de frappe c'est 1,1 Go (1 054 608 425 octets) (un fichier texte), je pense que c'est un pblme du taille parce que le code marche très bien pour un fichier de petite taille.

n°2298557
gilou
Modérateur
Modzilla
Posté le 02-04-2017 à 15:19:21  profilanswer
 

S'il y a toujours cela dans votre code: my @tab = <$fh1>;  
c'est sur que ca posera probleme pour une grande taille.
Mais comme il y a aucune raison de transformer un fichier en array...
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  segmentation core dumped

 

Sujets relatifs
ERREUR SEGMENTATION CORE DUMPEDFurmulaire php dans un core html/css
erreur de segmentation sur matriceCore.
Core dumped en CProblème core dumped sur pointeur de char
[ C ] Erreur de segmentation (core dumped) 
Plus de sujets relatifs à : segmentation core dumped


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR