IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Calcul de densité


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 43
    Points : 24
    Points
    24
    Par défaut Calcul de densité
    Salut

    J'ai un problème avec mon algo de calcul de densité (de mots)

    Voici mon code qui marche pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!C:/Perl/bin/perl.exe -w
     
     
    my $keywords = $head{keywords};
     
    my $code_page_data = $code{$code_page};
     
      if ($keywords =~ /,/g)
      {
        my @keywords = split/,/, $keywords;
      }
      else {
     
        my @keywords = split/, /, $keywords;
     
      }
     
      @keywords = evaluate(@keywords);
     
      #------------------------------------------#
      #               Evaluation                 #
      #------------------------------------------#
     sub evaluate
     {
     for $eval(@_) {
     my $code_page_do = $code_page_data;
      my $mot = "$eval";
       my $chaine = $code_page_do;
        my $count = 0;
        while ($chaine =~ /$mot/isg) { $count++ }
        my @cmp = split/ /, $eval;
       my $count_chaine = $#cmp + 1;
       my $percent = $mot * $count_chaine / 100;
      return $percent;
      }
    }
    en fait je voudrais faire un algo qui puisse calculer la densité et le nombre d'occurence des mots d'un fichier comme sa


    %occ = (

    maison_density => "40%";

    maison_occurence => "30";


    );
    en clair associer chaque mot de mon documant avec sont nombre d'occurence et sa densité dan le document en question.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut

    Ton problème m'a intéressé et je te propose la solution suivante. Je me suis basé sur ce petit fichier test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    toto
    toto
    tata
    tutu
    toto
    tata
    lolo
    lulu
    lili
    Et voici le script que j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #!/usr/bin/perl -w
     
    use strict;
    use Carp;
     
    sub calcul_occurence(){
    	my %occur = ();
    	my $tablo = $_[0];
    	foreach my $word (@$tablo){
    		if (! $occur{$word}){
    			$occur{$word} = 1;
    		}
    		else {
    			$occur{$word}++;
    		}
    	}
     
    	return %occur;
    }
     
    my $text;
    if ($ARGV[0] eq ""){
    	print "Il faut un fichier en argument !\n";
    	exit 1;
    }
    open FILE, "< $ARGV[0]" or die "$!\n";
    while(<FILE>){
    	$text .= $_;
    }
    close FILE;
     
    #On splitte avec les espaces
    my @tablo = split/\s/,$text;
    my %occurence = &calcul_occurence(\@tablo);
     
    print "Rapport des occurences et de la densité de $ARGV[0]\n\n";
    foreach my $word(keys(%occurence)){
    	my $densite = ($occurence{$word}*100)/$#tablo+1;
    	print "$word apparaît $occurence{$word} fois et sa densité est $densite%.\n";
    }
    Je me base en fait sur la taille du tableau où je récupère le texte splitté et sur les occurences de chaque mot que j'ai récupéré dans une table de hachage.
    J'espère t'avoir aidé.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Sa marche mais moi dans mon script je télécharger les fichiers avec LWP donc mettre le fichier en argument n'est vraiment pas pratique
    encore un truc (je suis chiant hein) comment je fait pour avoir un litse du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %occ = (
     
              $chaque_mot => "$nbre_occurence",
     
              $chaque_mot => "$sa_densité"
     
                 );
    au lieun de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$word apparaît $occurence{$word} fois et sa densité est $densite%.\n";

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Oui, oui, je suis d'accord tu es très ch.......armant !
    Blague à part, ça devrait pas être trop compliqué pour toi de récupérer tes fichiers via LWP et de les stocker sour forme de liste. Pour cela, il faudrait que tu me montres ton code. Comme ça, pour chaque fichier, tu fais un calcul de densité.
    Sinon, concernant ta dernière remarque, tu as remarqué que j'utilise comme clé de ma table de hachage les mots. J'évite ainsi les doublons. Rien ne t'empêche de stocker pour chaque clé (ie mot) un array qui contiendrait 2 valeurs : le nombre d'occurences du mot et sa densité.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Un truc du genre

    @densite = ("$word","$occurence{$word}","$word","$densite%");

    my %densite = @densite;

    ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %densite = (
     
                      $word => "$occurende{$word}"
     
                      $word => "$densite%"
     
     
                      );
    Et voila mon code de test (sans mon code de calcul pour**)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!C:/PROGRA~1/Perl/bin/perl.exe -w
     
    my @liste_de_fichier = ("http://mansonfr.com/02.php3");
     
     
       @liste_de_fichier = pomper(@liste_de_fichier);
     
       print "@liste_de_fichier\n";
     
     
    sub pomper
    {
    use LWP::Simple;
    for my $URL( @_ ) {
        my $c = get($URL);
        return $c;
      }
    }

  6. #6
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    par exemple, comme tu le suggère. Là dessus, y a pas une méthode qui soit bonne, il y en a des tonnes.
    Par contre, je vais voir comment cabler la fonction que je t'ai donné avec LWP. Ca devrait pas être complexe.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Hello

    Voici une mise à jour du script que je t'ai proposé tantôt. Voilà comment je le câble avec LWP::Simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #!/usr/bin/perl -w
     
    use strict;
    use Carp;
    use LWP::Simple;
     
    sub calcul_occurence(){
    	my %occur = ();
    	my $tablo = $_[0];
     
    	foreach my $word (@$tablo){
    		if (! $occur{$word}){
    			$occur{$word} = 1;
    		}
    		else {
    			$occur{$word}++;
    		}
    	}
     
    	return %occur;
    }
     
    sub pomper
    {
    	for my $URL( @_ ) {
    		my $c = get($URL);
    		return $c;
    	}
    }
     
    ####################MAIN#########################
     
    my @liste_de_fichier = ("http://mansonfr.com/02.php3");
    my $text = pomper(@liste_de_fichier);
    #On splitte avec les espaces
    my @tablo = split/\s/,$text;
    my %occurence = &calcul_occurence(\@tablo);
     
    print "Rapport des occurences et de la densité de $ARGV[0]\n\n";
    foreach my $word(keys(%occurence)){
    	my $densite = ($occurence{$word}*100)/$#tablo+1;
    	print "$word apparaît $occurence{$word} fois et sa densité est $densite%.\n";
    }
    Bon, bien sûr, le résultat est pas très éloquent. A toi de splitter correctement.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

Discussions similaires

  1. Calcul des densités spectrales
    Par yass6886 dans le forum Signal
    Réponses: 0
    Dernier message: 05/04/2012, 20h29
  2. Réponses: 2
    Dernier message: 16/07/2010, 17h50
  3. creation outil calcul de densité mots clé (selectionner les balises)
    Par christophelsm2 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 17/06/2009, 17h28
  4. calcul de densité spectral d'un signal
    Par jena dans le forum Signal
    Réponses: 2
    Dernier message: 15/04/2009, 13h17
  5. Réponses: 14
    Dernier message: 02/04/2008, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo