Ir para o conteúdo

Visualização e Qualidade de Dados no Wikidata/Avaliação de Qualidade no Wikidata/Recoin

De Wikiversidade


Recoin

Conteúdo

Recoin-logo

O Recoin é uma ferramenta baseada no Wikidata que estima a completude relativa de um item comparando-o com itens semelhantes (por classe ou profissão) e destaca propriedades relevantes que ainda estão ausentes. Uma barra de classificação com cinco níveis (de “muito básico” a “muito detalhado”) e listas expansíveis de propriedades/IDs ausentes são exibidas diretamente na página do item para orientar editores e informar consumidores de dados sobre o grau de informação disponível.[1][2]

Como funciona

[editar | editar código]

O Recoin consulta o serviço SPARQL do Wikidata e utiliza tabelas de frequências pré-computadas (no Toolforge) para identificar, por classe/profissão, quais propriedades são mais comuns e quais faltam no item atual. O cálculo agrega as frequências em um escore de completude (níveis 1 a 5) e retorna, em JSON (ou JSONP), as principais propriedades/IDs ausentes, que a ferramenta renderiza na interface.[2]

Classificação de completude

[editar | editar código]

A escala do Recoin resume a completude relativa pela média de frequência das 5 principais propriedades ausentes para itens comparáveis. Em linhas gerais: nível 5 (0–5%), 4 (5–10%), 3 (10–25%), 2 (25–50%), 1 (50%+).[2]

Ativação do Recoin

[editar | editar código]

Para usar o Recoin na interface do Wikidata, ative a ferramenta (extensão de usuário/gadgets) em: Preferências → Gadgets → Recoin: Relative Completeness Indicator.[1][2]

API pública

[editar | editar código]

Além do gadget, há uma API no Toolforge que retorna JSON (ou JSONP) com o escore de completude e as propriedades/IDs ausentes:

Propriedades
https://recoin.toolforge.org/getmissingattributes.php?lang=

xx&subject=QID&n=10..100

Identificadores externos (IDs)
https://recoin.toolforge.org/getmissingattributes_id.php?lang=

xx&subject=QID&n=10..100

Por classe (lista de propriedades mais frequentes de uma classe)
https://recoin.toolforge.org/getbyclassid.php?subject=

QID_da_classe&n=200

Parâmetros principais: subject (Q-id), lang (código ISO da interface), n (quantos atributos/IDs listar). A API também aceita callback para JSONP (ver explicação abaixo).[1][3]

O que é JSONP?

[editar | editar código]

JSONP (JSON with Padding) é uma técnica pré-CORS para contornar a política de mesma origem em requisições cross-domain usando uma tag <script>. O servidor envolve o JSON em uma chamada de função (p.ex., callback({...})), e bibliotecas como jQuery interpretam automaticamente a resposta quando você usa callback=? em $.getJSON. Observações: funciona somente com GET, não suporta cabeçalhos personalizados, com limitações de segurança em comparação ao CORS. A API do Recoin oferece JSON puro (sem callback) e JSONP (com callback=...), o que facilita o uso direto no gadget.[4]

Exemplos de uso do Recoin em Python

[editar | editar código]

1) Obter e imprimir o JSON bruto (inclui tratamento de JSONP quando houver)

[editar | editar código]
# Exemplo didático: consulta à API do Recoin com tolerância a JSONP
# Requisitos: requests

import requests, json, re

def fetch_recoin(endpoint, subject="Q569965", lang="pt", n=20, timeout=30):
"""
endpoint: 'attributes' para propriedades ausentes ou 'ids' para identificadores externos ausentes.
subject: QID (ex.: 'Q569965').
lang: código de idioma (ex.: 'pt', 'en').
n: número máximo de itens sugeridos.
Retorno: dicionário Python com o payload JSON.
Observação: se o servidor responder em JSONP (callback(...)), removemos o 'wrapper'.
"""
base = (
"https://recoin.toolforge.org/getmissingattributes.php
"
if endpoint == "attributes"
else "https://recoin.toolforge.org/getmissingattributes_id.php
"
)
params = {"subject": subject, "lang": lang, "n": int(n)}
# Dica: deixe SEM 'callback' para priorizar JSON puro; o gadget usa JSONP, mas a API aceita ambos.
headers = {"User-Agent": "RecoinDocsExample/1.0 (+https://pt.wikiversity.org/)"}

r = requests.get(base, params=params, timeout=timeout, headers=headers)
r.raise_for_status()
txt = r.text.strip()

