Bandeira de bot editar

Ola Gallaecio.

Xa tes bandeira de bot.

Podes meterlle man á Categoría:Categorías pendentes de ser movidas?

Graciñas. --. HombreDHojalata.conversa 4 de novembro de 2014 ás 21:58 (UTC)Responder

  Feito!GallaecioE logo? 5 de novembro de 2014 ás 07:21 (UTC)Responder
import re
from pywikibot.page import Category
from pywikibot.pagegenerators import CategorizedPageGenerator, PreloadingGenerator, \
    SubCategoriesPageGenerator

targetCategoryTemplateRe = re.compile(u"\{\{ *Redirección de categoría *\| *([^}]+) *\}\}")
categoryReTemplate = u"\[\[ *Categoría *: *{} *(?:\| *([^]|]+) *)?\]\]"

# Por cada categoría en «Categoría:Categorías pendentes de ser movidas»:
category = Category(self.site, u"Categorías pendentes de ser movidas")
generator = PreloadingGenerator(SubCategoriesPageGenerator(category))
for sourceCategory in generator:

    sourceCategoryName = sourceCategory.title(withNamespace=False)
    categoryRe = re.compile(categoryReTemplate.format(re.escape(sourceCategoryName)))

    # Ler o contido da páxina da categoría.
    sourceCategoryContent = sourceCategory.get()

    # Obter a categoría de destino do uso do modelo «Redirección de categoría».
    match = targetCategoryTemplateRe.search(sourceCategoryContent)
    targetCategoryName = match.group(1)

    # Se a categoría de destino non existe:
    targetCategory = Category(self.site, targetCategoryName)
    if not targetCategory.exists():

        # Partir do contido da categoría actual.
        # Eliminar o modelo «Redirección de categoría» e maila súa liña se queda baleira tras eliminar o modelo.
        targetCategoryContent = u""
        for line in sourceCategoryContent.splitlines():
            match = targetCategoryTemplateRe.search(line)
            if match:
                line = line.replace(match.group(0), u"")
                line = line.strip()
                if not line:
                    continue
            targetCategoryContent += line + u"\n"

        # Crear a nova categoría co contido restante.
        comment = u"Categoría creada a partir do contido de «{}».".format(sourceCategoryName)
        self.userPut(page=targetCategory, oldtext=u"", newtext=targetCategoryContent,
                        comment=comment, show_diff=True)

    # Por cada subcategoría na categoría vella:
    subcategoryGenerator = PreloadingGenerator(SubCategoriesPageGenerator(sourceCategory))
    for subcategory in subcategoryGenerator:

        # Cambiar a categoría vella pola categoría nova.
        subcategoryContent = subcategory.get()
        match = categoryRe.search(subcategoryContent)
        if match:
            if len(match.groups()) > 1:
                replacement = u"[[{}|{}]]".format(
                    targetCategory.title(withNamespace=True),
                    match.group(1))
            else:
                replacement = u"[[{}]]".format(targetCategory.title(withNamespace=True))
            newSubcategoryContent = subcategoryContent.replace(match.group(0), replacement)
        comment = u"Cambiouse a categoría «{}» pola categoría «{}».".format(
            sourceCategoryName,
            targetCategoryName)
        self.userPut(page=subcategory, oldtext=subcategoryContent,
                        newtext=newSubcategoryContent, comment=comment, show_diff=True)

    # Por cada artigo na categoría vella:
    pageGenerator = PreloadingGenerator(CategorizedPageGenerator(sourceCategory))
    for page in pageGenerator:

        # Cambiar a categoría vella pola categoría nova.
        pageContent = page.get()
        match = categoryRe.search(pageContent)
        if match:
            if len(match.groups()) > 1:
                replacement = u"[[{}|{}]]".format(
                    targetCategory.title(withNamespace=True),
                    match.group(1))
            else:
                replacement = u"[[{}]]".format(targetCategory.title(withNamespace=True))
            newPageContent = pageContent.replace(match.group(0), replacement)
        comment = u"Cambiouse a categoría «{}» pola categoría «{}».".format(
            sourceCategoryName,
            targetCategoryName)
        self.userPut(page=page, oldtext=pageContent, newtext=newPageContent,
                        comment=comment, show_diff=True)

    # Substituír o modelo «Redirección de categoría» polo modelo «Lixo» na categoría vella.
    newCategoryLink = u"[[:{}|{}]]".format(targetCategory.title(withNamespace=True),
                                            targetCategoryName)
    comment = u"O contido desta categoría moveuse á categoría «{}».".format(newCategoryLink)
    newSourceCategoryContent = u"{{{{Lixo|{}}}}}".format(comment)
    self.userPut(page=sourceCategory, oldtext=sourceCategoryContent,
                    newtext=newSourceCategoryContent, comment=comment, show_diff=True)

