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 :

Probleme de calcul de Probabilité


Sujet :

Langage Perl

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut Probleme de calcul de Probabilité
    Bonjour à tous
    Je suis entrain de bosser actuellement sur un script qui calcule les probabilité des séquence de mots dans 2 fichier texte et là je trouve un probleme au niveau de Perl.
    Je decris la situation :
    J'ai deux fichier :
    fichier 1 : Fichier 2:

    Bonjour les amis Good morning my friends
    Bonjour Good morning



    Je suis entrain de cehrcher une methose pour calculer la probabilté P(Bonjour, Good morning)
    sachant que ici:
    P(Bonjour, Good morning) = nombre de fois où je trouve "bonjour" et "good morning" divisé par (nombre de mot du fichier1* nombre de sequence de taille 2 du fichier2)

    Je vois que c'est compliqué Mais je garde toujours l'espoir en vos compétences.

    Merci
    Le jour est le père du labeur et la nuit est la mère des pensées.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je ne vois rien de bien compliqué, ou alors j'ai loupé quelque chose.

    Il suffit de parcourir séquentiellement chacun des fichiers, de décompter le nombre d'occurrences des mots ou suites de mots recherchés, le nombre total de mots et le nombre de séquences.

    C'est simple, mais tu ne définis pas assez précisément le problème (par ex., c'est quoi une séquence de taille 2?)

  3. #3
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Je ne vois rien de bien compliqué, ou alors j'ai loupé quelque chose.

    Il suffit de parcourir séquentiellement chacun des fichiers, de décompter le nombre d'occurrences des mots ou suites de mots recherchés, le nombre total de mots et le nombre de séquences.

    C'est simple, mais tu ne définis pas assez précisément le problème (par ex., c'est quoi une séquence de taille 2?)
    Merci Lolo, comme d'hab tu viens à mon aide
    Tu pense que je dois mettre des table de hach?
    Le jour est le père du labeur et la nuit est la mère des pensées.

  4. #4
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Je trouve que c'est compliqué de ce cote
    Par exemple

    J'ai ce fichier 1 :

    Bonjour les amis
    Bonjour

    Fichier 2:

    Good morning friends good morning
    Good morning

    je veux calculer la prob P(Good morning, bonjour)
    = 3/15= 1/5

    C'est compliqué ca
    Le jour est le père du labeur et la nuit est la mère des pensées.

  5. #5
    Membre du Club
    Homme Profil pro
    BioInformaticien
    Inscrit en
    Décembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BioInformaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2012
    Messages : 49
    Points : 63
    Points
    63
    Par défaut
    N'hésites pas à nous donner ton avancement actuel que l'on comprenne exactement ou est ce que tu bloques dans ton code.

    Si je comprend bien il faut sommer le nombre de mots ? Tu peux le faire en faisant un split au niveau des espaces et en comptant la taille de ton tableau.
    Pour savoir le nombre de fois que tu as un mot spécifique, tu peux utiliser ce même tableau, le parcourir, et rechercher quand ton mot correspond au terme de ton tableau

  6. #6
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci trex7g2 pour votre reponse,
    En fait je viens de commencer le travail sur ce scriptje bloque sur cette etape :
    si jai ligne 1 fichier1 :

    bonjour les amis bonjour

    Ligne1 fichier2
    good morning

    lle blocage c'est à ce niveau de calcul de frequence où (bonjour et good) occurent ensemble:
    ici on trouve quil apparaissent 2 fois

    (2fois bonjour et 1 fois morning)
    Le jour est le père du labeur et la nuit est la mère des pensées.

  7. #7
    Membre du Club
    Homme Profil pro
    BioInformaticien
    Inscrit en
    Décembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BioInformaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2012
    Messages : 49
    Points : 63
    Points
    63
    Par défaut
    quelque chose dans ce gout la ?

    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
    use strict;
    my $file1="bonjour les amis bonjour";
    my $file2="good morning";
    my @Search=("good","bonjour");
    chomp $file1;
    chomp $file2;
    my $NumberOfMatch=0;
    my $line= $file1." ".$file2; ## je concatène pour éviter d'avoir deux tableaux, puisque ceux ci sont équivalents.
    foreach my $sentence (@Search){ # je recherche mot à mot
    	my $Nb= ($line =~ s/$sentence/$sentence/gi); ## je n'arrive pas a compter avec des matchs. 
    	$NumberOfMatch+=$Nb
    }
    print "$NumberOfMatch\n";
    my @Size = split (" ",$line);
    print $#Size+1;
    print "\n";

  8. #8
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par trex7g2 Voir le message
    quelque chose dans ce gout la ?

    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
    use strict;
    my $file1="bonjour les amis bonjour";
    my $file2="good morning";
    my @Search=("good","bonjour");
    chomp $file1;
    chomp $file2;
    my $NumberOfMatch=0;
    my $line= $file1." ".$file2; ## je concatène pour éviter d'avoir deux tableaux, puisque ceux ci sont équivalents.
    foreach my $sentence (@Search){ # je recherche mot à mot
    	my $Nb= ($line =~ s/$sentence/$sentence/gi); ## je n'arrive pas a compter avec des matchs. 
    	$NumberOfMatch+=$Nb
    }
    print "$NumberOfMatch\n";
    my @Size = split (" ",$line);
    print $#Size+1;
    print "\n";
    Merci Trex

    Mais là avec ce ptit exemple il a affiché 3 or :

    "bonjour les amis bonjour";
    "good morning";

    alors nombre de occurence de ("good","bonjour"); = 2
    Le jour est le père du labeur et la nuit est la mère des pensées.

  9. #9
    Membre du Club
    Homme Profil pro
    BioInformaticien
    Inscrit en
    Décembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BioInformaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2012
    Messages : 49
    Points : 63
    Points
    63
    Par défaut
    en fait je crois que je n'ai pas compris :
    P(Bonjour, Good morning) = nombre de fois où je trouve "bonjour" et "good morning" divisé par (nombre de mot du fichier1* nombre de sequence de taille 2 du fichier2)

    du coup j'ai juste fais la somme du nombre d'occurence de "good morning" et du nombre d'occurence de "bonjour".

  10. #10
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Effectivement, le denominateur est juste
    mais le probleme c'est au niveau du nominateur :
    qui est "le produit cartesien" dison de apparaition dans la ligne

    par exemple
    good (1seule fois dans la ligne)
    bonjour (1 ,1) 2 foid à ligne 1

    donc le nombre (nominateur) = 1*1+1*1 =2

    Le jour est le père du labeur et la nuit est la mère des pensées.

  11. #11
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Ou encore c'est l'intersection à la place de produit cartesien
    intersection entre (1,1) et (1) = 2
    Le jour est le père du labeur et la nuit est la mère des pensées.

  12. #12
    Membre du Club
    Homme Profil pro
    BioInformaticien
    Inscrit en
    Décembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BioInformaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2012
    Messages : 49
    Points : 63
    Points
    63
    Par défaut
    han...le produit quoi.

    ligne 11 remplace :
    par :
    (si c'est pas ça je crois que c'est parce que les maths et moi ça fait trop longtemps... )

  13. #13
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par trex7g2 Voir le message
    han...le produit quoi.

    ligne 11 remplace :
    par :
    (si c'est pas ça je crois que c'est parce que les maths et moi ça fait trop longtemps... )
    oui
    il affiche 0

    c'est compliqué je sais
    Le jour est le père du labeur et la nuit est la mère des pensées.

  14. #14
    Membre du Club
    Homme Profil pro
    BioInformaticien
    Inscrit en
    Décembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BioInformaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2012
    Messages : 49
    Points : 63
    Points
    63
    Par défaut
    je reste caché
    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
    use strict;
    my $file1="bonjour les amis bonjour";
    my $file2="good morning";
    my @Search=("good","bonjour");
    chomp $file1;
    chomp $file2;
    my $NumberOfMatch=0;
    my $i;
    my $line= $file1." ".$file2; ## je concatène pour éviter d'avoir deux tableaux, puisque ceux ci sont équivalents.
    foreach my $sentence (@Search){ # je recherche mot à mot
    $i++;
    	my $Nb= ($line =~ s/$sentence/$sentence/gi);
    	if ($i==1){
    		$NumberOfMatch=$Nb;
    	}
    	else{
    		$NumberOfMatch*=$Nb;
    	}
    }
    print "$NumberOfMatch\n";
    my @Size = split (" ",$line);
    print $#Size+1;
    print "\n";

  15. #15
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci
    Le jour est le père du labeur et la nuit est la mère des pensées.

  16. #16
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Etoile de mer, cela veut-il dire que ton problème est résolu? Je pose la quiestion parce que je ne suis pas sûr d'avoir parfaitement compris ton besoin et ne peux donc juger si le code satisfait ce besoin.

    Une petite remarque sur le code proposé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach my $sentence (@Search){ # je recherche mot à mot
    $i++;
    	my $Nb= ($line =~ s/$sentence/$sentence/gi);
    	if ($i==1){
    		$NumberOfMatch=$Nb;
    	}
    	else{
    		$NumberOfMatch*=$Nb;
    	}
    }
    Ceci me semble inutilement compliqué. A moins que je manque quelque chose, la variable $i est inutile car on peut écrire dans tous les cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach my $sentence (@Search){ # je recherche mot à mot
    	my $Nb= ($line =~ s/$sentence/$sentence/gi);
    	$NumberOfMatch*=$Nb;
    }
    à condition d'initialiser $NumberOfMatch à 1 avant d'entrer dans la boucle.

  17. #17
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Oui, tu as raison Lolo, ce n'est pas encore fini.
    Là on a travaillé sur un ti exemple..
    mais reelemnt jai 2 fichier, et selon le parametre que l'utilisateur tape , je vais extraire des sequence de mots de tailles precisé par l(user.
    Par exemple s'il tape m=2 n=2
    alors
    on va extraire tous les paires de mots contigues dans les 2 fichier..
    Le jour est le père du labeur et la nuit est la mère des pensées.

  18. #18
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    use strict;
    my $file1="bonjour les amis bonjour";
    my $file2="good morning";
    my @Search=("bonjour les","good");
    chomp $file1;
    chomp $file2;
    my $NumberOfMatch=0;
    my $i;
    my $line= $file1." ".$file2; ## je concatène pour éviter d'avoir deux tableaux, puisque ceux ci sont équivalents.
    foreach my $sentence (@Search){ # je recherche mot à mot
    my $Nb= ($line =~ s/$sentence/$sentence/gi);
    $NumberOfMatch*=$Nb;
    }
    print "$NumberOfMatch\n";
    my @Size = split (" ",$line);
    print $#Size+1;
    print "\n";
    Je ne sais pas trop , mais cette proposition donne un resultat nul ce qui est faux
    Le jour est le père du labeur et la nuit est la mère des pensées.

  19. #19
    Membre du Club
    Homme Profil pro
    BioInformaticien
    Inscrit en
    Décembre 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BioInformaticien
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2012
    Messages : 49
    Points : 63
    Points
    63
    Par défaut
    oui initialiser à 1 est bien aussi quand on fait une multiplication... Je m'en suis rendu compte après avoir fait la correction de mon script sans réfléchir .

    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
     use strict;
    my $file1="bonjour les amis bonjour";
    my $file2="good morning";
    my @Search=("bonjour les","good");
    chomp $file1;
    chomp $file2;
    my $NumberOfMatch=1;
    my $line= $file1." ".$file2; ## je concatène pour éviter d'avoir deux tableaux, puisque ceux ci sont équivalents.
    foreach my $sentence (@Search){ # je recherche mot à mot
    my $Nb= ($line =~ s/$sentence/$sentence/gi);
    $NumberOfMatch*=$Nb;
    }
    print "$NumberOfMatch\n";
    my @Size = split (" ",$line);
    print $#Size+1;
    print "\n";
    De la même manière tu n'as pas besoin de faire une substitution. C'est juste "moins compréhensible" en faisant un match.

    Maintenant etoile, il suffit que tu lises tes deux fichiers ligne à ligne pour remplir les variables $file1 et $file2 avec les données de ton fichier. N'hésites pas a demander si tu ne sais pas comment faire.

  20. #20
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Trex,
    Là je suis trop perdu,
    J'ai deux bouts de code que j'ai fait à part, mais jarrive pas à les integrer
    Le jour est le père du labeur et la nuit est la mère des pensées.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 9 12345 ... DernièreDernière

Discussions similaires

  1. Probleme de calcul :S
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2005, 20h06
  2. algorithme pour calcul de probabilité
    Par filsdugrand dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 14/12/2005, 14h11
  3. probleme de calculs : 1-0.9 = 0.099999999999998
    Par francon81 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/06/2005, 14h17
  4. Petit probleme de calcul...
    Par Mistoufline dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 17/05/2005, 16h52
  5. [Conversion]Probleme de calcul en double et en floatant
    Par TOPGUN89 dans le forum Général Java
    Réponses: 2
    Dernier message: 18/04/2005, 17h46

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