# Remoção robusta de JSONP: callbackName({...})
m = re.match(r'^[a-zA-Z_$][\w$]*\((.*)\)$', txt, flags=re.S)
if m:
    txt = m.group(1)

return json.loads(txt)

# Consultas: propriedades ausentes e IDs ausentes

data_props = fetch_recoin("attributes", subject="Q569965", lang="pt", n=20)
data_ids = fetch_recoin("ids", subject="Q569965", lang="pt", n=20)

print("Chaves disponíveis (propriedades):", list(data_props.keys()))

# Em algumas versões, a lista vem em 'missing_properties'

exemplo = (data_props.get("missing_properties")
or data_props.get("missing")
or data_props.get("attributes")
or [])[:1]
print("Exemplo de registro:", exemplo)

2) DataFrame com as principais propriedades ausentes

[editar | editar código]
# Requisitos: pandas

import pandas as pd

def to_df_missing(data):
"""
Normaliza diferentes variações de chaves para uma mesma estrutura tabular.
Principais campos observados na API: 'missing_properties' (lista), e em cada item:
- 'property' (PXXX), 'label' (rótulo), 'base_frequency' (frequência na classe),
'data_type' (tipo de valor), possivelmente 'present' (booleano), 'score'/'weight'.
"""
missing = (data.get("missing_properties")
or data.get("missing_attributes")
or data.get("missing")
or data.get("attributes")
or [])
rows = []
for m in missing:
rows.append({
"property": m.get("property") or m.get("pid") or m.get("p"),
"label": m.get("label") or m.get("name"),
"freq": m.get("base_frequency") or m.get("frequency") or m.get("support"),
"present": m.get("present"),
"score": m.get("score") or m.get("weight"),
"data_type": m.get("data_type")
})
return pd.DataFrame(rows)

df_props_pt = to_df_missing(data_props)
print(df_props_pt.head(10))

3) Comparar interface em dois idiomas (português vs inglês)

[editar | editar código]
# Obter payloads em PT e EN

data_pt = fetch_recoin("attributes", subject="Q569965", lang="pt", n=20)
data_en = fetch_recoin("attributes", subject="Q569965", lang="en", n=20)

df_pt = to_df_missing(data_pt).assign(lang="pt")
df_en = to_df_missing(data_en).assign(lang="en")

# Junção por propriedade para ver interseções, rótulos e frequências por idioma

merged = df_pt.merge(df_en, on="property", how="outer", suffixes=("_pt", "_en"))
print(merged[["property","label_pt","label_en","freq_pt","freq_en"]].head(15))

4) Listar identificadores externos ausentes (IDs)

[editar | editar código]
ids_pt = fetch_recoin("ids", subject="Q569965", lang="pt", n=20)
df_ids = to_df_missing(ids_pt)
print(df_ids.head(10))
Observações:
  • API pode aplicar rate limits e ocasionalmente responder via JSONP; o código acima remove o wrapper do callback, quando presente.
  • O número e a nomenclatura de chaves no JSON podem variar com atualizações (p.ex., missing_properties, missing, attributes); os exemplos são tolerantes a nomes de campos.
  • Valores do score de completude são relativos e não mede correção das afirmações; ele prioriza propriedades frequentes entre itens comparáveis.[1][2]

Boas práticas e limitações

[editar | editar código]

Comparabilidade: resultados mais úteis ao editar itens de uma mesma classe/profissão (p.ex., comparar especialidades acadêmicas entre si).

Múltiplas classes/profissões: o cálculo pondera frequências quando o item pertence a mais de uma classe/profissão.

IDs externos: há um endpoint específico para sugerir identificadores ausentes (útil para enriquecer ligações a bases externas).[1][2]

Referências

[editar | editar código]
  1. 1,0 1,1 1,2 1,3 1,4 Wikidata:Recoin. Wikidata. Página visitada em 8 de setembro de 2025.
  2. 2,0 2,1 2,2 2,3 2,4 2,5 Balaraman, Vevake; Razniewski, Simon; Nutt, Werner (abril de 2018). «Recoin: Relative Completeness in Wikidata». WWW ’18 Companion (The Web Conference) (em inglês). doi:10.1145/3184558.3191641 
  3. ReCoin — Data Quality Days 2022 (slides) (em en). Página visitada em 2025-09-08.
  4. MediaWiki:Gadget-Recoin.js (em en). Página visitada em 2025-09-08.

Conteúdos audiovisuais

[[File:WikidataCon 2017 - Data completeness How to know what Wikidata knows .webm|300px]]