Retirar "Ligazón AB|xx" e "Link GA|xx" editar

Ola.

Agora faise en Wikidata a indicación de se un artigo é "bo" noutra lingua.

Poderías por o bot a retirar {{Ligazón AB|??}} e {{Link GA|??}}(onde "??" é o código dunha lingua) dos case 1.500 artigos que os inclúen?

Graciñas. --. HombreDHojalata.conversa 5 de novembro de 2014 ás 17:28 (UTC)Responder

  Feito!GallaecioE logo? 5 de novembro de 2014 ás 21:48 (UTC)Responder
import re

from pywikibot.page import Link, Page
from pywikibot.pagegenerators import PreloadingGenerator, \
    ReferringPageGenerator


templateReModel = u"[ \r\n\t]*\r?\n\{{\{{ *{template} *(?:\| *[^}}|]+)?\}}\}}|\{{\{{ *{template} *(?:\| *[^}}|]+)?\}}\}}\r?\n[ \n\r\t]*"

for templateName in [u"Link GA", u"Ligazón AB"]:

    templateRe = re.compile(templateReModel.format(template=re.escape(templateName)))

    generator = ReferringPageGenerator(
        Page(Link(
            templateName,
            defaultNamespace=10,
            source=self.site)),
        onlyTemplateInclusion=True)
    generator = PreloadingGenerator(generator)

    for page in generator:
        oldPageContent = page.get()
        newPageContent = templateRe.sub(u"", oldPageContent)
        comment = u"Eliminouse o modelo «{}».".format(templateName)
        self.userPut(page=page, oldtext=oldPageContent,
                        newtext=newPageContent, comment=comment,
                        show_diff=True)

*minusválidos -> discapacitados editar

Podes facer a mudanza en Especial:Páxinas que ligan con esta/Modelo:Praia?

Graaazas. --. HombreDHojalata.conversa 8 de novembro de 2014 ás 12:50 (UTC)Responder

  Feito!GallaecioE logo? 9 de novembro de 2014 ás 05:45 (UTC)Responder

Regra no ficheiro user-fixes.py:

fixes['discapacidade'] = {
    'regex': True,
    'msg': {
        '_default':u'*minusválidos → discapacitados',
    },
    'replacements': [
        (ur'\bMinusválid([ao]s?)\b', ur'Discapacitad\1'),
        (ur'\bminusválid([ao]s?)\b', ur'discapacitad\1'),
        (ur'\bMinusvalidez\b', ur'Discapacidade'),
        (ur'\bminusvalidez\b', ur'discapacidade'),
    ]
}

Orde:

python2 core/scripts/replace.py -transcludes:"Praia" -fix:discapacidade -always

[[adega (de viño)]] → [[adega (industria)]] editar

Ola, Gallaecio! Teño unha solicitude para o teu bot; poderías corrixir na Galipedia as ligazóns existentes cara a [[adega (de viño)]] e modificalas por [[adega (industria)]]? Cando estea avisa, para borrar a redirección co nome erróneo.

Un saúdo, e mil grazas!! --Estevoaei (conversa) 20 de novembro de 2014 ás 11:04 (UTC)Responder

  Feito!GallaecioE logo? 24 de novembro de 2014 ás 07:06 (UTC)Responder
#!/usr/bin/env python2
# -*- coding:utf-8 -*-

"""
Este guión elimina todas as ligazóns a unha redirección e a continuación marca
dita redirección para borrado.

Debe pasárselle o nome da redirección como parámetro.
"""


from pywikibot import Bot


