-
Notifications
You must be signed in to change notification settings - Fork 0
/
flemm.pl
156 lines (120 loc) · 3.46 KB
/
flemm.pl
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/usr/bin/env perl
###########################################################################
# FLEMM-v3.1 -- French Lemmatizer : Lemmatisation du français à partir de #
# corpus étiquetés - Version 3.1 #
# Copyright (C) 2004 (NAMER Fiammetta) #
###########################################################################
# Programme d'initialisation du lemmatiseur
# Appelle le programme de preparation qui va:
# - appeller le lemmatiseur,
# - formater le contenu selon les notations de l'utilisateur
use strict;
# Pour utiliser les options dans la commande perl
use Getopt::Long;
use Flemm;
use Flemm::Result;
use constant PROGRESS_CHAR => '|';
use constant PROGRESS_PACKET => 1000;
use constant PROGRESS_MAX_WIDTH => 80;
sub usage {
my ($message)=@_;
print STDERR "
Usage: perl flemm.pl --entree fichier_en_entree
[--sortie fichier_en_sortie]
[--log]
[--logname prefixe_fichiers_log]
[--progess]
[--format (normal|xml)]
[--tagger (brill|treetagger)]
Les arguments notes entre [] sont optionnels.
Par defaut:
- en l'absence de --sortie, le résultat est affiche dans le
fichier_en_entree.lemm
- en l'absence de --log, pas de fichier contenant la
correction des (eventuelles) erreurs d'etiquetage
- en l'absence de --tagger, l'etiqueteur par defaut est
\"treetagger\".\n\n";
print STDERR "$message\n\n" if (defined $message);
exit(1);
}
# Programme principal
sub main {
my ($infile,$outfile,$logprefix,$tagger,$format,$log);
my %params;
my $lemm;
my $progress;
my $compteur=0;
my $char_compteur=0;
$|=1;
GetOptions
(
"entree=s" => \$infile, # nom du fichier d'entrée
"sortie:s" => \$outfile, # nom du fichier de sortie
"logname:s" => \$logprefix,# prefixe des fichiers log
"log!" => \$log, # 0 ou 1 (--log ou --nolog)
"tagger:s" => \$tagger, # Tagger utilisé (brill|treetagger)
"format:s" => \$format, # Format utilisé (normal|xml)
"progress!" => \$progress # Pour afficher ou non la progression
);
if (!defined $infile) {
$infile = "-";
}
if (defined $tagger) {
$params{Tagger}=$tagger;
}
if ($log) {
if (defined $logprefix) {
$params{Logname}=$logprefix;
}
else {
$params{Logname}=$infile;
}
}
$lemm=new Flemm(%params);
if (!defined $outfile) {
if ($infile != "-") {
$outfile = $infile.".lemm";
} else {
$outfile = "-";
}
}
open(INPUT,"<$infile") || die "pas possible d'ouvrir $infile";
open(OUTPUT,">$outfile") || die "pas possible de créer $outfile";
if ($format eq "xml") {
print OUTPUT "<?xml version='1.0' encoding='ISO-8859-1'?>\n\n";
print OUTPUT "<FlemmResults>\n";
}
while (<INPUT>) {
chomp;
my $res=$lemm->lemmatize($_);
if ($progress) {
$compteur++;
if (($compteur % PROGRESS_PACKET)==0) {
print PROGRESS_CHAR;
$char_compteur++;
if (($char_compteur % PROGRESS_MAX_WIDTH)==0) {
$char_compteur=0;
print "\n";
print $res->asXML;
print $res->getResult."\n";
}
}
}
if ($format eq "xml") {
print OUTPUT $res->asXML."\n";
}
else {
print OUTPUT $res->getResult."\n";
}
}
if ($format eq "xml") {
print OUTPUT "</FlemmResults>\n";
}
if ($progress && $char_compteur!=0) {
print "\n";
}
close(INPUT);
close(OUTPUT);
exit(0);
}
&main;