Bonjour Tout le monde
J'ai réalisé un script permettant de lir un fichier de ce format et de supprimer de chaque documeny entre les balises <DOC n> et </DOC> les DOUBLONS
ex de fichier en entréé:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
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 <DOC 1> tchécoslovaquie pourquoi tchécoslovaquie tchécoslovaquie slovaquie tchèque </DOC> <DOC 2> comment guerre bosnie musulmans croates </DOC> <DOC 3> quel sida france </DOC> <DOC 4> allemagne comment allemagne allemagne xénophobie etranger </DOC>
exemple de sortie:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <DOC 1> tchécoslovaquie slovaquie tchèque </DOC> <DOC 2> guerre bosnie musulmans croates </DOC> <DOC 3> quel sida france </DOC> <DOC 4> allemagne xénophobie etranger </DOC>
Voila le code que j'ai réalisé
Mais le problème que cet algorithme retourne le résultat trié et ne garde pas le format des documents a savoir les BALISES
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #!/usr/bin/perl print "bonjour\n"; open(FIC, $ARGV[0]); $i=0; $k=0; $h=0; #--------------------------------------------------- # debut du programme, choix du nom du fichier en sortie #--------------------------------------------------- print "choisis un nom de fichier pour contenir les termes extraits\n"; my $fic=<STDIN>; #--------------------------------------------------- # initialisation des variables #--------------------------------------------------- open(FIC1, ">$fic"); while (<FIC>) { my $ligne=$_; my @liste=$ligne; #affectation du tableau avec répétition @b[$k].=$liste[0].""; if (@liste[0]=~/<\/DOC\>/){ $k++; } } for($i=0;$i<$k;++$i){ my @liste1=split(/\n/,@b[$i]); #@out contient la liste sans doublons my (%saw,@out)=(); undef %saw; @out = sort(grep(!$saw{$_}++, @liste1)); print FIC1 @out; }
QUESTION :y at-il une solution ?
Sachantb qu'on peut utiliser la fonction uniq
MERCI
Partager