class ShydeNaGalipedia(Bot):

    def __init__(self, redirect_page_name, **kwargs):
        super(ShydeNaGalipedia, self).__init__(**kwargs)
        from pywikibot import Site
        self.site = Site("gl", "wikipedia", "Shyde")
        self.redirect_page_name = redirect_page_name


    def run(self):

        import re

        from pywikibot.page import Link, Page
        from pywikibot.pagegenerators import PreloadingGenerator, \
            ReferringPageGenerator

        # Get redirect target.
        redirect_page = Page(Link(self.redirect_page_name, source=self.site))
        assert(redirect_page.isRedirectPage())
        redirect_target = redirect_page.getRedirectTarget()
        page_name_pattern = u"{}{}".format(
            u"[{}{}]".format(
                self.redirect_page_name[0].lower(),
                self.redirect_page_name[0].upper()),
            re.escape(self.redirect_page_name[1:])) \
            .replace(u"\ ", u"[ _]")
        link_re = re.compile(ur"\[\[ *{} *(\||\]\])".format(page_name_pattern))

        # Get list of links to the specified page.
        generator = ReferringPageGenerator(redirect_page)
        generator = PreloadingGenerator(generator)

        # Update links.
        for page in generator:
            old_page_content = page.get()
            new_page_content = link_re.sub(ur"[[{}\1".format(
                redirect_target.title()), old_page_content)
            comment = u"As ligazóns a «{}» apuntan agora a «{}».".format(
                self.redirect_page_name, redirect_target.title())
            self.userPut(page=page, oldtext=old_page_content,
                         newtext=new_page_content, comment=comment,
                         show_diff=True)

        # Assert that there are no more links.
        generator = ReferringPageGenerator(redirect_page)
        generator = PreloadingGenerator(generator)
        remaining_links = list(generator)
        if len(remaining_links) != 0:
            print(u":: As seguintes páxinas aínda conteñen ligazóns a "
                u{}»:".format(self.redirect_page_name))
            print(u"\n".join([u"• {}".format(page.title())
                              for page in remaining_links]))
            print(u":: Corrixa as páxinas da lista manualmente antes de "
                u"marcar a redirección para borrado.")
            from sys import exit
            exit()

        # Mark redirection page for removal.
        comment = u"Esta páxina moveuse a «[[{}]]».".format(
            redirect_target.title())
        new_redirect_page_content = u"{{{{Lixo|{}}}}}".format(comment)
        self.userPut(page=redirect_page,
                     oldtext=redirect_page.get(get_redirect=True),
                     newtext=new_redirect_page_content, comment=comment,
                     show_diff=True)


def main(argv):
    bot = ShydeNaGalipedia(argv[0].decode(u"utf-8"))
    bot.run()



if __name__ == "__main__":
    from sys import argv
    main(argv[1:])

Concellos de → Concellos da provincia de editar

Nas subcategorías da Categoría:Concellos de España habería que mover tódolos artigos das categorías Concellos de ... a Concellos da provincia de .... --. HombreDHojalata.conversa 25 de outubro de 2014 ás 18:19 (UTC) @ Conversa usuario:GallaecioResponder

  Feito! ─ ─ GallaecioE logo? 14 de decembro de 2014 ás 18:28 (UTC)Responder

Para marcar as categorías co modelo Redirección de categoría:

#!/usr/bin/env python2
# -*- coding:utf-8 -*-

"""
Engade o modelo {{Redirección de categoría}} ás categorías de concellos por
provincia.
"""

import re

from pywikibot import Bot


class ShydeNaGalipedia(Bot):

    def __init__(self, **kwargs):
        super(ShydeNaGalipedia, self).__init__(**kwargs)
        from pywikibot import Site
        self.site = Site("gl", "wikipedia", "Shyde")
        self.category_name_regex = re.compile(u"^Concellos (d.*)$")


    def run(self):

        import re

        from pywikibot.page import Link, Category
        from pywikibot.pagegenerators import PreloadingGenerator, \
            SubCategoriesPageGenerator

        root_category = Category(Link(u"Categoría:Concellos de España",
                                  source=self.site))
        generator = SubCategoriesPageGenerator(root_category)
        generator = PreloadingGenerator(generator)
        for category in generator:
            if category.title(withNamespace=False).startswith(u"Concellos d"):

                subcategory_generator = SubCategoriesPageGenerator(category)
                subcategory_generator = PreloadingGenerator(
                    subcategory_generator)

                for subcategory in subcategory_generator:

                    category_content = subcategory.get()
                    if u"{{Redirección de categoría|" in category_content:
                        continue
                    category_name = subcategory.title(withNamespace=False)
                    if category_name.startswith(u"Concellos da provincia d") \
                            or category_name.startswith(
                                u"Concellos galegofalantes da provincia d"):
                        continue

                    match = self.category_name_regex.match(category_name)
                    if match:
                        new_category_name = u"Concellos da provincia {}" \
                            .format(match.group(1))
                    else:
                        print(u"Saltouse «{}».".format(category_name))
                        continue
                    new_category_content = \
                        u"{{{{Redirección de categoría|{}}}}}\n{}".format(
                            new_category_name,
                            category_content)
                    comment = u"Marcada para mover a «{}».".format(
                        new_category_name)
                    self.userPut(page=subcategory, oldtext=category_content,
                                newtext=new_category_content, comment=comment,
                                show_diff=True)


def main(argv):
    bot = ShydeNaGalipedia()
    bot.run()


if __name__ == "__main__":
    from sys import argv
    main(argv[1:])
Nota: Non é perfecto, foi necesario desfacer cambios feitos co guión.

Unha vez marcadas as categorías, non houbo máis que executar o guión de mantemento, que entre as súas tarefas inclúe a de mover categorías marcadas co modelo Redirección de categoría e mailo contido das categorías.

Como sabes, agora as categorías teñen a opción de "Mover" (igual que os artigos). Iso está ben porque move o historial e automaticamente modifica o wikidata.
A cousa é que o bot non moveu. Creou unha categoría nova e branqueou a vella, por iso as categorías novas non aparecen coas ligazóns interlingüísticas de Wikidata.
Poderías revisar iso?
Moitas grazas. --. HombreDHojalata.conversa 14 de decembro de 2014 ás 14:37 (UTC)Responder
Pois non tiña nin idea. Queda modificado o guión de mantemento para utilizar a funcionalidade de mover. Moitas grazas! ─ GallaecioE logo? 14 de decembro de 2014 ás 18:28 (UTC)Responder

Importar datos do IGE editar

Se se collen os datos de poboación dos concellos de Galicia do IGE, non se poderían actualizar de forma automática e doada os artigos dos concellos (habería que actualizar a poboación e o ano dos datos de poboación)? E si se pode facer cos concellos, poderá facerse tamén coas parroquias, non? ;) Saúdos, --Elisardojm (conversa) 26 de outubro de 2014 ás 21:14 (UTC) @ Wikipedia:Bots/Peticións de aprobaciónResponder

