Utente:Filbot/Regex
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
modificaAllora, 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
modificaBe', 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:
- 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 :)
- 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)
- -regex fa attivare le regex
- 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.
- Per costruire le proprie regex rimando a questo sito che è già molto completo ^__^
Ringraziamenti / Crediti
modificaSi 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- ^ 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").