Χρήστης:AtouBot/xml-σελίδες-με-έκφραση.pl
Όνομα εργαλείου: xml-σελίδες-με-έκφραση.pl
Περιγραφή:
Αυτό το εργαλείο διαβάζει κείμενο σε μορφή xml και γράφει στην κονσόλα το περιεχόμενο σελίδων που ικανοποιούν μια κανονική έκφραση. Για να αποθηκευτούν οι σελίδες, πρέπει να κάνετε ανακατεύθυνση με τον κανονικό τρόπο (xml-σελίδες-με-έκφραση.pl > όνομα-αρχείου
).
Παράμετροι:
--not
δείχνει τις σελίδες που δεν ικανοποιούν την έκφραση--noredirs
παραβλέπει τις ανακατευθύνσεις- η κανονική έκφραση
Προϋποθέσεις:
- perl
Σημειώσεις χρήσης:
- Παράδειγμα χρήσης:
cat elwiktionary-20080309-pages-meta-current.xml |./xml-σελίδες-με-έκφραση.pl '{{τ\|[a-z\-]+\|[^}XΧ]+}}( *)\[\['
(βρίσκει συνδέσμους μετά από μεταφράσεις)
- Περισσότερες πληροφορίες για κανονικές εκφράσεις σύντομα...
→ Πίσω στα Εργαλεία |
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 encoding(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 =~ /$expr/)) { 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; } } $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);