modifica

Script che può automatizzare la rimozione della maggior parte degli overlink a date nelle pagine di Wikipedia, particolarmente utile su voci di grandi dimensioni con numerosi link da rimuovere.

Non è un bot e non richiede alcuna autorizzazione per essere utilizzato, ma richiede sempre un controllo manuale al termine di ogni processo per verificare che le modifiche siano corrette e che non siano stati lasciati errori e link aperti.

Il codice è stato scritto tramite AI.

Premessa

modifica
Disattivare la formattazione delle virgolette
  • Aprire Word su un documento nuovo o qualsiasi documento
  • Menù File (in alto a sinistra)
  • Cliccare su "Opzioni" (in basso nel menu)
  • Nella finestra "Opzioni di Word", selezionare "Strumenti di correzione" dal menu a sinistra
  • Cliccare sul pulsante "Opzioni correzione automatica…"
  • Nella linguetta "Formattaz. autom. durante la digitazione", disattivare "Virgolette semplici con virgolette inglesi"
  • Premere OK finché si chiudono le finestre

Inserire uno script

modifica
  • Premere Alt+F11 per aprire l'Editor VBA
  • A sinistra aprire la cartella "Normal", cliccare su "Moduli"
  • Nel menù "Inserisci" cliccare su "Modulo"
  • Apparirà un nuovo modulo chiamato ad esempio "Modulo1", cliccarci
  • Nella finestra principale dell'editor incollare questo testo:
Sub SostituzioniAutomatiche()
    Application.ScreenUpdating = False
    Application.StatusBar = "Sto eseguendo le sostituzioni..."

    Dim sostituzioni As Object
    Set sostituzioni = CreateObject("Scripting.Dictionary")

    Dim i As Integer
    Dim s As Variant
    Dim doppio As String
    Dim chiave As Variant

    ' === Gruppo 0 === (numeri da [[1]] a [[99]])
    For i = 1 To 99
        sostituzioni.Add "[[" & CStr(i) & "]]", CStr(i)
    Next i
    
    ' === Gruppo 0B === (formato [[1 a.C.]] ? 1 a.C., fino a [[99 a.C.]] ? 99 a.C.)
For i = 1 To 99
    sostituzioni.Add "[[" & CStr(i) & " a.C.]]", CStr(i) & " a.C."
Next i

    ' === Gruppo 0C === (formato 00|00 ? 00, 01|01 ? 01, ..., 99|99 ? 99)
    For i = 0 To 99
        doppio = Format(i, "00")
        sostituzioni.Add doppio & "|" & doppio, doppio
    Next i

    ' === Gruppo 1 ===
    sostituzioni.Add "[[1", "1"
    sostituzioni.Add "[[2", "2"

    ' === Gruppo 2 ===
    For i = 0 To 9
        sostituzioni.Add CStr(i) & "]]", CStr(i)
    Next i

    ' === Gruppo 3A ===
    Dim secoli As Variant
    secoli = Array("Duecento", "Trecento", "Quattrocento", "Cinquecento", "Seicento", _
                   "Settecento", "Ottocento", "Novecento")

    For Each s In secoli
        sostituzioni.Add "[[" & s & "]]", s
    Next s

    ' === Gruppo 3B ===
    Dim secoliRomani As Variant
    secoliRomani = Array("XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX")

    For i = 0 To UBound(secoliRomani)
        sostituzioni.Add "[[" & secoliRomani(i) & " secolo|" & secoli(i) & "]]", secoli(i)
    Next i

    ' === Gruppo 4A === (secoli d.C.)
    Dim numeriRomani As Variant
    numeriRomani = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", _
                         "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI")

    For Each s In numeriRomani
        sostituzioni.Add "[[" & s & " secolo]]", s & " secolo"
    Next s

    ' === Gruppo 4B === (secoli a.C.)
    Dim numeriRomaniAC As Variant
    numeriRomaniAC = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", _
                           "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", _
                           "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX", "XXX")

    For Each s In numeriRomaniAC
        sostituzioni.Add "[[" & s & " secolo a.C.]]", s & " secolo a.C."
    Next s

    ' === Gruppo 5 === (anni da 999 a 200)
    For i = 999 To 200 Step -1
        sostituzioni.Add "[[" & CStr(i), CStr(i)
    Next i

    ' === Gruppo 6 === (formato [[X secolo|X]] ? X)
    For Each s In numeriRomani
        sostituzioni.Add "[[" & s & " secolo|" & s & "]]", s
    Next s
    
    ' === Gruppo 7 === (formato [[XXX secolo a.C.|XXX]] ? XXX)
    For Each s In numeriRomaniAC
    sostituzioni.Add "[[" & s & " secolo a.C.|" & s & "]]", s
    Next s
    
    ' === Gruppo 8 === (chiusura errata a.C.]] ? a.C.)
    sostituzioni.Add "a.C.]]", "a.C."

    ' === Esecuzione delle sostituzioni (ottimizzata) ===
    For Each chiave In sostituzioni.Keys
        If InStr(ActiveDocument.Content.Text, chiave) > 0 Then
            With ActiveDocument.Content.Find
                .Text = chiave
                .Replacement.Text = sostituzioni(chiave)
                .Forward = True
                .Wrap = wdFindContinue
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchWildcards = False
                .Execute Replace:=wdReplaceAll
            End With
        End If
    Next chiave

    ' Salva solo se documento già salvato
    If ActiveDocument.Path <> "" Then
        ActiveDocument.Save
    End If

    ' Seleziona tutto e taglia (Ctrl + X)
    ActiveDocument.Content.Select
    Selection.Cut

    Application.ScreenUpdating = True
    Application.StatusBar = False
