function copyAndPasteWithNoise($myImageSrc,$myImageDest,$dimImage,$strength) {
$maxNoise = $dimImage[0]*$dimImage[1];
$noise = intval(rand(0.1*$maxNoise,$maxNoise));
for($i = 0 ;
$i < $noise ;
$i++) { $width = rand(1,$strength);
$height = rand(1,$strength);
$srcX = rand(0,$dimImage[0]-$strength);
$srcY = rand(0,$dimImage[1]-$strength);
$currColor = imagecolorat($myImageSrc,$srcX,$srcY);
if(isCloseColor($myImageSrc,$currColor,255,255,255,2)) continue;
$destX = rand($srcX - $strength,$srcX + $strength);
$destY = rand($srcY - $strength,$srcY + $strength);
$xplusw = $srcX + $width;
if($xplusw >= $dimImage[0]) $width -= $xplusw - $dimImage[0];
$yplush = $srcY + $height;
if($yplush >= $dimImage[1]) $height -= $yplush - $dimImage[1];
if($destX < 0) $destX = 0;
if($destY < 0) $destY = 0;
$dxplusw = $destX + $width;
if($dxplusw >= $dimImage[0]) $destX -= $dxplusw - $dimImage[0];
$dyplush = $destY + $height;
if($dyplush >= $dimImage[1]) $destY -= $dyplush - $dimImage[1];
imagecopy($myImageDest,$myImageSrc,$destX,$destY,$srcX,$srcY,$width,$height);
} } function copyAndPasteNormal($myImageSrc,$myImageDest,$dimImage,$strength) {
$maxNoise = rand(intval($strength/2),intval($strength*5));
if($maxNoise == 0) $maxNoise = 1;
for($i = 0 ;
$i < $maxNoise ;
$i++) { $width = rand(5,intval($dimImage[0]/5));
$height = rand(5,intval($dimImage[1]/5));
$srcX = rand(0,$dimImage[0]-5);
$srcY = rand(0,$dimImage[1]-5);
$destWidth = $width;
$destHeight = $height;
$ratioX = $destWidth/$width;
$ratioY = $destHeight/$height;
$destX = rand($srcX - intval(5*$ratioX),$srcX + intval(5*$ratioX));
$destY = rand($srcY - intval(5*$ratioY),$srcY + intval(5*$ratioY));
$xplusw = $srcX + $width;
if($xplusw >= $dimImage[0]) $width -= $xplusw - $dimImage[0];
$yplush = $srcY + $height;
if($yplush >= $dimImage[1]) $height -= $yplush - $dimImage[1];
if($destX < 0) $destX = 0;
if($destY < 0) $destY = 0;
$dxplusw = $destX + $destWidth;
if($dxplusw >= $dimImage[0]) $destX -= $dxplusw - $dimImage[0];
$dyplush = $destY + $destHeight;
if($dyplush >= $dimImage[1]) $destY -= $dyplush - $dimImage[1];
imagecopy($myImageDest,$myImageSrc,$destX,$destY,$srcX,$srcY,$width,$height);
} } function copyAndPasteDeform($myImageSrc,$myImageDest,$dimImage,$strength) {
$maxNoise = rand(intval($strength/2),intval($strength*5));
if($maxNoise == 0) $maxNoise = 1;
for($i = 0 ;
$i < $maxNoise ;
$i++) { $width = rand(5,intval($dimImage[0]/5));
$height = rand(5,intval($dimImage[1]/5));
$srcX = rand(0,$dimImage[0]-5);
$srcY = rand(0,$dimImage[1]-5);
$destWidth = rand($width,intval(2.5*$width));
$destHeight = rand($height,intval(2.5*$height));
$ratioX = $destWidth/$width;
$ratioY = $destHeight/$height;
$destX = rand($srcX - intval(5*$ratioX),$srcX + intval(5*$ratioX));
$destY = rand($srcY - intval(5*$ratioY),$srcY + intval(5*$ratioY));
$xplusw = $srcX + $width;
if($xplusw >= $dimImage[0]) $width -= $xplusw - $dimImage[0];
$yplush = $srcY + $height;
if($yplush >= $dimImage[1]) $height -= $yplush - $dimImage[1];
if($destX < 0) $destX = 0;
if($destY < 0) $destY = 0;
$dxplusw = $destX + $destWidth;
if($dxplusw >= $dimImage[0]) $destX -= $dxplusw - $dimImage[0];
$dyplush = $destY + $destHeight;
if($dyplush >= $dimImage[1]) $destY -= $dyplush - $dimImage[1];
imagecopyresized($myImageDest,$myImageSrc,$destX,$destY,$srcX,$srcY,$destWidth,$destHeight,$width,$height);
} } function check_extension($file,$extensions) { $extension = strrchr($file, '.');
return in_array($extension, $extensions);
} sub deuxiemePassage { my $ligne;
my $indLigne;
my $lastRatio;
my $compteur = 0;
my $poeme = undef;
while(<fREC>) {
chomp;
$ligne = $_;
my @Ligne = split(/\s+/,$ligne);
if($poeme) { &retournementPoetivites ($poeme);
}
$poeme = $1;
$compteur++;
print fLOG "\tPoeme " . $compteur . " : " . $poeme . "\n";
$indLigne = 0;
$lastRatio = undef;
next;
}
my $nbMotsLigne = scalar(@Ligne);
if($nbMotsLigne == 0) { next;
}
my $mot;
$indLigne++;
for(my $indMot = 1 ;
$indMot <= $nbMotsLigne ;
$indMot++) {
$mot = $Ligne[$indMot-1];
if(exists($Symboles{$mot})) { next;
} if(length($mot) == 1 && !exists($Symboles{$mot}) && !exists($Voyelles{$mot}) && !exists($Consonnes{$mot})) { next;
}
$mot = &nettoieMot($mot);
my $poetivite = 0;
$poetivite += max(values(%Mots)) / $Mots{$mot};
my $nbLettresMot = length($mot);
$poetivite *= abs($nbLettresMot - $Recueil{$poeme}{"longueur_mot_moyenne"});
$poetivite *= 1 + $indLigne / $Recueil{$poeme}{"nombre_lignes"};
$poetivite *= 1 + $indMot / $nbMotsLigne;
my @Mot = split(//,$mot);
my $nbVoyelles = 0;
my $nbConsonnes = 0;
my $nbSymboles = 1;
foreach my $lettre (@Mot) { if (exists $Voyelles{$lettre}) { $Voyelles{$lettre}++;
$nbVoyelles ++;
} else { if (exists $Consonnes{$lettre}) { $Consonnes{$lettre}++;
$nbConsonnes ++;
} else { if (exists $Symboles{$lettre}) { $Symboles{$lettre}++;
$nbSymboles ++;
} else { print "Lettre $lettre non identifiable dans $mot à la ligne $indLigne\n";
next;
} } } } if($mot =~ m/au/) {$nbVoyelles--;
}
my $ratio = $nbVoyelles / $nbLettresMot;
if($ratio == 0 || $ratio == 1) { $poetivite *= $nbLettresMot;
if($lastRatio) { if(($lastRatio - $ratio) == 0) { $poetivite *= $nbLettresMot * $nbLettresMot;
} } } else { if($ratio < (1/3)) { $poetivite *= 1/$ratio;
if($lastRatio) { if($ratio <= $lastRatio) { $poetivite *= $lastRatio / $ratio + 1;
} } } else { if($ratio > (2/3)) { $poetivite *= 1/(1-$ratio);
if($lastRatio) { if($ratio >= $lastRatio) { $poetivite *= $ratio / $lastRatio + 1;
} } } else {$poetivite *= 1;
} } } $lastRatio = $ratio;
if($mot =~ /'/) {$nbSymboles--;
} $poetivite *= 1 + $nbSymboles;
if (exists $Symboles{$Mot[0]}) { $poetivite *= 1 + $nbSymboles;
}
$poetivite = int($poetivite + 0.5);
push(@{$Recueil{$poeme}{"Mots"}{$mot}},$poetivite);
}
}
&retournementPoetivites($poeme);
} sub deuxiemePassage { my $ligne;
my $indLigne;
my $lastRatio;
my $compteur = 0;
my $poeme = undef;
while(<fREC>) {
chomp;
$ligne = $_;
my @Ligne = split(/\s+/,$ligne);
if($poeme) { &retournementPoetivites ($poeme);
}
$poeme = $1;
$compteur++;
print fLOG "\tPoeme " . $compteur . " : " . $poeme . "\n";
$indLigne = 0;
$lastRatio = undef;
next;
}
my $nbMotsLigne = scalar(@Ligne);
if($nbMotsLigne == 0) { next;
}
my $mot;
$indLigne++;
for(my $indMot = 1 ;
$indMot <= $nbMotsLigne ;
$indMot++) {
$mot = $Ligne[$indMot-1];
if(exists($Symboles{$mot})) { next;
} if(length($mot) == 1 && !exists($Symboles{$mot}) && !exists($Voyelles{$mot}) && !exists($Consonnes{$mot})) { next;
}
$mot = &nettoieMot($mot);
my $poetivite = 0;
$poetivite += max(values(%Mots)) / $Mots{$mot};
my $nbLettresMot = length($mot);
$poetivite *= abs($nbLettresMot - $Recueil{$poeme}{"longueur_mot_moyenne"});
$poetivite *= 1 + $indLigne / $Recueil{$poeme}{"nombre_lignes"};
$poetivite *= 1 + $indMot / $nbMotsLigne;
my @Mot = split(//,$mot);
my $nbVoyelles = 0;
my $nbConsonnes = 0;
my $nbSymboles = 1;
foreach my $lettre (@Mot) { if (exists $Voyelles{$lettre}) { $Voyelles{$lettre}++;
$nbVoyelles ++;
} else { if (exists $Consonnes{$lettre}) { $Consonnes{$lettre}++;
$nbConsonnes ++;
} else { if (exists $Symboles{$lettre}) { $Symboles{$lettre}++;
$nbSymboles ++;
} else { print "Lettre $lettre non identifiable dans $mot à la ligne $indLigne\n";
next;
} } } } if($mot =~ m/au/) {$nbVoyelles--;
}
my $ratio = $nbVoyelles / $nbLettresMot;
if($ratio == 0 || $ratio == 1) { $poetivite *= $nbLettresMot;
if($lastRatio) { if(($lastRatio - $ratio) == 0) { $poetivite *= $nbLettresMot * $nbLettresMot;
} } } else { if($ratio < (1/3)) { $poetivite *= 1/$ratio;
if($lastRatio) { if($ratio <= $lastRatio) { $poetivite *= $lastRatio / $ratio + 1;
} } } else { if($ratio > (2/3)) { $poetivite *= 1/(1-$ratio);
if($lastRatio) { if($ratio >= $lastRatio) { $poetivite *= $ratio / $lastRatio + 1;
} } } else {$poetivite *= 1;
} } } $lastRatio = $ratio;
if($mot =~ /'/) {$nbSymboles--;
} $poetivite *= 1 + $nbSymboles;
if (exists $Symboles{$Mot[0]}) { $poetivite *= 1 + $nbSymboles;
}
$poetivite = int($poetivite + 0.5);
push(@{$Recueil{$poeme}{"Mots"}{$mot}},$poetivite);
}
}
&retournementPoetivites($poeme);
} print "\n\nSpectromie...\n\n";
open fREC, "<$recueilFile" or die "Impossible d'ouvrir le recueil !\n";
my $specFile;
if($recueilFile =~ m/^(\S+)\.\w+$/) { $specFile = $1;
} else { $specFile = $recueilFile;
} $specFile .= "_spec.txt";
open fSPEC, ">$specFile" or die "Impossible de créer le fichier log !\n";
my %Poetivites;
my %SampledRecueil;
&spectromie;
close fREC;
close fSPEC;
print "\n\nPoedilation...\n\n";
my @choix = sort( {$a <=> $b or $a cmp $b} keys(%SampledRecueil));
my $num_choix = 1;
foreach my $choice (@choix) { print "[" . sprintf("%2s",$num_choix) . "] " . $choice . "\n";
$num_choix++;
} my $zeChoix = "non";
while (!($zeChoix =~ m/^\d+$/ && $zeChoix >= 1 && $zeChoix <= scalar(@choix))) { print "\nentrer le numero du poeme choisi pour la poedilation :\n";
$zeChoix = <STDIN>;
} chomp($zeChoix);
$zeChoix--;
my $poeme_choisi = $choix[$zeChoix];
my $total_mots = 0;
foreach (keys(%{$SampledRecueil{$poeme_choisi}})) { $total_mots += scalar @{$SampledRecueil{$poeme_choisi}{$_}{"mots"}};
} print "\npoedilation de \"" . $poeme_choisi . "\" (" . $total_mots . " mots)...\n";
my $degreP = "non";
while (!($degreP =~ m/^\d+$/ && $degreP >= 1)) { print "\nEntrer le degre de poedilation :\n";
$degreP = <STDIN>;
} chomp($degreP);
&poedilation($poeme_choisi,$degreP);
open fPOE, ">poetivites.txt" or die;
foreach my $poetivite (sort( {$a <=> $b} keys(%{$Poetivites{"recueil"}}))) { print fPOE $poetivite . "\t";
foreach my $mot (@{$Poetivites{"recueil"}{$poetivite}}) { print fPOE $mot . "\t";
} print fPOE "\n";
} close fPOE;
exit(0);
function copyAndPasteWithNoise($myImageSrc,$myImageDest,$dimImage,$strength) {
$maxNoise = $dimImage[0]*$dimImage[1];
$noise = intval(rand(0.1*$maxNoise,$maxNoise));
for($i = 0 ;
$i < $noise ;
$i++) { $width = rand(1,$strength);
$height = rand(1,$strength);
$srcX = rand(0,$dimImage[0]-$strength);
$srcY = rand(0,$dimImage[1]-$strength);
$currColor = imagecolorat($myImageSrc,$srcX,$srcY);
if(isCloseColor($myImageSrc,$currColor,255,255,255,2)) continue;
$destX = rand($srcX - $strength,$srcX + $strength);
$destY = rand($srcY - $strength,$srcY + $strength);
$xplusw = $srcX + $width;
if($xplusw >= $dimImage[0]) $width -= $xplusw - $dimImage[0];
$yplush = $srcY + $height;
if($yplush >= $dimImage[1]) $height -= $yplush - $dimImage[1];
if($destX < 0) $destX = 0;
if($destY < 0) $destY = 0;
$dxplusw = $destX + $width;
if($dxplusw >= $dimImage[0]) $destX -= $dxplusw - $dimImage[0];
$dyplush = $destY + $height;
if($dyplush >= $dimImage[1]) $destY -= $dyplush - $dimImage[1];
imagecopy($myImageDest,$myImageSrc,$destX,$destY,$srcX,$srcY,$width,$height);
} } function copyAndPasteNormal($myImageSrc,$myImageDest,$dimImage,$strength) {
$maxNoise = rand(intval($strength/2),intval($strength*5));
if($maxNoise == 0) $maxNoise = 1;
for($i = 0 ;
$i < $maxNoise ;
$i++) { $width = rand(5,intval($dimImage[0]/5));
$height = rand(5,intval($dimImage[1]/5));
$srcX = rand(0,$dimImage[0]-5);
$srcY = rand(0,$dimImage[1]-5);
$destWidth = $width;
$destHeight = $height;
$ratioX = $destWidth/$width;
$ratioY = $destHeight/$height;
$destX = rand($srcX - intval(5*$ratioX),$srcX + intval(5*$ratioX));
$destY = rand($srcY - intval(5*$ratioY),$srcY + intval(5*$ratioY));
$xplusw = $srcX + $width;
if($xplusw >= $dimImage[0]) $width -= $xplusw - $dimImage[0];
$yplush = $srcY + $height;
if($yplush >= $dimImage[1]) $height -= $yplush - $dimImage[1];
if($destX < 0) $destX = 0;
if($destY < 0) $destY = 0;
$dxplusw = $destX + $destWidth;
if($dxplusw >= $dimImage[0]) $destX -= $dxplusw - $dimImage[0];
$dyplush = $destY + $destHeight;
if($dyplush >= $dimImage[1]) $destY -= $dyplush - $dimImage[1];
imagecopy($myImageDest,$myImageSrc,$destX,$destY,$srcX,$srcY,$width,$height);
} } function copyAndPasteDeform($myImageSrc,$myImageDest,$dimImage,$strength) {
$maxNoise = rand(intval($strength/2),intval($strength*5));
if($maxNoise == 0) $maxNoise = 1;
for($i = 0 ;
$i < $maxNoise ;
$i++) { $width = rand(5,intval($dimImage[0]/5));
$height = rand(5,intval($dimImage[1]/5));
$srcX = rand(0,$dimImage[0]-5);
$srcY = rand(0,$dimImage[1]-5);
$destWidth = rand($width,intval(2.5*$width));
$destHeight = rand($height,intval(2.5*$height));
$ratioX = $destWidth/$width;
$ratioY = $destHeight/$height;
$destX = rand($srcX - intval(5*$ratioX),$srcX + intval(5*$ratioX));
$destY = rand($srcY - intval(5*$ratioY),$srcY + intval(5*$ratioY));
$xplusw = $srcX + $width;
if($xplusw >= $dimImage[0]) $width -= $xplusw - $dimImage[0];
$yplush = $srcY + $height;
if($yplush >= $dimImage[1]) $height -= $yplush - $dimImage[1];
if($destX < 0) $destX = 0;
if($destY < 0) $destY = 0;
$dxplusw = $destX + $destWidth;
if($dxplusw >= $dimImage[0]) $destX -= $dxplusw - $dimImage[0];
$dyplush = $destY + $destHeight;
if($dyplush >= $dimImage[1]) $destY -= $dyplush - $dimImage[1];
imagecopyresized($myImageDest,$myImageSrc,$destX,$destY,$srcX,$srcY,$destWidth,$destHeight,$width,$height);
} } function check_extension($file,$extensions) { $extension = strrchr($file, '.');
return in_array($extension, $extensions);
} sub spectromie { my $ligne;
my $compteur = 0;
my $ligne_poeme = 0;
my $poeme = undef;
while(<fREC>) {
chomp;
$ligne = $_;
$ligne_poeme++;
my @Ligne = split(/\s+/,$ligne);
$poeme = $1;
$ligne_poeme = 0;
$compteur++;
print fSPEC "\tPoeme " . $compteur . " : " . $poeme . "\n";
next;
}
my $nbMotsLigne = scalar(@Ligne);
if($nbMotsLigne == 0) { print fSPEC "\n";
next;
}
foreach my $mot (@Ligne) {
if(exists($Symboles{$mot})) { next;
} if(length($mot) == 1 && !exists($Symboles{$mot}) && !exists($Voyelles{$mot}) && !exists($Consonnes{$mot})) { next;
}
$mot = &nettoieMot($mot);
push(@{$SampledRecueil{$poeme}{$ligne_poeme}{"mots"}},$mot);
push(@{$SampledRecueil{$poeme}{$ligne_poeme}{"poetivites"}},$Recueil{$poeme}{"Mots"}{$mot});
print fSPEC $Recueil{$poeme}{"Mots"}{$mot} . "\t";
}
print fSPEC "\n";
}
}