Facer isto é certamente posíbel e moi interesante, pero ademais gustaríame meter os datos en Wikidata e usar os datos de Wikidata na Galipedia. Pasará algún tempo ata que me poña con isto, pero farase. ─ GallaecioE logo? 14 de decembro de 2014 ás 11:25 (UTC)Responder
Home, tes toda a razón en que o ideal sería que eses datos estiveran en Wikidata, e que os artigos recibisen esa información dese repositorio de forma automática engadindo tamén a referencia primaria desa información, o que pasa é que de Wikidata eu aínda non mirei nada máis que o dos interwikis.
E isto aplicaría tamén para a superficie dos concellos e outros datos fixos das caixas de información. Cando te poñas a mirar isto se che apetece avísame e vou botándolle eu tamén un ollo por se che podo axudar nalgo, tamén teño colegas na wiki-es e wiki-cat que ó mellor poderían botarnos unha man con algunha dúbida. Saúdos, --Elisardojm (conversa) 15 de decembro de 2014 ás 13:48 (UTC)Responder

non se gañou nunha hora editar

Olla, Gallaecio! Como vai?

Podes dicirlle ao bot que mude as ligazóns cara a Zamora, España por Zamora?

Mil grazas!! --Estevo(aei)pa o que queiras... 21 de decembro de 2014 ás 00:53 (UTC)Responder

  Feito!GallaecioE logo? 21 de decembro de 2014 ás 14:40 (UTC)Responder

Para cubrir a maioría dos casos:

python2 core/scripts/replace.py "[[Zamora, España|Zamora]]" "[[Zamora]]" -ref:"Zamora, España" -family:wikipedia -lang:gl -summary:"Zamora, España → Zamora" -always

O resto (2) editeinos a man.

parroquias galegas editar

Ola de novo!

Vou facer a categoría:Parroquias de Galicia por advocación, e quería pedirche unha axudiña. O asunto é que agora as parroquias pertencen, por exemplo a categoría:Parroquias de Abadín, e estas á súa vez pertencen directamente a Categoría:Parroquias de Galicia, pero quería crear a subcategoría Categoría:Parroquias de Galicia por concello. Podería Shyde facer estes 315 cambios? Sería facer que "categoría:Parroquias de tal concello" pasase de estar en "Categoría:Parroquias de Galicia" a "Categoría:Parroquias de Galicia por concello".

Se me expliquei mal, avisa.

