Χρήστης:AtouBot/xml-σελίδες-με-συμβολοσειρά.pl
Όνομα εργαλείου: xml-σελίδες-με-συμβολοσειρά.pl
Περιγραφή:
Αυτό το εργαλείο διαβάζει κείμενο σε μορφή xml και γράφει στην κονσόλα το περιεχόμενο σελίδων που περιέχουν μια συμβολοσειρά. Για να αποθηκευτούν οι σελίδες, πρέπει να κάνετε ανακατεύθυνση με τον κανονικό τρόπο (xml-σελίδες-με-συμβολοσειρά.pl > όνομα-αρχείου
).
Παράμετροι:
--not
δείχνει τις σελίδες που δεν περιέχουν τη συμβολοσειρά--noredirs
παραβλέπει τις ανακατευθύνσεις- η συμβολοσειρά
Προϋποθέσεις:
- perl
Σημειώσεις χρήσης:
- Παράδειγμα χρήσης:
cat elwiktionary-20080309-pages-meta-current.xml |./xml-σελίδες-με-συμβολοσειρά.pl '{{-el-}}
(βρίσκει ελληνικά λήμματα)
→ Πίσω στα Εργαλεία |
xml-σελίδες-με-συμβολοσειρά.pl
επεξεργασία#!/usr/bin/perl # γράφουμε όλες τις σελίδες που περιέχουν μια ορισμένη έκφραση # παράμετροι: # --not γράφουμε τις σελίδες χωρίς την έκφραση # --noredirs αγνοούμε ανακατευθύνσεις # παραδείγματα: # cat elwiktionary-20080309-pages-meta-current.xml |./xml-σελίδες-με-έκφραση.pl --not '{{=el=}}' # cat elwiktionary-20080309-pages-meta-current.xml |./xml-σελίδες-με-έκφραση.pl '{{PAGENAME}}' #binmode(STDOUT, ":utf8"); #binmode(STDIN, ":utf8"); use utf8; $noredirs=0; $not=0; $expr=""; $body=0; sub check_expr { my($expr,$not,$noredirs,@text)=@_; $pagetype="unknown"; for $tline (@text) { if ($tline =~ /<title>/) { if ($tline !~ /<title>.*:.*<\/title>/) { $pagetype="main namespace"; } else { $pagetype="other"; } } if ($pagetype =~ /other/) { return(0); } elsif (($tline =~ /#REDIRECT/ig) || ($tline =~ /#ΑΝΑΚΑΤΕΥΘΥΝΣΗ/ig)) { if ($noredirs) { return(0); } } if (($tline =~ /<text/) || ($tline =~ /<\/text/)) { $body=1; $tline =~ s/<(\/)?text[^>]*>//g; } elsif ($tline =~ /<revision/) { $body=1; } if (($body == 1) && ($tline =~ /\Q$expr\E/)) { if ($not) { return(0); } else { return(1); } } } if ($not) { return(1); } else { return(0); } } while ($opt = shift(@ARGV)) { if ($opt =~ /--not/) { $not = 1 ; } elsif ($opt =~ /--noredirs/) { $noredirs = 1 ; } else { $expr = $opt; # print "got opt $opt\n"; } } $startpage=0; while (<STDIN>) { $line=$_; if ($line =~ /<page>/) { $startpage++; @text=(); } elsif ($line =~ /<\/page>/) { @text=(@text,$line); $startpage=0; if (check_expr($expr,$not,$noredirs,@text)) { for my $textline (@text) { print "$textline"; } } @text=(); } if ($startpage) { @text=(@text,$line); } } exit(0);