Wikipédia:Projetos/Check Wikipedia/Python

Para usar as correções abaixo copie e cole o código no arquivo user-fixes.py dentro da pasta do pywikipediabot (crie o arquivo se ele não existir). Essas correções poderão ser efetuadas através do comando "-fix:checkwiki" do replace.py.


Atenção: as regex abaixo precisam ser revisadas, edições com elas podem conter erros.

# -*- coding: utf-8  -*-

if 'fixes' not in globals(): fixes = {}

fixes['checkwiki'] = {
  'regex': True,
  'msg': {'_default': u'[[Wikipedia:Projetos/Check Wikipedia|Checkwiki]]: limpeza de sintaxe'},
  'replacements': [
    (r'< */? *i */? *>', r'\'\''),
    (r'(?i)< */? *(b|strong) */? *>', r'\'\'\''),
    (r'(?i)< */? *p */? *>', r'\n\n'),
    (r'(?i)<sup>1</sup>', r'¹'),
    (r'(?i)<sup>2</sup>|&sup2;', r'²'),
    (r'([^\.])\.\.\.([^\.])', r'\1…\2'),  # '...' –> '…'
    (r'<\-+', r'←'),
    (r'([^\-])\->', r'\1→'),
    (r'<=+', r'⇐'),
    (r'=+>', r'⇒'),
    (r'&ndash;', r'–'),
    (r'< *(\w*) *\w* *= *>', r'<\1>'),  # '<tag param=>' –> '<tag>'
    (r'< */? *br */? *>', r'<br />'),  # '<br>' –> '<br />'
    (r'(\{\{|\[\[) +', r'\1'),  # '{{ abc' –> '{{abc', '[[ abc' –> '[[abc'
    (r' *[ |] *(\}\}|\]\])', r'\1'),  # 'abc }}' –> 'abc}}', 'abc ]]' –> 'abc]]', '|}}' –> '}}, '|]]' –> ']]'
    (r'= *\{?\{?(artigos? relacionados?|links? internos?|Veja também)\}?\}? *=', r'= Ver também ='),
    (r'= *\{?\{?((apontadore?s?|links?|ligaç[ãõ][oe]s?|páginas?|referências?|enlaces) extern[ao]s?|links)\}?\}? *=', r'= Ligações externas ='),
    (r'^(=+) *([^=\n]*?\w[^=\n]*?) *(=+) *\n[\n ]*', r'\1 \2 \3\n'),  # '==seção==' –> '== seção =='
    (r'\[\[[Cc]ategory?i?a?: *([^\]]*?[^ \|]) *\]\]', r'[[Categoria:{{subst:ucfirst:\1}}]]'),
    (r'\* *\[(http://[^] ]*) ([^]]*)\] *\{\{\(?\(?([a-z][a-z])\)?\)?\}\} *\n', r'*{{link|\3|2=\1|3=\2}}\n'),
    (r'\* *\{\{\(?\(?([a-z][a-z])\)?\)?\}\}[ -]*\[(http://[^] ]*) ([^]]*)\]', r'*{{link|\1|2=\2|3=\3}}'),
    (r'\{\{[Pp]redefinição:', r'{{'),
    (r'\{\{commons1? *\| *:?category *\:', r'{{commonscat|'),
    (r'\{\{termina correlatos\}\} *\n?', r'|}\n'), # Poucos afluentes; passar o robô neles e eliminar essa linha
    (r'\{\{correlato *[|/]([^\|]*)\| *\:? *category?i?a?\:', r'{{correlato|\1cat|'),# <– Revisão parada aqui
    (r'\{\{correlato *[|/]([^\|]*)\|([^\}]*)\}\} *\n?', r'|\1=\2\n'),
    (r'\{\{começa correlatos *\}\} *\n?', r'{{correlatos\n'),
    (r'\[\[([0-9][0-9]? de [^\]]*) *\]\], ?\[\[ *([0-9]+) *\]\]', r'[[\1]] de [[\2]]'),
    (r'\b(d)écada de ([1-9]0[^0-9])', r'\1écada de 19\2'),
    (r'\banos ([1-9]0[^0-9])', r'anos 19\1'),
    (r'\[\[Imagem?\: *Flag of Germany.svg *\| *2[0-9] *px\]\]', r'{{DEUb}}'),
    (r'\[\[Imagem?\: *Flag of Brazil.svg *\| *2[0-9] *px *\|?\]\]', r'{{BRAb}}'),
    (r'\[\[Imagem?\: *Flag of Spain.svg *\| *2[0-9] *px\]\]', r'{{ESPb}}'),
    (r'\[\[Imagem?\: *Flag of the United States.svg *\| *2[0-9] *px\]\]', r'{{USAb}}'),
    (r'\[\[Imagem?\: *Flag of Ireland.svg *\| *2[0-9] *px\]\]', r'{{IRLb}}'),
    (r'\[\[Imagem?\: *Flag of Italy.svg *\| *2[0-9] *px\]\]', r'{{ITAb}}'),
    (r'\[\[Imagem?\: *Flag of Japan.svg *\| *2[0-9] *px\]\]', r'{{JPNb}}'),
    (r'\[\[Imagem?\: *Flag of Portugal.svg *\| *2[0-9] *px\]\]', r'{{PRTb}}'),
    (r'\[\[Imagem?\: *Flag of the United Kingdom.svg *\| *2[0-9] *px\]\]', r'{{GBRb}}'),
    (r'^ *\'\'\'([^\']*)\'\'\' *$', r'; \1'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*) d[aeo] ([^\}]*\}\})', r'\1 \2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[ãáâäàåä]([^\}]*\}\})', r'\1a\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[ÅÂÁ]([^\}]*\}\})', r'\1A\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[éèêëě]([^\}]*\}\})', r'\1e\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)É([^\}]*\}\})', r'\1E\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[íï]([^\}]*\}\})', r'\1i\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[óöøõô]([^\}]*\}\})', r'\1o\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[ÓØ]([^\}]*\}\})', r'\1O\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[úüû]([^\}]*\}\})', r'\1u\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[ñń]([^\}]*\}\})', r'\1n\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)Ñ([^\}]*\}\})', r'\1N\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)ł([^\}]*\}\})', r'\1l\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[çćč]([^\}]*\}\})', r'\1c\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)ř([^\}]*\}\})', r'\1r\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[šś]([^\}]*\}\})', r'\1s\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)æ([^\}]*\}\})', r'\1ae\2'),
    (r'(\{\{DEFAULTSORT *\:[^\}]*)[º"]([^\}]*\}\})', r'\1\2'),
    (r'\{\{DEFAULTSORT *\: *([^\}]*?)\}\}', r'{{DEFAULTSORT:\1}}'),
    (r'= *Referencias *=', r'= Referências ='),
    (r'=* *Refer[eê]ncias *=* *\r?\n *< *references */?>', r'{{ref-section}}'),
    (r'< *small *>< *references */ *>< */small *>', r'{{reflist}}'),
    (r'== *Refer[eê]ncias *== *\r?\n *\{\{ *reflist *\}\}', r'{{ref-section}}'),
    (r'=* *Notas *=* *\r?\n *< *references */?>', r'{{ref-section|Notas}}'),
    (r' *(<ref[^>]*>[^<>]*</ref>) *([\.,;\:])', r'\2\1'),
    (r' *(<ref[^>]*/ *>) *([\.,;\:])', r'\2\1'),
    (r'=([^\n=]*)\: *=', r'= \1 ='),
    (r'([0-9])[\.,]([0-9][0-9]) *m', r'\1,\2 m'),
    (r'\bKgs?\b', r'kg'),
    (r'\[\[\s*(?:Image|File|Arquivo|Ficheiro)\s*:\s*([^|\]]+\.(?:png|gif|jpg|jpeg|svg|tiff|tif))\s*(\||\]\])', r'[[Imagem:\1\2'),
    (r'= *\{?\{? *Bibliografia *\}?\}? *=', r'= Bibliografia ='),
    (r'^ *([\#\*\:\;]+) *', r'\1 '),
    (r'(\r?\n) *([\#\*])([^\n\r\*]*)\r?\n *(\r?\n) *([\#\*])', r'\1\2\3\4\5'),
    (r'= *\'\'\'([^\'=]*)\'\'\' *=', r'= \1 ='),
    (r'= *Elenco Principal *=', r'= Elenco principal ='),
    (r'\'\'\' é uma banda', r'\'\'\' é uma [[banda musical|banda]]'),
    (r'\'\'\' é um filme', r'\'\'\' é um [[filme]]')
  ]
}


Inclusão em script editar

As correções acima podem ser incluídas num script através do comando

execfile('user-fixes.py')
checkwiki = fixes['checkwiki']['replacements']


Exemplo básico de utilização:

import wikipedia as pywikibot
import re

execfile('user-fixes.py')
checkwiki = fixes['checkwiki']['replacements']
texto = pywikibot.Page(None, u'Python').get()  # texto do artigo 'Python'
novo = texto
for item in checkwiki:
  novo = re.sub(item[0], item[1], novo)
pywikibot.showDiff(texto, novo)  # mostra na tela o diff entre o texto antes e depois das correções (não salva a edição)