Voici un premier résultat pour les paramètres -m=2 -n=2 -f=2
MMI.zip (temps d'exécution de l'ordre de 45mn, mémoire nécessaire : 2Go min).
Voici un premier résultat pour les paramètres -m=2 -n=2 -f=2
MMI.zip (temps d'exécution de l'ordre de 45mn, mémoire nécessaire : 2Go min).
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Merci Philou
aujourdhui jetais pas au bureau, en deplacement.
Je verifierai ca ce soir quand je rentre
je vous mettrai au courant
aplus
Le jour est le père du labeur et la nuit est la mère des pensées.
J'ai oublié de poster le script en question, le voici :
J'ai commenté la ligne du tie, car la méthode n'est plus nécessaire avec cette version (visiblement, il est préférable d'avoir, en terme de consommation mémoire, n hash de m éléments plutôt qu'un hash de n x m éléments).
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 #!/usr/bin/perl use strict; use warnings; use feature qw(:5.10); use Getopt::Long; use File::Util; use List::Util qw(min sum); use DB_File; use Time::ETA; $|++; # taille sequence dans le fichier initiale, du 2e fichier et frequence my ($n, $m, $f, $size_max) = (1) x 3; my ($in, $out, $result) = (qw(Texte_FR.txt Texte_EN.txt)); GetOptions ('n=i' => \$n, 'm=i' => \$m, 'f=i' => \$f, 'in=s' => \$in, 'out=s' => \$out, 'res=s' => \$result); $size_max = $ARGV[0]; $result //= "MMI-m$m-n$n-f$f".($size_max ? "-$size_max" : "").".txt"; sub get_x_gram($$) { my ($words, $x_gram_size) = @_; $words = [ split /\s+/, $words ] if !ref $words; return map { "@{$words}[$_ .. $_ + $x_gram_size-1]" } 0 .. @$words-$x_gram_size; } sub trim(\$) { my $string = shift; $$string =~ s/^\s+|\s+$//; } my $log2 = log(2); sub log2($) { my $n = shift; return log($n)/$log2; } my $print_progress = 1; my ($total, $size, $eta, $step, $progress); sub init_progress { my ($universe, $auto_step) = @_; $total = (-f $universe ? File::Util->line_count($universe) : ref($universe) eq "HASH" ? scalar(keys %$universe) : ref($universe) eq "ARRAY" ? scalar(@$universe) : $universe); $step = 0; $step = min(23, int($total / 20000) || 0) if defined $auto_step && $auto_step == 1; $eta = Time::ETA->new(milestones => int($total/($step+1))); $progress = 0; } sub progress { my ($line, $pre, $post) = @_; if ($print_progress && $progress++ == $step) { $progress = 0; $eta->pass_milestone(); return ($pre // "").sprintf "%10d/$total %2d%% (remaining %s, elapsed ".int($eta->get_elapsed_seconds()).") $post", $line, $eta->get_completed_percent(), $eta->get_remaining_time(); } } init_progress($size_max // $in); my $line_number = 0; open my $IN, "<", $in or die "Can't open $in for reading: $!\n"; open my $OUT, "<", $out or die "Can't open $out for reading: $!\n"; open my $RESULT, ">", $result or die "Can't open $result for writing: $!\n"; my ($key_total, $m_gram_total, $n_gram_total) = (0) x 3; my %key_count; unlink "key_count_tmp"; my $A = DB_File::HASHINFO->new(); $A->{bsize} = 10000; $A->{nelem} = $total * 100; say "nelem=$A->{nelem}"; #tie %key_count, "DB_File", "key_count_tmp", O_RDWR|O_CREAT, 0666, $A if $total > 100000; keys %key_count = $total * 100 if !tied %key_count; my (%m_gram_count, %n_gram_count); say "Starting"; while (defined(my $words1 = <$IN>)) { print progress(++$line_number, "Counting rules ", scalar(keys %key_count)." \r"); trim($words1); my $words2 = <$OUT>; trim($words2); my @words1 = split /\s+/, $words1; my @m_gram = get_x_gram(\@words1, $m); my %line_m_gram_count; $line_m_gram_count{$_}++ foreach @m_gram; $m_gram_count{$_} += $line_m_gram_count{$_} foreach keys %line_m_gram_count; # Filter m_gram with frequence > $f if (grep $line_m_gram_count{$_} > $f, keys %line_m_gram_count) { my @words2 = split /\s+/, $words2; my @n_gram = get_x_gram(\@words2, $n); foreach my $m_gram (@m_gram) { foreach my $n_gram (@n_gram) { $key_count{$m_gram}->{$n_gram}++; } } my %line_n_gram_count; $line_n_gram_count{$_}++ foreach @n_gram; $n_gram_count{$_} += $line_n_gram_count{$_} foreach keys %line_n_gram_count; $key_total += @m_gram * @n_gram; $m_gram_total += @m_gram; $n_gram_total += @n_gram; } last if $size_max && $line_number >= $size_max; } say ""; say "Counting total rules"; my ($total_rules, $rule) = (sum(map scalar(keys %{$_}), values %key_count), 0); init_progress($total_rules, 1); foreach my $m_gram (sort keys %key_count) { foreach my $n_gram (sort keys %{$key_count{$m_gram}}) { my $mmi = $key_count{$m_gram}->{$n_gram}; $mmi /= $key_total; $mmi *= log2($mmi/($m_gram_count{$m_gram}/$m_gram_total)*($n_gram_count{$n_gram}/$n_gram_total)); print progress($rule++, "Computing MMI ", " \r"); printf { $RESULT } "$m_gram > $n_gram > %.10f\n", $mmi; } }
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Un point : dans les fichiers d'exemples que tu as fourni, la ligne 2 du fichier FR contient une combinaison de mot (séparés par +), alors que la même ligne en version EN n'en possède pas (tous les mots sont séparés). Est-ce normal ? (seulement 5806 lignes contiennent des combinaisons avec + sur les presque 600000 lignes du fichier FR, et aucune dans le fichier EN).
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Merci Philou,
Me voilà ici apres une absence de 4 jours.
J'etais en deplacement, du coup j'arrivaispas à me connecter..
Bref ,
Oui c'est normal, mais bon on vais changer de corpus en supprimant le caractere "+".Un point : dans les fichiers d'exemples que tu as fourni, la ligne 2 du fichier FR contient une combinaison de mot (séparés par +), alors que la même ligne en version EN n'en possède pas (tous les mots sont séparés). Est-ce normal ? (seulement 5806 lignes contiennent des combinaisons avec + sur les presque 600000 lignes du fichier FR, et aucune dans le fichier EN).
Le jour est le père du labeur et la nuit est la mère des pensées.
Mince, je suis sur un nouveau probleme là,
On ma donné un nouveau PC et j'ai passé tout le weekend sur un souci quand j'essaye d'installer CPAN :
cpan
Terminal does not support AddHistory.
Your configuration suggests that CPAN.pm should use a working
directory of
/home/cyrine/.cpan
Unfortunately we could not create the lock file
/home/cyrine/.cpan/.lock
due to permission problems.
Please make sure that the configuration variable
$CPAN::Config->{cpan_home}
points to a directory where you can write a .lock file. You can set
this variable in either a CPAN/MyConfig.pm or a CPAN/Config.pm in your
@INC path;
You don't seem to have a user configuration (MyConfig.pm) yet.
Do you want to create a user configuration now? (Y/n) [yes] y
mkdir /home/cyrine/.cpan/CPAN: Permission denied at /usr/share/perl/5.10/CPAN/Shell.pm line 656
Le jour est le père du labeur et la nuit est la mère des pensées.
As-tu les droits en écriture et en éxecution sur le répertoire /home/cyrine/.cpan ? (et le répertoire /home/cyrine si .cpan n'existe pas)
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Et tu es bien l'utilisateur cyrine ?
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Oui
Le jour est le père du labeur et la nuit est la mère des pensées.
As-tu essayé de créer à la main ce répertoire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part mkdir ~/.cpan
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Moui je vois bien qu'il etait bien un dossier caché. mais j'ai pas le droit de modier les droit d'cces meme manuellement, il m'indique : "you are not the owner, so you cannot change these permissions"n
Bizarre bien que c'e'st moi qui a fait l'installation et tout
Le jour est le père du labeur et la nuit est la mère des pensées.
Il faut donc que tu demandes les droits à ton administrateur.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
J'ai pas d'administrateur, c'est moi le prorietaire de la machine
Le jour est le père du labeur et la nuit est la mère des pensées.
Dans ce cas, donne toi les droits
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Ouffff proble d'installation resolu
Mais là j'ai des souci au niveau du script :
nelem=200
Starting
Counting rules 2/2 100% (remaining 0:00:00, elapsed 0) 0
Counting total rules
Use of uninitialized value $universe in -f at glib.pl line 48, <$IN> line 2.
Use of uninitialized value $total in division (/) at glib.pl line 52, <$IN> line 2.
Use of uninitialized value $total in division (/) at glib.pl line 53, <$IN> line 2.
Parameter 'milestones' should be positive integer. Stopped at glib.pl line 53
Le jour est le père du labeur et la nuit est la mère des pensées.
Pourrais-tu poster le script tel qu'il est chez toi ? Merci.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Effictivement, le code me semble etrange car il est tout ecrit en rose
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 #!/usr/bin/perl use strict; use warnings; use feature qw(:5.10); use Getopt::Long; use File::Util; use List::Util qw(min sum); use DB_File; use Time::ETA; $|++; # taille sequence dans le fichier initiale, du 2e fichier et frequence my ($n, $m, $f, $size_max) = (1) x 3; my ($in, $out, $result) = (qw(Texte_FR.txt Texte_EN.txt)); GetOptions ('n=i' => \$n, 'm=i' => \$m, 'f=i' => \$f, 'in=s' => \$in, 'out=s' => \$out, 'res=s' => \$result); $size_max = $ARGV[0]; $result //= "MMI-m$m-n$n-f$f".($size_max ? "-$size_max" : "").".txt"; sub get_x_gram($$) { my ($words, $x_gram_size) = @_; $words = [ split /\s+/, $words ] if !ref $words; return map { "@{$words}[$_ .. $_ + $x_gram_size-1]" } 0 .. @$words-$x_gram_size; } sub trim(\$) { my $string = shift; $$string =~ s/^\s+|\s+$//; } my $log2 = log(2); sub log2($) { my $n = shift; return log($n)/$log2; } my $print_progress = 1; my ($total, $size, $eta, $step, $progress); sub init_progress { my ($universe, $auto_step) = @_; $total = (-f $universe ? File::Util->line_count($universe) : ref($universe) eq "HASH" ? scalar(keys %$universe) : ref($universe) eq "ARRAY" ? scalar(@$universe) : $universe); $step = 0; $step = min(23, int($total / 20000) || 0) if defined $auto_step && $auto_step == 1; $eta = Time::ETA->new(milestones => int($total/($step+1))); $progress = 0; } sub progress { my ($line, $pre, $post) = @_; if ($print_progress && $progress++ == $step) { $progress = 0; $eta->pass_milestone(); return ($pre // "").sprintf "%10d/$total %2d%% (remaining %s, elapsed ".int($eta->get_elapsed_seconds()).") $post", $line, $eta->get_completed_percent(), $eta->get_remaining_time(); } } init_progress($size_max // $in); my $line_number = 0; open my $IN, "<", $in or die "Can't open $in for reading: $!\n"; open my $OUT, "<", $out or die "Can't open $out for reading: $!\n"; open my $RESULT, ">", $result or die "Can't open $result for writing: $!\n"; my ($key_total, $m_gram_total, $n_gram_total) = (0) x 3; my %key_count; unlink "key_count_tmp"; my $A = DB_File::HASHINFO->new(); $A->{bsize} = 10000; $A->{nelem} = $total * 100; say "nelem=$A->{nelem}"; #tie %key_count, "DB_File", "key_count_tmp", O_RDWR|O_CREAT, 0666, $A if $total > 100000; keys %key_count = $total * 100 if !tied %key_count; my (%m_gram_count, %n_gram_count); say "Starting"; while (defined(my $words1 = <$IN>)) { print progress(++$line_number, "Counting rules ", scalar(keys %key_count)." \r"); trim($words1); my $words2 = <$OUT>; trim($words2); my @words1 = split /\s+/, $words1; my @m_gram = get_x_gram(\@words1, $m); my %line_m_gram_count; $line_m_gram_count{$_}++ foreach @m_gram; $m_gram_count{$_} += $line_m_gram_count{$_} foreach keys %line_m_gram_count; # Filter m_gram with frequence > $f if (grep $line_m_gram_count{$_} > $f, keys %line_m_gram_count) { my @words2 = split /\s+/, $words2; my @n_gram = get_x_gram(\@words2, $n); foreach my $m_gram (@m_gram) { foreach my $n_gram (@n_gram) { $key_count{$m_gram}->{$n_gram}++; } } my %line_n_gram_count; $line_n_gram_count{$_}++ foreach @n_gram; $n_gram_count{$_} += $line_n_gram_count{$_} foreach keys %line_n_gram_count; $key_total += @m_gram * @n_gram; $m_gram_total += @m_gram; $n_gram_total += @n_gram; } last if $size_max && $line_number >= $size_max; } say ""; say "Counting total rules"; my ($total_rules, $rule) = (sum(map scalar(keys %{$_}), values %key_count), 0); init_progress($total_rules, 1); foreach my $m_gram (sort keys %key_count) { foreach my $n_gram (sort keys %{$key_count{$m_gram}}) { my $mmi = $key_count{$m_gram}->{$n_gram}; $mmi /= $key_total; $mmi *= log2($mmi/($m_gram_count{$m_gram}/$m_gram_total)*($n_gram_count{$n_gram}/$n_gram_total)); print progress($rule++, "Computing MMI ", " \r"); printf { $RESULT } "$m_gram > $n_gram > %.10f\n", $mmi; } }
Le jour est le père du labeur et la nuit est la mère des pensées.
Peux-tu aussi poster les paramètres avec lesquels tu as appelé le script pour obtenir de telles erreurs ?
La seule explication que je trouve est que tu n'aurais pas mis d'option -in=<fichier> pour préciser le fichier d'entrée.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
syntaxiquement il est correct? car ya une bonne partie du code qui est ecrit en rose
perl glib.pl -m=2 -n=2 -f=2 1000
Ha ok, je fais -in "fichier 1"
j'ai deux fixhier d'entree
Le jour est le père du labeur et la nuit est la mère des pensées.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager