Manual:Pywikibot/replace.py/it

From MediaWiki.org
Jump to navigation Jump to search
Altre lingue: English  • català • français • magyar • italiano • русский
Git logo
Wikimedia Git repository has this file: scripts/replace.py

Replace.py è uno script appartenente al framework di pywiki 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

File correlati[edit]

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.

Modalità di sostituzione[edit]

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:
Esempio

  • 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

Parametri da riga di comando[edit]

Pagine da verificare[edit]

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 https://dumps.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.
-subcats:nomecategoria daltitolo"
-subcatsr:nomecategoria Come -subcats, ma include anche tutte le sotto-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 -xml o -file con una lista di pagine creata ad hoc.

-new:x Verifica le ultime x pagine create.
-newimages:x Verifica le ultime x immagini create.
-recentchanges:x Verifica le ultime x pagine modificate.
-prefixindex:prefisso Verifica tutte le pagine che iniziano con un determinato prefisso.

Sostituzioni[edit]

La sostituzione che si vuole eseguire può essere inserita in due modi mutualmente esclusivi:

  1. attraverso una sostituzione predefinita nel file user-fixes.py o fixes.py
  2. 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: python replace.py testo1 testo2

-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

User-fixes.py[edit]

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 -recursive
  • msg: definisce l'edit summary. Vedi Aiuto:Oggetto
  • inside-tags: definisce i tag delle porzioni di voce da escludere. Analogo al parametro -exceptinsidetag
  • inside: definisce le porzioni di testo da escludere. Analogo al parametro -exceptinside
  • require-title: analogo al parametro -requiretitle
  • title: analogo al parametro -excepttitle
  • text-contains: analogo al parametro -excepttext

Per disabilitare le eccezioni che non servono anteporre il carattere # come nell'esempio.

Tag[edit]

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>

Collegamenti esterni[edit]