End Sub

  • Puoi anche rinominare il modulo selezionandolo, andando alla finestra "Proprietà" (in basso a sinistra) e modificando il nome nella proprietà (Name).
  • Chiudere l'editor VBA.
  • Salvare il documento Word con qualsiasi nome, selezionando nel menu a tendina "Tipo file" (o "Salva come") **"Documento di Word con attivazione macro (.docm)"**.
  • Chiudere Word.

Dopo questa procedura si può anche eliminare il file salvato, però il modulo resterà comunque attivo per altri file.

Usare lo script

modifica
  • Entrare in Wikipedia e andare sulla pagina da editare.
  • Cliccare su "Modifica" (markup wiki, non editor visuale) oppure premere sulla tastiera ALT+SHIFT+E (in alcune skin si deve anche cliccare Invio dopo).
  • Selezionare tutto (CTRL+A) e copiare il testo (CTRL+C).
  • Aprire Word, creare un nuovo documento e incollare il testo.
  • Premere ALT+F8: lo script, se non ce ne sono altri, dovrebbe essere già selezionato (altrimenti selezionarlo) e cliccare su "Esegui" (o premere Invio).
  • Al termine, lo script seleziona e taglia il testo: tornare quindi sulla pagina wiki ancora in modalità "Modifica".
  • Selezionare tutto e incollare il testo proveniente da Word (CTRL+A e CTRL+V).
  • Salvare (ALT+SHIFT+S).

Controllare il risultato

modifica

Attenzione: lo script edita alcuni numeri da cui il link non va rimosso, come nomi di pagine che finiscono per numeri o didascalie di immagini che finiscono per numero, per cui è sempre necessario controllare il risultato.

Si possono usare due modi, a seconda della lunghezza della pagina. Per pagine brevi si può aprire la cronologia e guardare cosa si è editato. Le parentesi quadre non editate in coppia dovrebbero essere facilmente visibili, quindi basta andare in "Modifica" e riaggiungerle dove erroneamente rimosse.

Il secondo modo è cercare (CTRL+F) dal ns0 se ci sono "[[" (editando eventuali link rimasti aperti), poi "]]" e infine "|". Se nessuno di questi caratteri è visibile nel ns0, vuol dire che le sostituzioni hanno avuto buon fine e che non sono stati lasciati link aperti. Questi caratteri possono essere evidenziati tramite piccole applicazioni java, come Tampermonkey per Mozilla Firefox.

Si può anche controllare se ci sono altri link da rimuovere, quali piped link non standard, link a decenni, link a giorni, link non standard come [[1949|anno precedente]], tutti da rimuovere manualmente.

Mentre si fa il controllo ci si può coordinare per far lavorare lo script su una pagina successiva, in modo da non dover aspettare e massimizzare il tempo.

Quando si è finito si può chiudere Word senza salvare il documento.