Mil grazas, e un saúdo! --Estevo(aei)pa o que queiras... 26 de decembro de 2014 ás 01:23 (UTC)Responder

  Feito!GallaecioE logo? 27 de decembro de 2014 ás 16:45 (UTC)Responder
#!/usr/bin/env python2
# -*- coding:utf-8 -*-

"""Este guión move as subcategorías de [[Categoría:Parroquias de Galicia]] que
corresponden a unha categoría de parroquias por concello á categoría
[[Categoria:Parroquias de Galicia por concello]]."""


from pywikibot import Bot


class ShydeNaGalipedia(Bot):

    def __init__(self, **kwargs):
        super(ShydeNaGalipedia, self).__init__(**kwargs)
        from pywikibot import Site
        self.site = Site("gl", "wikipedia", "Shyde")


    def run(self):

        import re

        from pywikibot.page import Link, Category
        from pywikibot.pagegenerators import \
            PreloadingGenerator, \
            SubCategoriesPageGenerator

        parroquias_de_galicia = Category(Link(
            u"Categoría:Parroquias de Galicia", source=self.site))
        generator = SubCategoriesPageGenerator(parroquias_de_galicia)
        generator = PreloadingGenerator(generator)

        # Update links.
        for subcategory in generator:
            subcategory_name = subcategory.title(withNamespace=False)
            if re.match(u"^Parroquias d(e|[ao]s?) ", subcategory_name) and \
                    not subcategory_name.startswith(u"Parroquias de Galicia"):
                old_content = subcategory.get()
                new_content = re.sub(
                    ur"(?<=\[\[) *[cC]ategor(ía|y) *: *[pP]arroquias de "
                        u"Galicia *(?=[]\|])",
                    u"Categoría:Parroquias de Galicia por concello",
                    old_content)
                comment = u"Cambiouse a categoría [[:Categoría:Parroquias " \
                          u"de Galicia|Parroquias de Galicia]] pola " \
                          u"categoría [[:Categoría:Parroquias de Galicia " \
                          u"por concello|Parroquias de Galicia por concello]]."
                self.userPut(page=subcategory, oldtext=old_content,
                            newtext=new_content, comment=comment,
                            show_diff=True)


def main(argv):
    bot = ShydeNaGalipedia()
    bot.run()



if __name__ == "__main__":
    from sys import argv
    main(argv[1:])

Contra o reloxo editar

Ola.

Podes mudar *contrarreloxo e *contrareloxo por contra o reloxo [1] ?

Graciñas! --. HombreDHojalata.conversa 28 de decembro de 2014 ás 20:23 (UTC)Responder

  Feito!GallaecioE logo? 29 de decembro de 2014 ás 10:53 (UTC)Responder

Empreguei a seguinte configuración de substitución no ficheiro «user-fixes.py»:

fixes['contra_o_reloxo'] = {
    'regex': True,
    'msg': {
        '_default':u'*contrarreloxo → contra o reloxo',
    },
    'replacements': [
        (ur"\b([Bb])omba contrarr?eloxo\b", ur"\1omba de reloxaría"),
        (ur"\bBomba Contrarr?eloxo\b", ur"Bomba de Reloxaría"),
        (ur"\[\[ *[Cc]ontrarr?eloxo *\| *([Cc])ontrarr?eloxista *\]\]", ur"\1orredor de [[contra o reloxo]]"),
        (ur"(?u)\b([cC])ontrarr?eloxistas\b", ur"\1orredores de contra o reloxo"),
        (ur"(?u)\b([cC])ontrarr?eloxista\b", ur"\1orredor de contra o reloxo"),
        #(ur'\bA contrarr?eloxo\b', ur'Contra o reloxo'),
        #(ur'\ba contrarr?eloxo\b', ur'contra o reloxo'),
        (ur'(?u)(?<=\w )Contrarr?eloxos?\b', ur'Contra o Reloxo'),
        (ur'(?u)\[\[ *([Cc])ontrarr?eloxo *\]\]s\b', ur'[[\1ontra o reloxo]]'),
        (ur'(?u)\b([Cc])ontrarr?eloxos?\b', ur'\1ontra o reloxo'),
    ]
}

A aplicación das substitucións foi sempre mediante revisión manual, a configuración de substitución orixinal non tiña máis de dúas liñas e funa expandindo a medida que aparecían novos casos.

Para a aplicación das substitucións executei o guión «replace.py» do seguinte xeito:

python2 scripts/replace.py -fix:contra_o_reloxo -search:"contrarreloxo" -family:wikipedia -lang:gl -ns:0

