Χρήστης:AtouBot/xml-split-by-numpages.pl
Όνομα εργαλείου: xml-split-by-numpages.pl
Περιγραφή:
Αυτό το εργαλείο διαβάζει κείμενο σε μορφή xml και καταγράφει μια σειρά αρχείων με ορισμένο αριθμό σελίδων στο καθένα.
Παράμετροι:
--num
αριθμός σελίδων ανά αρχείο (προεπιλογή: 1000)--name
όνομα αρχείων (θα έχουν τη μορφή blot_1, blot_2, κλπ, προεπιλογή: xmlpages)
Προϋποθέσεις:
- perl
Σημειώσεις χρήσης:
- Παράδειγμα χρήσης:
cat elwiktionary-20080309-pages-meta-current.xml | ./xml-split-by-numpages.pl
- Θα δημιουργήσει στον παρόν κατάλογο αρχεία xmlpages_1, xmlpages_2 κλπ.
cat elwiktionary-20080309-pages-meta-current.xml | ./xml-split-by-numpages.pl --num 50000 --name tmp/el-apr2011
- Θα δημιουργήσει στον κατάλογο tmp τα αρχεία el-apr2011_1, el-apr2011_2 κλπ. Ο κατάλογος tmp πρέπει να υπάρχει ήδη, δεν θα δημιουργηθεί.
→ Πίσω στα Εργαλεία |
xml-split-by-numpages.pl
επεξεργασία#!/usr/bin/perl # γράφουμε αρχεία με ορισμένο αριθμό σελίδων στο καθένα # παράδειγμα: # cat elwiktionary-20080309-pages-meta-current.xml |./xml-split-by-numpages.pl --num 50000 --name tmp/el-apr2011 use utf8; #!/usr/bin/perl $num=1000; #default $name="xmlpages"; # default sub skip_header { $line = <STDIN>; if ($line !~ /<mediawiki /) { print FILE $line; return; } print "found header\n"; while (<STDIN>) { if ($_ =~ /<\/siteinfo>/ ) { print "returning\n"; return; } } return; } sub write_page { while (<STDIN>) { $line = $_; # too bad, this is an extra compare for each line, ah well I'm lazy if ($_ !~ /<\/mediawiki>/) { print FILE $_; } if ($line =~ /<\/page>/) { return(1) } } return(0) } while ($opt = shift(@ARGV)) { if ($opt =~ /--num/) { $num = shift(@ARGV); # FIXME check it's numerical someday } elsif ($opt =~ /--name/) { $name = shift(@ARGV); } else { print "Usage: $0 --num number-of-articles-per-chunk --name base-filename\n"; exit(-1); } } $count = 0; $filecount = 1; open(FILE,'>',$name."_".$filecount) || die "failed to open first file $name_$filecount for output"; skip_header(); $result = write_page(); if (! $result) { close(FILE); print "failed to write the first page, check your data"; exit(1); } while (1) { $result = write_page(); if (! $result) { close(FILE); exit(0); } $count++; if (! ( $count % $num ) ) { close(FILE); $filecount++; open(FILE,'>',$name."_".$filecount); } }