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:
- Padrão de conteúdo validado (CPF, CNPJ, e-mail...) — a pista mais forte que existe.
- Token forte — match exato contra um dicionário curado, com abreviações expandidas (
vl→valor). - Fuzzy (Jaro-Winkler) — nome parecido com uma palavra-chave de domínio, tolera erro de digitação.
- Gazetteer de conteúdo — os valores da coluna batem com um conjunto fechado conhecido (UFs, meses, sexo/gênero...), independente do nome.
- Assinatura estrutural — a forma dos dados (inteiro crescente e único, decimal de 2 casas assimétrico à direita...) sugere o papel.
- 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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file colsemantics-0.1.0.tar.gz.
File metadata
- Download URL: colsemantics-0.1.0.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75d18743fe464db8ba98f7ebd2de25824abd146da05539a332496ce187602f44
|
|
| MD5 |
1b271aa9eda00baf7f7e9122c2910f65
|
|
| BLAKE2b-256 |
3cab536cad0e011897ffc316270d0b0a25a9c7a25e753f488e33524faa4afc73
|
Provenance
The following attestation bundles were made for colsemantics-0.1.0.tar.gz:
Publisher:
publish.yml on Caio-Analytics/colsemantics
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
colsemantics-0.1.0.tar.gz -
Subject digest:
75d18743fe464db8ba98f7ebd2de25824abd146da05539a332496ce187602f44 - Sigstore transparency entry: 2642496839
- Sigstore integration time:
-
Permalink:
Caio-Analytics/colsemantics@2175eeffb52175f7fdddfd53ae5f6a9e76e8692e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Caio-Analytics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2175eeffb52175f7fdddfd53ae5f6a9e76e8692e -
Trigger Event:
release
-
Statement type:
File details
Details for the file colsemantics-0.1.0-py3-none-any.whl.
File metadata
- Download URL: colsemantics-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
489712268938a32ac20e292da5556f36eaaa9ec5d2b2e20dbe0dd2aa73d44058
|
|
| MD5 |
f267efafdf9ebdc0aa0b5216b36e5fa5
|
|
| BLAKE2b-256 |
f344cdf144c54218d698c6549e0f493c4f76e9911ce4d94a5a836df6c1998847
|
Provenance
The following attestation bundles were made for colsemantics-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Caio-Analytics/colsemantics
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
colsemantics-0.1.0-py3-none-any.whl -
Subject digest:
489712268938a32ac20e292da5556f36eaaa9ec5d2b2e20dbe0dd2aa73d44058 - Sigstore transparency entry: 2642496897
- Sigstore integration time:
-
Permalink:
Caio-Analytics/colsemantics@2175eeffb52175f7fdddfd53ae5f6a9e76e8692e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Caio-Analytics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2175eeffb52175f7fdddfd53ae5f6a9e76e8692e -
Trigger Event:
release
-
Statement type: