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"; |