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 -w
use strict;
use utf8;
binmode(STDOUT, ":encoding(utf8)");
binmode(STDIN, ":encoding(utf8)");
my $alphafr;
my ($mot_errone, $ligne, $ligne1, $ligne2, $elt, $m, $transposition, $lettre1, $lettre2, $suppression,$insertion,$substitution, $choix,
@mot, @mot_modifie, @fichier_dicfr, @texte, @dicfr, @insertion, @substitution, @transposition, @suppression, @propositions);
my %ponctuation = (
' ' => 1,
'' => 1,
',' => 1,
"'" => 1,
'.' => 1,
'‒' => 1,
';' => 1,
'!' => 1,
'-' => 1,
':' => 1,
'?' => 1
);
#les mots du lexique sont stockés dans une tableau
my $fichier_dicfr= "lexique.txt";
open (LEXFR, "<:encoding(utf8)", $fichier_dicfr);
while (defined ( $ligne = <LEXFR>)){
chomp $ligne;
@fichier_dicfr = split (/\s/, $ligne);
push (@dicfr, @fichier_dicfr);
}
close (LEXFR);
print "Bonjour, quel est le nom du fichier à analyser ?\n";
#entrée du fichier à corriger par l'utilisateur
my $fichier = <STDIN>;
chomp $fichier;
open (FCHFR,"<:encoding(utf8)", $fichier);
#création de la version corrigée
my $fichier_corrige = "correction.txt";
open (COR, ">:encoding(utf8)", $fichier_corrige);
print "Voici les fautes repérées et mes suggestions de correction \n";
while (defined ($ligne1 = <FCHFR>)) {
chomp $ligne1;
@texte = split (/(\pP|\pS|\s)/, lc $ligne1);
#Capture des mots non présents dans le lexique
for (my $i=0; $i < @texte; $i++) {
if (!grep (/^$texte[$i]$/, @dicfr) and not exists ($ponctuation{$texte[$i]})){
push (@mot, $texte[$i]);
$mot_errone = $texte[$i];
print "Ligne $. : L'orthographe du mot $mot_errone est erronée\n";
print "Quelle correction souhaitez-vous appliquer ? (indiquez le chiffre, ou 0 si aucune correction ne vous convient)\n";{
#liste des mots non trouvés dans le lexique
foreach $m(@mot){
@mot_modifie = split (//, $m);
open (LEXFR, "<:encoding(utf8)", $fichier_dicfr);
while (defined ($ligne2 = <LEXFR>)){
chomp $ligne2;
@fichier_dicfr = split (/\s/, $ligne2);
push (@dicfr, @fichier_dicfr);
}
#Boucle pour la transposition lcou devient clou
for (my $i = 0; $i < $#mot_modifie; $i++){
@transposition = @mot_modifie;
$lettre1 = $transposition[$i];
$lettre2 = $transposition[$i+1];
$transposition [$i] = $lettre2;
$transposition [$i+1]= $lettre1;
$transposition = join "", @transposition;
if (grep (/^$transposition$/, @dicfr)){
push (@propositions, $transposition);
}
}
#Boucle pour la suppression hommme devient homme
foreach $elt (0..$#mot_modifie) {
@suppression = @mot_modifie;
splice (@suppression, $elt, 1);
$suppression = join "", @suppression;
if (grep (/^$suppression$/, @dicfr)){
push (@propositions, $suppression);
}
#Boucle pour l'insertion homm devient homme
foreach $alphafr ('a'..'z'){
@insertion= @mot_modifie;
splice (@insertion, $elt, 0, $alphafr);
$insertion = join "", @insertion;
if (grep (/^$insertion$/, @dicfr)){
push (@propositions, $insertion);
}
#Boucle pour la substitution lou devient cou
@substitution = @mot_modifie;
splice(@substitution, $elt, 1, $alphafr);
$substitution = join "", @substitution;
if (grep (/^$substitution$/, @dicfr)){
push (@propositions, $substitution);
}
}
}
}
}
#Affichage des propositions et choix de l'utilisateur
print "@propositions\n";
$choix =<STDIN>;
chomp $choix;
#Remplacement du mot mal orthographié dans la ligne correspondante
$ligne1 =~s/$mot_errone/$propositions[$choix]/;
}
}
#création du fichier corrigé
print (COR $ligne1);
}
close (LEXFR);
close (FCHFR);
close (COR); |
Partager