Capitanía *Xeral -> Capitanía Xeneral editar

Ola Gallaecio.

DiRAG:

capitanía
substantivo feminino
  1   Cargo de capitán.
  Aspiraba á capitanía.
FRASES E EXPRESIÓNS CON capitanía
Capitanía xeneral
  1   Cargo de capitán xeneral.
  Tomou posesión da capitanía xeneral.
  2   Residencia e oficinas do capitán xeneral.
  Nesta cidade está a capitanía xeneral

Podes facer a mudanza?

Moitas grazas e bo ano. --. HombreDHojalata.conversa 1 de xaneiro de 2015 ás 10:59 (UTC)Responder

  Feito!GallaecioE logo? 1 de xaneiro de 2015 ás 13:15 (UTC)Responder

Empreguei a seguinte configuración de substitución no ficheiro «user-fixes.py»:

fixes['capitania'] = {
    'regex': True,
    'msg': {
        '_default':u'capitanía *xeral → capitanía xeneral',
    },
    'replacements': [
        (ur'\b([Cc])apitanía ([Xx])eral\b', ur'\1apitanía \2eneral'),
    ]
}

Para a aplicación das substitucións executei o guión «replace.py» do seguinte xeito:

python2 scripts/replace.py -fix:capitania -search:"capitanía" -family:wikipedia -lang:gl -ns:0

Algo non foi ben (Especial:Páxinas_que_ligan_con_esta/Capitanía_Xeral_de_Galicia). --. HombreDHojalata.conversa 1 de xaneiro de 2015 ás 13:35 (UTC)Responder

Non debín fiarme da busca da Wikipedia para buscar páxinas que necesitasen cambios, tocará aplicar os cambios a todas as páxinas do wiki. Tardará o seu, aviso. ─ GallaecioE logo? 1 de xaneiro de 2015 ás 14:09 (UTC)Responder
Agora si. En realidade AMPERIO fixo todos os cambios que faltaban manualmente antes de que o bot puidese facelos, todos salvo un que afectaba a Historia do viño. Agora non debería poñer "Capitanía xeral" máis que en Capitanía Xeneral de Galicia, onde aparece a expresión con esa forma dentro dun <ref> en maiúsculas]] (entendo que será mellor non cambialo aí, pero cámbiao se che parece). ─ GallaecioE logo? 1 de xaneiro de 2015 ás 16:40 (UTC)Responder

Volvín aplicar as substitucións executando o guión «replace.py» do seguinte xeito:

python2 scripts/replace.py -fix:capitania -xml:glwiki-20141224-pages-articles.xml -family:wikipedia -lang:gl -ns:0

O dump XML ao que apunta a orde descargueino de dumps.wikimedia.org.

Sudáfrica editar

Grazas! Podes darlle a *Suráfrica -> Sudáfrica (segundo [2])? --. HombreDHojalata.conversa 12 de xaneiro de 2015 ás 12:17 (UTC)Responder

  Feito!GallaecioE logo? 12 de xaneiro de 2015 ás 21:36 (UTC)Responder
Non tal [3] --. HombreDHojalata.conversa 12 de xaneiro de 2015 ás 22:58 (UTC)Responder

────────────────────────────────────────────────────────────────────────────────────────────────────Feito, grazas! Agora que está amañado o topónimo, habería que facer o propio co xentilicio. Ollo, ó contrario do topónimo o xentilicio correcto é con "r".

Os xentilicios masculino singular e masculino plural xa están amañados á man. Quedan por amañar os xentilicios femininos, singular e plural:

Por certo, deberías excluír da acción correctora do bot tódalas páxinas que comecen por Wikipedia:A Taberna ..., para que non desvirtúe as conversas. --. HombreDHojalata.conversa 13 de xaneiro de 2015 ás 22:41 (UTC)Responder
  Feito! (só foron necesarios 5 cambios) ─ GallaecioE logo? 23 de xaneiro de 2015 ás 07:04 (UTC)Responder

No user-fixes.py:

fixes['sudafricana'] = {
    'regex': True,
    'msg': {
        '_default':u'*sudafricana → surafricana',
    },
    'replacements': [
        (ur'\b([Ss]u)d(african[ao]s?)\b', ur'\1r\2'),
    ]
}

E para aplicar os cambios:

python2 scripts/replace.py -fix:sudafricana -family:wikipedia -lang:gl -ns:0 -xml:glwiki-20141224-pages-articles.xml

O dump XML ao que apunta a orde descargueino de dumps.wikimedia.org.