Skip to main content

colsemantics

Descobre o que uma coluna é e do que ela fala — a partir do nome, de abreviações corporativas e do conteúdo.

cd_dpto_lot não está em nenhum dicionário. Mas a abreviatura reconstrói codigo / departamento / lotacao, o conteúdo confirma baixa cardinalidade, e o resultado é uma coluna com papel "Chave Identificadora" e domínio "Estrutura Organizacional" — com a confiança e a evidência que levaram a essa conclusão.

from colsemantics import inferir_semantica

inferir_semantica("cd_dpto_lot")
# {
#   "semantica": "Chave Identificadora (ID)",
#   "papel": "Chave Identificadora (ID)",
#   "dominio": "Estrutura Organizacional",
#   "confianca_score": 0.87,
#   "origem": "abreviatura 'cd' → 'codigo' + abreviatura 'lot' → 'lotacao'",
#   "conclusiva": True,
#   "hipoteses": [...],
# }

Por que isso é diferente de inferir dtype

Toda ferramenta de profiling te diz que uma coluna é int64 ou object. Nenhuma te diz que f27 é geografia porque os valores são siglas de UF, ou que DEPARTMENT_NAME não é dado pessoal mesmo terminando em _NAME. É essa segunda pergunta — papel (o que a coluna é: chave, data, valor financeiro...) e domínio (do que ela fala: estrutura organizacional, cargo, localidade...) — que colsemantics responde.

Como funciona

A inferência é uma cascata de detectores independentes, não um if/elif em que o primeiro match vence:

  1. Padrão de conteúdo validado (CPF, CNPJ, e-mail...) — a pista mais forte que existe.
  2. Token forte — match exato contra um dicionário curado, com abreviações expandidas (vl → valor).
  3. Fuzzy (Jaro-Winkler) — nome parecido com uma palavra-chave de domínio, tolera erro de digitação.
  4. Gazetteer de conteúdo — os valores da coluna batem com um conjunto fechado conhecido (UFs, meses, sexo/gênero...), independente do nome.
  5. Assinatura estrutural — a forma dos dados (inteiro crescente e único, decimal de 2 casas assimétrico à direita...) sugere o papel.
  6. Contexto da tabela — colunas vizinhas já resolvidas desambiguam abreviaturas ambíguas (dep é departamento, dependente ou depósito — sozinho é insolúvel, trivial se a tabela já fala de RH).

Cada detector emite evidência com peso; a combinação é noisy-OR (1 - Π(1 - peso)), não "o primeiro que responder". Pistas fracas se somam.

Instalação

pip install colsemantics

Uso

Uma coluna isolada

from colsemantics import inferir_semantica

inferir_semantica("nome_departamento")
# semântica = "Estrutura Organizacional" (domínio vence: "nome" é só a forma)

inferir_semantica("uf")
# semântica = "Localização Geográfica"

Com o conteúdo da coluna (resolve nomes opacos)

from colsemantics import PerfilConteudo, inferir_semantica

perfil = PerfilConteudo(
    tipo_dados="Texto",
    valores_distintos=["SP", "RJ", "MG", "BA"],
    n_unicos=4,
    ratio_unicidade=4 / 40,
)
inferir_semantica("f27", perfil=perfil)["semantica"]
# "Localização Geográfica" — nenhuma análise do nome chegaria lá

PerfilConteudo é um dataclass simples — todos os campos são opcionais além dos primeiros, então passe só o que você já sabe sobre a coluna:

campo o que é
tipo_dados "Texto", "Número Inteiro", "Número Decimal", "Booleano"...
valores_distintos amostra de valores únicos (usada pelo gazetteer)
n_unicos, ratio_unicidade cardinalidade
str_len_media, comprimento_fixo forma do texto
assimetria, minimo, casas_decimais_fixas forma do número
monotonica_crescente sinal de chave sequencial

Uma tabela inteira (desambiguação por contexto)

from colsemantics import inferir_semanticas_da_tabela

resultados = inferir_semanticas_da_tabela([
    {"nome": "matricula", "padrao": "Nenhum", "perfil": None},
    {"nome": "nome_func", "padrao": "Nenhum", "perfil": None},
    {"nome": "cod_dep",   "padrao": "Nenhum", "perfil": None},
    {"nome": "diretoria", "padrao": "Nenhum", "perfil": None},
])
# "cod_dep" sozinho é ambíguo (departamento? dependente? depósito?).
# Com "diretoria" na mesma tabela, o contexto resolve para "Estrutura Organizacional".

padrao é o que seu próprio detector de padrão estruturado encontrou no conteúdo ("CPF", "CNPJ", "UUID", "E-mail", "Telefone", "CEP" ou "Nenhum") — colsemantics não faz essa detecção, só consome o resultado.

O que a saída traz

{
    "semantica": str,       # papel estrutural, ou domínio quando o papel é só formal
    "papel": str | None,
    "dominio": str | None,
    "confianca_score": float,   # 0-1, noisy-OR das evidências
    "origem": str,               # por que — as evidências que decidiram
    "conclusiva": bool,          # False = havia ambiguidade, olhe "hipoteses"
    "hipoteses": list[dict],     # até 4 alternativas ranqueadas, com evidência cada
}

Licença

MIT. Extraído do módulo de inferência semântica do Recon, ferramenta de profiling de dados desconhecidos.

Metadata

Release files for colsemantics 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for colsemantics 0.1.0
File Size Uploaded
colsemantics-0.1.0.tar.gz 29.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for colsemantics 0.1.0
File Interpreter ABI Platform
colsemantics-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 54.6 kB

Release files / colsemantics-0.1.0.tar.gz

Download URL colsemantics-0.1.0.tar.gz
Size 29.2 kB
Tags Source
SHA-256 checksum
How to use checksums
75d18743fe464db8ba98f7ebd2de25824abd146da05539a332496ce187602f44
BLAKE2b-256 checksum
How to use checksums
3cab536cad0e011897ffc316270d0b0a25a9c7a25e753f488e33524faa4afc73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / colsemantics-0.1.0-py3-none-any.whl

Download URL colsemantics-0.1.0-py3-none-any.whl
Size 25.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
489712268938a32ac20e292da5556f36eaaa9ec5d2b2e20dbe0dd2aa73d44058
BLAKE2b-256 checksum
How to use checksums
f344cdf144c54218d698c6549e0f493c4f76e9911ce4d94a5a836df6c1998847
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page