Quiz

Caro(a) aluno(a), lembre-se que o quiz é uma autoavaliação.

1

O que o Recoin mede ao analisar um item do Wikidata?

Completude relativa do item em comparação a itens semelhantes
Veracidade (se as afirmações são verdadeiras)
Qualidade das fontes (se a referência é confiável)
Popularidade do item na Wikipédia

2

Onde o indicador do Recoin aparece para o usuário?

Na página do item do Wikidata (como um gadget/indicador visual)
Na página de discussão do item
No artigo correspondente da Wikipédia
Apenas em páginas de usuário

3

Como o Recoin identifica quais propriedades estão faltando?

Compara o item com itens da mesma classe/profissão
Usa tabelas de frequências pré-computadas no Toolforge
Faz varredura manual por administradores
Baseia-se somente no número de referências do item

4

Quais formatos a API pública do Recoin pode retornar?

JSON
JSONP (quando usado com parâmetro de callback)
CSV por padrão
XML por padrão

5

Qual parâmetro ativa resposta em JSONP na API do Recoin?

callback
jsonp=1
format=jsonp
origin=*

6

Sobre JSONP, quais afirmações são corretas?

É uma técnica baseada em <script> usada antes do CORS para contornar a mesma origem
Funciona via GET e envolve o JSON em uma chamada de função (ex.: callback({...}))
Permite enviar cabeçalhos personalizados como XHR moderno
É mais seguro do que CORS em qualquer cenário

7

Para que serve o parâmetro n na API do Recoin?

Definir quantas propriedades/IDs ausentes retornar
Escolher a ontologia de comparação
Mudar a classe (P31) do item
Ativar modo offline do gadget

8

Para que serve o parâmetro subject na API do Recoin?

Informar o QID do item analisado (ex.: Q569965)
Definir o idioma de rótulos
Indicar a propriedade P31 (classe)
Ligar/desligar o gadget no navegador

9

Associe corretamente endpoints e sugestões:

getmissingattributes.php → propriedades ausentes
getmissingattributes_id.php → identificadores externos ausentes
getlabels.php → rótulos ausentes
getreferences.php → referências ausentes

10

Como ativar o Recoin na interface do Wikidata?

Preferências → Gadgets → Recoin: Relative Completeness Indicator
Preferências → Aparência → Tema Recoin
Ferramentas → Bots → Ativar Recoin
Extensões → Instalar localmente no navegador

11

O que indica a escala 1–5 do Recoin?

Níveis mais altos indicam item mais completo em relação aos comparáveis
Níveis mais altos indicam mais referências por declaração
Níveis mais altos indicam mais interwikis (sitelinks)
Níveis mais altos indicam melhor redação na Wikipédia

12

Quais limitações/escopo se aplicam ao Recoin?

Mede completude relativa; não verifica a veracidade das afirmações
As sugestões são melhores quando itens são comparáveis (mesma classe/profissão)
Substitui a revisão humana das fontes
Edita automaticamente o item para preencher lacunas

13

Quais tecnologias/serviços o Recoin utiliza?

Serviço SPARQL do Wikidata (para análises/dados agregados)
Infraestrutura Toolforge para cálculos/serviços de API
ParserFunctions do MediaWiki substituem SPARQL integralmente
Banco de dados local do navegador do usuário

14

Para o item Q569965 (Audiologia), qual uso típico da API é adequado?

Solicitar, em pt/en, a lista de propriedades ausentes mais frequentes para a classe relacionada
Pedir os identificadores externos ausentes relevantes para a área
Alterar a classe do item diretamente via endpoint
Forçar tradução automática do rótulo na Wikipédia

15

Quais boas práticas ajudam a obter sugestões coerentes do Recoin?

Garantir que o item tenha P31 (classe) e/ou P106 (profissão) adequadas
Priorizar propriedades comuns dentro do mesmo domínio/classe ao editar
Remover todas as declarações existentes para “subir” de nível
Duplicar propriedades para aumentar a frequência artificialmente

16

Qual endpoint lista propriedades mais frequentes por classe (por QID de classe)?

getbyclassid.php
getclassattributes.php
gettopprops.php
classfreq.php

Conteúdo adicional

Balaraman V, Razniewski S, Nutt W. Recoin: Relative Completeness in Wikidata. In: Companion Proceedings of The Web Conference 2018 (WWW ’18 Companion). Lyon, France; 2018. p. 1787–1792. doi:10.1145/3184558.3191641.

Discussão