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 :

temps de calcul en perl


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut temps de calcul en perl
    Bonjour
    j'ai besoin de savoir si il y a une possibilité de réduire le temps de calcul de mon algorithme qui permet de chercher l'ensemble des règles appartenant à une phrase.
    Sachant que j'ai un fichier contenant un ensemble des règles de type (A=>B :Score) qui contient presque 3 millions lignes et 2 autres fichiers f1 et f2 qui contiennent des phrases .Je dois extraire tous les règles tel que que A appartient au phrase de f1 et B appartient au phrase de f2.
    le problème c'est que pour chaque phrase de f1 et f2 je dois parcourir le fichier de règle de 3 millions des lignes et il prend beaucoup de temps.
    Avez vous une idées svp?

  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
    Bonjour,
    au minimum, il doit y avoir moyen de charger ton fichier de règles en mémoire, plutôt que de lire le fichier à chaque fois. Même en chargeant dans un simple tableau, ça devrait déjà aller nettement plus vite.

    Reste à déterminer dans quelle genre de structure en mémoire (un hachage ferait beaucoup beaucoup mieux qu'un tableau). Là, il faudrait que tu expliques mieux à quoi ressemblent ces règles et comment tu les appliques à tes phrases. Peux-tu donner des exemples?

  3. #3
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je travail dans le domaine de traduction et mon but c'est de déterminer les règles qui permet de retourner une traduction exacte du français vers l'anglais
    le fichier règle contient par exemple:
    autorités belges -> belgian authorities : 0.000084, 0.847458
    autorités belges -> that the : 0.000015, 0.152542
    autorités belges -> of the : 0.000049, 0.491525
    contribuer ainsi -> of the : 0.000015, 0.428571
    contribuer ainsi -> contribution to the : 0.000005, 0.142857
    contribuer ainsi -> the creation of : 0.000005, 0.142857...

    et 2 autres fichiers f1 contient des phrase en Fr et f2 contient leurs traduction en En.
    Je dois enfin extraire pour chaque règle fr et sa traduction en la règle ayant un score maximale ( le score est la deuxième flaot par exemple pour la 1 ère règle le score est : 0.847458)
    J'ai bien apprécier votre suggestion de charger le fichier dans une table de hachage , mais je suis débutante dans la programmation perl et je sais pas de quoi il s'agit exactement , merci de me passer un tuto ou de m'explique la procédure de chargement dans un table de hachage.

  4. #4
    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
    L'aspect technique de l'utilisation d'une table de hachage, c'est très simple et on pourra t'expliquer.

    Si je comprends ton problème, tu lis tes deux fichiers textes en parallèle, tu trouve "autorités belges" dans l'un, et "Belgian authorities" dans l'autre et tu recherches le "score" ou la "note" dans le dernier nombre de la ligne de ton fichier de paramétrage, c'est cela?

    S'il s'agit de rechercher le score de "autorités belges -> belgian authorities", alors, oui, une table de hachage serait adaptée et le programme irait considérablement plus vite (au moins 10.000 fois plus vite, peut-être même plus). Le seul obstacle possible est la taille de la mémoire: trois millions de lignes dans une table de hachage, ça devrait sans doute passer, dix millions ça ne passerait peut-être plus. Autrement dit, on n'est pas très loin de la limite. Bon, ça dépend de la mémoire disponible sur ta bécane.

    Idéalement, il faudrait que tu postes ton algorithme actuel (au moins la partie qui fait la recherche), cela me permettrait de mieux comprendre ce que tu fais et de te proposer une éventuelle solution.

  5. #5
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    oui je cherche le "score" ou la "note" dans le dernier nombre de la ligne de mon fichier.
    enfin je dois extraire pour chaque phrase la règle la plus large coté prémisse et ayant un score maximal tel que la prémisse appartient à la phrase fr et la conclusion appartient à la phrase en.
    voici le code de mon algorithme (la partie de recherche des règle)
    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
     
    open(DICO1, "$fichier1")|| die "Problème d'ouverture : $!"; #fichier fr
    open(DICO2, "$fichier2")|| die "Problème d'ouverture : $!";#fichier en
    open(DICO4, ">$fichier4")|| die "Problème d'ouverture : $!";#fichier résultat
    while (my $ligne=<DICO1>) #parcourir le fichier fr
    	{	
    my $ln=<DICO2>; # parcourir le fichier en 
     
    	open(DICO3,"$fichier3")|| die "Problème d'ouverture : $!"; #ouvrir le fichier règle
    	my $val=0;
    			while (my $line=<DICO3>) #parcourir le fichier règle
    				{	
    					my($prem,$conc) = split('->',$line);
    					my @pre=split(/ /, $prem);                          
    					my $con=split(/ /, $conc);
    					my @conclusion=split(':', $conc);
    					my  @c=@conclusion[0];
       foreach my $val(@c)
    	{
    	s/ \w+$//;#supprimer les blancs à la fin @c
            my $val_t = substr ($val,1);#supprimer les blancs au debut de @c
     
    	if (($ln=~m/$val_t/) and ($ligne=~m/@pre/))
               {
     
              print DICO4 $line,"\n";
     
              }
           }
     
    	                      }
              }

  6. #6
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    *****fr***********
    Encore une étape cruciale pour les Balkans
    Depuis que le monde est focalisé sur lIrak la Corée du Nord et une éventuelle crise avec lIran au sujet des armes nucléaires le Kosovo passe un peu inaperçu
    Le public aura bientôt loccasion de tourner à nouveau son attention vers cette province lors dune prise de décision concernant son destin
    Les ÉtatsUnis et leurs amis européens ont à maintes reprises annoncé leur intention de prendre avant la fin de lannée la difficile décision de séparer ou non le Kosovo de la Serbie
    Cette décision cruciale pour lavenir dune région instable mettra à lépreuve la détermination et lunité occidentales
    Les pourparlers de cette année à Vienne orchestrés par les Nations unies ont montré quun accord entre la Serbie et le Kosovo sur un statut final ne verra pas le jour
    Les négociations se poursuivent mais comme la dit avec beaucoup de tact le négociateur de lONU et ancien président finlandais Martti Ahtisaari au conseil de sécurité elles sont mortes dans les faits
    Aucun dirigeant serbe nacceptera lindépendance du Kosovo car le nationalisme demeure la force politique dominante dans le pays
    En effet le Premier ministre Vojislav Kostunica apôtre du nationalisme serbe a tenté par tous les moyens de saper le gouvernement par intérim du Kosovo
    Il se hâte de tenir un référendum national ce moisci sur une nouvelle constitution sans débat parlementaire sérieux ou lhabituelle formation du public

    *******en*********
    Yet a crucial step for the Balkans
    Since the world is focused on Iraq North Korea and a possible crisis with Iran over nuclear weapons Kosovo is somewhat unnoticed
    The public will soon have the opportunity to look again at its attention to this province when a decision regarding its fate
    The Étatsunis and their European friends have repeatedly stated their intention to take before the end of the year the difficult decision to separate Kosovo from Serbia
    This decision crucial to the future of an unstable region will test the resolve and Western unity
    The talks this year in Vienna orchestrated by the United Nations have shown that an agreement between Serbia and Kosovo on a final status will not happen
    Negotiations are continuing but as with much tact negotiator and former Finnish president Martti Ahtisaari the Security Council they died in the facts
    No leader of Serbia will not accept the independence of Kosovo because nationalism remains the dominant political force in the country
    Indeed the Prime Minister Vojislav Kostunica apostle of Serbian nationalism has made every effort to undermine the interim government in Kosovo
    It is eager to hold a national referendum this month on a new constitution without parliamentary debate seriously or the usual training the public
    **********règle********
    utilisation de l -> the use of : 0.000144, 0.409524
    utilisation de l -> use of the : 0.000064, 0.180952
    utilisation de l -> the use of the : 0.000044, 0.123810
    mais il ne peut -> to the : 0.000007, 0.121212
    union européenne à la -> of the european union : 0.000022, 0.154762
    union européenne à la -> the european union to : 0.000022, 0.154762
    la croissance économique et -> economic growth and employment : 0.000025, 0.185185
    la croissance économique et -> for economic growth and : 0.000017, 0.123457
    et la promotion de -> and the promotion of : 0.000020, 0.210526
    politique européenne dans -> policy in the : 0.000008, 0.185185
    des frontières de -> the borders of : 0.000042, 0.235849
    que le problème -> that the problem : 0.000184, 0.280612
    la croissance économique et -> economic growth and employment : 0.000025, 0.185185
    la croissance économique et -> for economic growth and : 0.000017, 0.123457
    pas le cas -> not the case : 0.000407, 0.318063
    aussi importante que -> as important as : 0.000030, 0.360000
    les conséquences de -> consequences of the : 0.000072, 0.130699
    est précisément l -> is precisely the : 0.000022, 0.351351

  7. #7
    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
    Bonjour,

    voici une première solution. Elle fonctionne sur les données que je me suis fabriquées, à toi de voir si ça correspond à ton problème.

    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
    open my $DICO3, "<", $fichier3 or die "ouverture impossible de $fichier3 $!";
    my @rules;
    while (my $line = <$DICO3>) { # chargement des règles dans le tableau @rules
    	my ($rule, $values) = split /:/, $line;
    	my ($rule_fr, $rule_en) = split /->/, $rule;
    	s/\s+$// for ($rule_fr, $rule_en);      # retirer espace à la fin des deux règles
    	s/^\s+// for ($rule_fr, $rule_en);      # retirer espace au début des deux règles
    	push @rules, [$rule_fr, $rule_en, $values];
    }
    close $DICO3;
     
    open(DICO1, "$fichier1")|| die "Problème d'ouverture : $!"; #fichier fr
    open(DICO2, "$fichier2")|| die "Problème d'ouverture : $!";#fichier en
    open(DICO4, ">$fichier4")|| die "Problème d'ouverture : $!";#fichier résultat
    while (my $ligne=<DICO1>) {
    	my $ln=<DICO2>; # parcourir le fichier en 
    	foreach my $record (@rules) {
    		if ( $ligne =~ / $record->[0]/ and $ln =~ /$record->[1]/) {
    			print DICO4 "$record->[0] -> $record->[1] : $record->[2]";
    		}
    	}
    }
    J'essaierai autre chose avec tes données, mais nettement plus tard, je dois faire autre chose maintenant.

  8. #8
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup pour votre aide.

  9. #9
    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
    Bonsoir Insaf,
    si tu continues à me vouvoyer, je vais avoir du mal à t'aider.

  10. #10
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Hhhh d'accord

  11. #11
    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
    Sinon, plus sérieusement, compte tenu du fait que ton dictionnaire de règles peut contenir un nombre variable de mots (entre deux et quatre dans ton exemple, et pas seulement deux comme dans ton exemple précédent), l'approche table de hachage ne me paraît pas possible. Ou du moins pas simplement. Il faut que j'y réfléchisse un peu plus... Il y a peut-être moyen (pas simple) si on peut limiter le nombre de mots d'une règle à une fourchette suffisamment réduite (genre entre 2 et 4 mots), mais au-delà ce sera très vite prohibitif en terme de temps de traitement (le nombre de combinaison à tester explosant exponentiellement, ou plutôt "factoriellement").

Discussions similaires

  1. Temps de calcul d'un algo
    Par Rémiz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/12/2005, 13h52
  2. temps de calcul sius VC++ !!
    Par Axiome dans le forum MFC
    Réponses: 16
    Dernier message: 13/12/2005, 09h57
  3. Temps de calcul avec deux écrans
    Par Shaga dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/11/2005, 09h24
  4. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12
  5. Réponses: 5
    Dernier message: 19/07/2004, 17h27

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