Conferir consistência da Wikidata com código IBGE
O código IBGE tem se mostrado consistente com as fontes primárias utilizadas, de modo que serve também para conferir se houve falha de atribuição do mesmo na Wikidata.
Com relação à completeza na adoção da P1585 foi confirmada: cd data/dump_wikidata grep -r "P1585" . | wc -l resultando em 5514, que em 5570 são ~99%, praticamente completo.
Implementado com php src/etc/dumpWikidata.php chk. Resultados:
- uma falha detectada, (não achou ID IBGE 3554300 em Q2027342 - Teodoro Sampaio/SP)
- 56 municípios sem ID IBGE (P1585) na Wikidata.
UPDATE io.citybr set "wdId"='Q22062859' WHERE "idIBGE"='2931400'; -- BA
UPDATE io.citybr set "wdId"='Q13109202' WHERE "idIBGE"='3554300'; -- SP
--- check and send pair to Wikidata
SELECT "wdId" as qid, "idIBGE" || concat(' /* ',name,'/',state,' */') as "P1585"
FROM io.citybr WHERE "idIBGE" IN (
'2900702', '1700400', '5200605', '1500859', '5000708', '3502408', '5201306', '4201208',
'5000906', '5201504', '5201702', '5001243', '5103379', '1600212', '3121001', '3301702',
'2204303', '3137007', '1504109', '3531001', '2407708', '2107100', '4116406', '3149952',
'2109270', '2926707', '3156908', '3157005', '3159803', '3158300', '3162302', '3162708',
'3163300', '2412500', '2412807', '3166709', '1304062', '3552700', '3552908', '3168101',
'3168200', '3553500', '3553658', '3553906', '2931400', '3169000', '3169109', '3169208',
'3554755', '5008305', '3554953', '3555208', '2517001', '3171105', '2616308', '2933307'
);
-- ou COPY (...) to '/tmp/quickStatements01.csv' HEADER CSV;
A segunda consulta resulta em
| qid | P1585 |
|---|---|
| Q818261 | 2900702 /* Alagoinhas/BA */ |
| Q566 | 1700400 /* Almas/TO */ |
| Q443583 | 5200605 /* Alto Paraíso de Goiás/GO */ |
| Q486142 | 1500859 /* Anapu/PA */ |
| ... | ... |
| Q29551446 | 2616308 /* Vicência/PE */ |
| Q330208 | 2933307 /* Vitória da Conquista/BA */ |
| Q22062859 | 2931400 /* Teodoro Sampaio/BA */ |
(56 registros)
Basta usar o arquivo gerado com quickStatements01.csv da Wikidata: QuickStatements (help).
Corrigindo erros da Wikidata com base na Wikipedia:
| qid | P1585 | nome | qid_correto |
|---|---|---|---|
| Q818261 | 2900702 | Alagoinhas/BA | Q22050101 |
| Q975677 | 4201208 | Antônio Carlos/SC | Q22063985 |
| Q608983 | 5201504 | Aporé/GO | Q22067258 |
| Q624997 | 5201702 | Aragarças/GO | Q22067256 |
Foram 4 erros de wdId. Ver discussão em Wikidata:Bot_requests#Import_area_codes_P473_from_CSV_file.
O procedimento correto é corrigi-los primeiro:
- UPDATEs: por exemplo
UPDATE io.citybr SET "wdId"='Q22050101' WHERE "idIBGE"='2900702'. - Atualizar a tabela local, usando exportação dos updates,
psql < src/io_console.sql. - Atualizar dump_wikidata com a tabela local corrigida.
Issue contemplada com a implementação do relatório php src/etc/dumpWikidata.php chk
Problema de atribuição na Wikidata
Ao subir as ~50 correções e conferir páginas Wikidata, fica mais evidente
- o problema da atribuição errada (ex. o conceito de Almas/TO não tem nada haver com as almas do purgatório) e, principalmente,
- o problema da duplicação de conceitos na Wikidata (!), tipicamente entidades mais antigas sendo mantidos como verdadeiras, apesar da Wikipedia apontar para duplicada mais nova.
A única solução, no segundo problema, é clicar e conferir um a um: conceitos abandonados em geral nem sequer possuem rótulos, ou são pobres em lista de links Wikipedia. Outra solução que ajuda a destacar os problemáticos é criando um atributo no nosso dump que list o número de links Wikipedia e destaque o link para a Wikipedia Português, que é a "fonte fiável" de auditoria do conceito.
Acrescentar a verificação de P31 - Q3184121, "instance of municipality of Brazil". Vai garantir que não ocorra caso extremo como o de atribuição na tabela city-codes de Almas/TO a almas do purgatório ao invés da cidade (ou ainda Cotriguaçu Cooperativa Central/Q30926864 no lugar de Cotriguaçu/MT).
Solução por grep: apesar do código IBGE ser "único" numa página Wikidata, será uma garantia a mais conferir "Q3184121".
Software: hora de transferir o JSON Wikidata para o PostgreSQL!
As rotinas de verificação não podem ficar como mero grep, precisam analisar consistência de forma mais completa e confiável.