Pywikipediabot/replace.py/it
From Meta, a Wikimedia project coordination wiki
Replace.py è uno script appartenente al framework di pywikipedia bot.
Questo script permette al bot di eseguire sostituzioni di testo. Il bot verificherà se la pagina deve essere cambiata in base alle informazioni presenti nel file XML di dump o in base alla versione attualmente online. È possibile specificare quali pagine dovranno essere verificate.
Per maggiori informazioni digita: python replace.py -help
Contents |
[edit] File correlati
Questo script si compone di tre file:
- replace.py
- il modulo principale
- fixes.py
- una lista predefinita di correzioni
- user-fixes.py
- la lista di correzioni personalizzate dell'utente. Lo scheletro vuoto di questo file può essere generato lanciando lo script generate_user_files.py.
[edit] Modalità di sostituzione
La sostituzione con replace.py può avvenire in:
- Modalità automatica
- tutte le modifiche vengono applicate senza chiedere ulteriore conferma all'utente. È opportuno utilizzare questa modalità solo con le sostituzioni ben testate e per le quali non c'è il rischio di falsi positivi. Su alcune wiki questa modalità di sostituzione potrebbe essere vietata.
- Modalità assistita
- per tutte le modifiche viene chiesta conferma all'utente mostrando la sostituzione proposta seguita dal seguente messaggio:
-
- y: applica la modifica.
- n: non applica la modifica.
- e: apre la voce in un editor di testo esterno
- b: apre la voce nel browser
- a: passa alla modalità automatica
- q: esce dallo script
[edit] Parametri da riga di comando
[edit] Pagine da verificare
Questi parametri, mutualmente esclusivi, servono per indicare allo script dove reperire le informazioni sulle pagine che andranno modificate.
| Pagine da verificare | |
|---|---|
| -xml:file_di_dump.xml | Recupera le informazioni da un file XML di dump in locale. Questa modalità è la più veloce ed efficiente quando si devono scandagliare tutte le pagine. Lo script lavora in questo modo: controlla le pagine salvate nel dump, quando ne trova una che va modificata la scarica nuovamente dal server, verifica se ha ancora bisogno della modifica o se nel frattempo è cambiata e se necessario effettua la modifica (o chiede conferma).
Per i dump aggiornati vedi http://download.wikimedia.org. Attenzione: con modalità diverse da -start se non si specifica i/il namespace la sostituzione interesserà indistintamente tutti i namespace. |
| -xmlstart:nomepagina | Salta tutte le pagine che nel file di dump precedono nomepagina. Funziona solamente in combinazione con il parametro -xml. Utile per riprendere un'elaborazione sul dump interrotta. Attenzione: nomepagina è case sensitive anche sulla prima lettera e se contiene degli spazi devono necessariamente essere usate le virgolette. (Es: -xmlstart:"Alan Turing") |
| -file:nomefile | Verifica tutte le pagine presenti in un file locale. Le pagine all'interno di questo file devono essere indicate fra due coppie di parentesi quadre: [[nome pagina]]. Ottimo nel caso il dump non sia recente e si sia in grado di generare la lista delle pagine che è necessario cambiare. |
| -cat:nomecategoria | Verifica tutte le pagine presenti in una determinata categoria. |
| -subcat:nomecategoria | Verifica tutte le pagine presenti in una determinata categoria più tutte le sue sottocategorie. |
| -transcludes:nometemplate | Verifica tutte le pagine che includono un determinato template. |
| -page:nomepagina | Verifica solo la pagina specificata. |
| -ref:nomepagina | Verifica tutte le pagine che contengono un link alla pagina specificata. |
| -filelinks:nomeimmagine | Verifica tutte le pagine che contengono un link o che includono una determinata immagine (o file). |
| -links:nomepagina | Verifica tutte le pagine che contengono un link da una determinata pagina. |
| -start:pagina di partenza | Verifica in ordine alfabetico tutte le pagine presenti sulla wiki partendo da una determinata pagina. Se viene indicato -start:! parte dall'inizio del namespace principale e si limita ad esso. Attenzione -start:* parte quasi dall'inizio. Non funziona con il parametro -namespace, per indicare un namespace diverso da quello principale utilizzare un prefisso adeguato: -start:File:!.
Attenzione: l'utilizzo di questa modalità è sconsigliato visto che obbliga lo script a scaricare indiscriminatamente dal server tutte le pagine del namespace principale. Per questo motivo questo metodo è lentissimo, rende impraticabile la modalità di sostituzione assistita e sovraccarica inutilmente i server. Utilizza ad esempio il parametro |
| -new:x | Verifica le ultime x pagine create. |
| -newimages:x | Verifica le ultime x immagini create. |
| -prefixindex:prefisso | Verifica tutte le pagine che iniziano con un determinato prefisso. |
[edit] Sostituzioni
La sostituzione che si vuole eseguire può essere inserita in due modi mutualmente esclusivi:
- attraverso una sostituzione predefinita nel file user-fixes.py o fixes.py
- da riga di comando
Nota: il primo sistema è il più usato e quello consigliato. In questo modo tutte le espressioni regolari e le eccezioni che interessano una determinata sostituzione possono essere testate con cura e riapplicate con minor rischio di errori.
| Sostituzioni predefinite | |
|---|---|
| -fix:nomefix | Esegue una delle sostituzioni definite nei file user-fixes.py e fixes.py. |
| -namespace:n | Numero del namespace da analizzare. Il parametro può essere utilizzato più volte per indicare diversi namespace. Lavora in combinazione con tutti gli altri parametri ad eccezione di -start. Per la lista dei namespace vedi: Aiuto:Namespace. |
| Sostituzioni da riga di comando | |
|---|---|
| vecchiotesto nuovotesto | Sostituisce tutte le occorrenze di "vecchiotesto" con "nuovotesto". Se è presente anche il parametro -regex, il testo da sostituire verrà valutato come una espressione regolare.
Esempio: |
| -summary:oggetto della modifica | Specifica un testo per l'oggetto della modifica. |
| Altri parametri correlati | |
|---|---|
| -excepttitle:XYZ | Salta le pagine il cui titolo contiene XYZ. Se è presente anche il parametro -regextitle, XYZ verrà valutato come una espressione regolare. |
| -requiretitle:XYZ | Salta le pagine che non contengono nel titolo XYZ. Se è presente anche il parametro -regextitle, XYZ verrà valutato come una espressione regolare. |
| -excepttext:XYZ | Salta le pagine che contengono il testo XYZ. Se è presente anche il parametro -regextitle, XYZ verrà valutato come una espressione regolare. |
| -exceptinside:XYZ | Salta le occorrenze della sostituzione contenute all'interno di una porzione di testo XYZ. Se è presente anche il parametro -regextitle, XYZ verrà valutato come una espressione regolare. |
| -exceptinsidetag:tag | Salta le occorrenze della sostituzione contenute all'interno di una porzione di pagina del tipo tag. Per l'elenco delle tag supportate vedi la sezione Tag. |
| -always | Esegue la sostituzione in modalità automatica. Applica tutte le sostituzioni senza chiedere conferma. |
| -recursive | Quando possibile applica la sostituzione in maniera ricorsiva. |
| -nocase | Interpreta le espressioni regolari in maniera case insensitive. |
| -allowoverlap | Sostituisce tutte le occorrenze del pattern cercato anche quando queste si sovrappongono.
Attenzione: potrebbe portare a loop inifiniti. Utilizzare solo se si sa cosa si sta facendo. Una alternativa può essere quella di ripetere più volte la medesima regex all'interno della sostituzione presente nel file user-fixes.py in modo da sostituire un numero di volte finito occorrenze sovrapposte. |
| -dotall | Interpreta il . all'interno delle espressioni regolari come "qualsiasi carattere". Se non specificato i caratteri di a capo non sono compresi. |
| -addcat:nomecategoria | Aggiunge la categoria nomecategoria ad ogni pagina modificata. |
Per maggiori informazioni digita: python replace.py -help
[edit] User-fixes.py
Esempio della tipica struttura del file user-fixes.py:
fixes = {
'esempio': {
'regex': True,
'recursive': True,
'msg': {
'it':u'Bot: oggetto della modifica'
},
'replacements': [
(u'erore1', ur'errore1'),
(u'erore2', ur'errore2'),
],
'exceptions': {
'inside-tags': [
'hyperlink',
'link',
'template',
'comment',
'timeline',
'gallery',
'math',
'pre',
'startspace',
'source',
'nowiki'
],
'require-title': [
# r'Album (?!d)',
],
'title': [
# r'test',
],
'inside': [
r'\[\[([Ii]mmagine|[fF]ile)\:[^\]\|]+?\|', # esclude nome immagine
r'\[\[(\w\w|\w\w\w|\w\w\w\w|simple)\:[^\]]+?\]\]', # esclude interwiki ad altre lingue
r'{{interprogetto[^\}]+?}}', # esclude interwiki template interprogetto
r'\[\[(wikipedia|w|wiktionary|wikt|wikinews|n|wikibooks|b|wikiquote|q|wikisource|s|wikispecies|v|wikimedia|foundation|commons|meta|m|incubator|mw|mediazilla):[^\]]+?\]\]', # esclude interwiki a progetti fratelli
],
'text-contains': [
'escludi questo testo1',
'escludi questo testo2'
]
}
},
}
- nome del fix: in questo caso esempio. Serve per richiamare la sostituzione con il parametro
-fix. Deve essere univoco. 'regex': True: analogo al parametro-regex'recursive': True: analogo al parametro-recursivemsg: definisce l'edit summary. Vedi Aiuto:Oggettoinside-tags: definisce i tag delle porzioni di voce da escludere. Analogo al parametro-exceptinsidetaginside: definisce le porzioni di testo da escludere. Analogo al parametro-exceptinsiderequire-title: analogo al parametro-requiretitletitle: analogo al parametro-excepttitletext-contains: analogo al parametro-excepttext
Per disabilitare le eccezioni che non servono anteporre il carattere # come nell'esempio.
[edit] Tag
Definiscono un tipo di testo e possono essere usati nelle sostituzioni predefinite o da riga di comando.
- hyperlink: esclude tutti i collegamenti esterni (singola parentesi quadra)
- link: esclude tutti i wikilink e gli interwiki (doppia parentesi quadra)
- template: esclude tutti i template e i relativi parametri (doppia parentesi graffa)
- comment: esclude il testo commentato (testo compreso all'interno dei tag <!-- -->)
- timeline: esclude il testo compreso all'interno dei tag <timeline> ... </timeline>
- gallery: esclude il testo compreso all'interno dei tag <gallery> ... </gallery>
- math: esclude il testo compreso all'interno dei tag <math> ... </math>
- pre: esclude il testo compreso all'interno dei tag <pre> ... </pre>
- startspace: esclude il testo su righe che iniziano con uno spazio (tipicamente esempi di codice)
- source: esclude il testo sorgente all'interno dei tag <source> ... </source>
- nowiki: esclude il testo compreso all'interno dei tag <nowiki> ... </nowiki>
[edit] Collegamenti esterni
- The Python Standard Library » Regular expression operations
- Kodos - The Python Regular Expression Debugger, per testare espressioni regolari specificamente per Python
- Regular-Expression.Info - Introduzione alle espressioni regolari con enfasi anche alle differenti implementazioni (ad esempio Python)
- Database XML and SQL dumps