Statistiques
| Révision :

root / projets / Palafra / frolex / reformat-afrlex.pl @ 1880

Historique | Voir | Annoter | Télécharger (1,54 ko)

1 494 mdecorde
#Reformatage du lexique de l'ancien français afrlex au format :
2 494 mdecorde
#une association "forme	msd	lemme	ref" par ligne
3 494 mdecorde
4 494 mdecorde
use strict;
5 494 mdecorde
#use warnings;
6 494 mdecorde
7 494 mdecorde
my $file = $ARGV[0];
8 494 mdecorde
my $outfile = $ARGV[1];
9 494 mdecorde
10 494 mdecorde
open (IN, "$file") || die "Cannot read from $file\n";
11 494 mdecorde
open (OUT, ">$outfile") || die "Cannot write to $outfile\n";
12 494 mdecorde
13 494 mdecorde
print OUT "form\tmsd_afrlex\tlemma\tlemma_src\n";
14 494 mdecorde
15 494 mdecorde
my @lines = <IN>; close IN;
16 494 mdecorde
17 494 mdecorde
for my $line (@lines) {
18 494 mdecorde
#	print $line;
19 494 mdecorde
	if ($line =~ m/^([^\t]*)\t(.*)$/) {
20 494 mdecorde
		#la forme est le premier segment avant tabulation
21 494 mdecorde
		my $form = $1;
22 494 mdecorde
		#le reste sont des annotations : msd + lemmes
23 494 mdecorde
		my $annotations = $2;
24 494 mdecorde
		until ($annotations =~ m/^\s*$/) {
25 494 mdecorde
			#on traite les annotations en boucle par paire de valeurs séparées par une tabulation
26 494 mdecorde
			$annotations =~ m/^\t?([^\t]*)\t([^\t]*)(.*)$/;
27 494 mdecorde
			#la 1ère valeur est l'étiquette morphosyntaxique
28 494 mdecorde
			my $msd = $1;
29 494 mdecorde
			#la seconde est un ensemble lemme_source éventuellement multiples avec séparation par type
30 494 mdecorde
			my $lemmesrefs = $2;
31 494 mdecorde
			$annotations = $3;
32 494 mdecorde
			#s'il y a un "_", on parse
33 494 mdecorde
			if ($lemmesrefs =~ m/^([^_]*)_([^_]*)$/) {
34 494 mdecorde
				my @lemmes = split/\|/, $1;
35 494 mdecorde
				my @refs = split/\|/, $2;
36 494 mdecorde
				my $counter = 0;
37 494 mdecorde
				foreach my $lemme (@lemmes) {
38 494 mdecorde
					print OUT "$form\t$msd\t$lemme\t$refs[$counter]\n";
39 494 mdecorde
					$counter++;
40 494 mdecorde
				}
41 494 mdecorde
			}
42 494 mdecorde
			#sinon on copie simplement
43 494 mdecorde
			else {
44 494 mdecorde
				my @lemmes = split/\|/, $lemmesrefs;
45 494 mdecorde
				foreach my $lemme (@lemmes) {
46 494 mdecorde
					print OUT "$form\t$msd\t$lemme\t\n";
47 494 mdecorde
				}
48 494 mdecorde
			}
49 494 mdecorde
		}
50 494 mdecorde
	}
51 494 mdecorde
	else {
52 494 mdecorde
		print "ERROR in line format: $line\n"
53 494 mdecorde
	}
54 494 mdecorde
}
55 494 mdecorde
56 494 mdecorde
close OUT;
57 494 mdecorde
rename "$file.$$","afrlex.tsv" || die "Cannot write to afrlex.tsv\n";