Utente:Filbot/Regex

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search

Allora, ora avete un bel Bot (che al momento vi è servito a poco o a nulla) e avete capito a cosa servono i vari script principali. Ok, ma ora che fate? Be', il bello arriva ora ;) In questa lezione impareremo a scrivere delle regex per fare le sostituzioni utilizzando il famoso script replace.py (e il fixes.py successivamente).

Replace.py[modifica | modifica wikitesto]

Allora, dato che qua impareremo le regex che ci serviranno per Wikipedia, è forse meglio imparare ad usare bene anche lo script replace.py che se utilizzato bene permette di risparmiare molto tempo e lavoro :) Iniziamo quindi col leggere il readme di replace.py che vi ho tradotto per l'occasione:

-xml
Prende informazioni da un dump XML locale (pages_current, vedi http://download.wikimedia.org). Il comando può essere digitato anche così: -xml:nomefile.
-file
Lavora in tutte le pagine date in una file di testo locale (dentro il tuo pc). Leggerà ogni [[wiki link]] e utilizzerà questi articoli. Il comando può essere digitato anche così: "-file:nomefile[1]
-cat
Lavora in tutte le pagine di una specifica categoria. Il comando può essere dato anche così: -cat:categoryname.
-page
Questo comando serve per far scansionare al bot una sola pagina, utile per fare dei test in sandbox. Il comando può essere dato anche così: -page:pagename.
-ref
Lavora su tutte le pagine che linkano ad una certa pagina. Il comando piò essere dato anche così: -ref:referredpagename.
-filelinks
Lavora in tutte le pagine che linkano ad una certa immagine. Il comando può essere dato così: -filelinks:Nomeimmagine
-links
Lavora in tutte le pagine che sono linkate da una certa pagina.
-start
Serve per far partire lo script da una certa pagina per tutta la wiki. Scrivi start:! per iniziare dall’inizio. NOTA: è consigliato usare -xml invece che questa opzione; essa serve per quei casi in cui non c’è un XML dump recente.
-regex
Fa sostituzioni utilizzando le regex (espressioni regolari). Se non è dato questo comando, il bot farà semplici sostituzioni di testo
-summary
XYZ
Inserisce il messaggio XYZ nell'oggetto quando il bot fa delle modifiche, bypassando il messaggio predefinito che dovrebbe apparire.
-except:XYZ
Ignora pagine che contengono XYZ. Se è dato il comando –regex, XYZ sarà considerato come una regex.
-fix:XYZ
Esegue una delle sostituzioni predefinite che sono presenti nel dizionario 'fixes', definito dentro il file replace.py. Il comando –regex e le sostituzioni date saranno ignorate se utilizzi il comando -fix
  • HTML – converte i tag HTML in sintassi wiki e sistema i XHTML
-namespace:n
Numero dei namespace da eseguire. Il parametro
-always
Serve per dare [a]ll come scelta predefinita e quindi per non dover scegliere ogni volta.
recursive
Ripete le sostituzioni finché è possibile
nocase
Nelle regex non usa il "Case Sensitive" (ovvero Abba e abba per il bot saranno uguali.)
allowoverlap
Quando le occorrenze del pattern si sovrappongono, le sostituisce tutte ma attenzione! Non usare questa opzione se non sai quello che stai facendo, perché può facilmente dar luogo a cicli infiniti
Le sostituzioni
Dopo i comandi si deve inserire il vecchio testo fra due virgolette, mettere uno spazio e inserire tra altre due virgolette il testo nuovo (“vecchio testo” “nuovo testo”). Se è stato dato il comando –regex precedentemente, il primo testo sarà considerato come una espressione regolare e il secondo potrebbe contenere espressioni come \1 o \g<nome>.

Iniziamo[modifica | modifica wikitesto]

Be', iniziare qualcosa di solito è sempre un po' barboso, tanta teoria e poca pratica. Avevo pensato quindi a fornirvi un paio di regex già belle funzionanti, giusto per farvi divertire un po' prima di iniziare. Così, prenderete anche confidenza coi parametri di replace.py :) Ricordo che la guida è per Windows, quindi prima di replace.py io non metto python. Se siete "Linuxiani" o usate Mac OS mettetecelo ;).

  • Autore: Pietrodn (sempre sia lodato :D ) Uso: Questa regex cambia tutti i "Vedi Anche" in "Voci correlate" partendo dal carattere "!", si può usare anche all.

replace.py -start:! -regex "== ?[Vv]edi [Aa]nche ?==" "== Voci correlate =="

  • Autore: O Pietrodn o io, chi si ricorda XD Uso: Questa regex cambia tutti i "Link Esterni" in "Collegamenti Esterni" partendo dal carattere "!", si può usare all

replace.py -start:! -regex "== ?[Ll]ink [Ee]sterni ?==" "== Collegamenti Esterni =="

Bene, le avete provate? (non è che sia necessario dato che troveranno 3 errori in mezzora ma vabbé :D ) Ok, analizziamole allora:

  1. Entrambe le regex iniziano con replace.py dato che per funzionare richiamano lo script suddetto, quindi se vi passano delle regex o se ve le create dovrebbe esserci sempre replace.py all'inizio se volete che tutto funzioni :)
  2. Passiamo alle cose un pelo meno ovvie, il comando -start (che c'è nel readme di replace.py) serve a dire al bot da che voce partire (se la si fa partire da "!" gira su tutta Wikipedia)
  3. -regex fa attivare le regex
  4. La prima parte tra "" è la prima regex. Questa va a cercare nel testo di Wikipedia se c'è un qualche riferimento, qualche parola simile indicata secondo la giusta sintassi. La seconda parte tra "" è ciò che verrà messo al posto di quanto verrà trovato.
  5. Per costruire le proprie regex rimando a questo sito che è già molto completo ^__^

Ringraziamenti / Crediti[modifica | modifica wikitesto]

Si ringraziano le seguenti illustri persone:

  • Pietrodn e valepert per il magno aiuto alla configurazione del mio bot e per l'aiuto (di valepert) nel sistemare la traduzione ufficiale della guida dei bot (non quella breve, quella lunga :D ) e per i link alle varie pagine sui Bot (incluso il sito http://fido.altervista.org/RegExp/regex.html sul quale ho imparato a scrivere le regex :) )
  • Pietrodn per le regex iniziali.
  • LP aka BrockenArrow, per l'aiuto alla traduzione di alcune parti della guida (lunga) e per un paio di frasi per il replace.py
  • Cosoleto per le sgridate magistrali :)
  • Paulatz per i consigli per i programmi per il Botolo ^__^
  • E tutta la brava gente che lavora su Wikipedia e che lavora sulle librerie per il bot e sul python :)

Note[modifica | modifica wikitesto]

  1. ^ Nel caso in cui il nome del file includa uno spazio (ad esempio"Nome file"), lo spazio va sostituito dal trattino in basso "_" (nell'esempio: "Nome_file").