Skip to main content

Berna TJGO DIACDE Lib

Biblioteca desenvolvida pelo TJGO (Diretoria de Inteligência Artificial, Ciência de Dados e Estatística). Este pacote oferece ferramentas robustas para pré-processamento de texto e cálculo de similaridade textual, essenciais para processamento de linguagem natural (NLP) e preparação de dados para LLMs.

O núcleo das operações de texto é fornecido pela classe TextUtils, acessível através da seguinte interface:

Interface Fluente (ProcessLinked): Para aplicações diretas e encadeadas.

Para cálculo de similaridade textual, a biblioteca disponibiliza a classe Berna.

Nota: Este repositório público contém uma seleção de ferramentas usadas internamente pelo TJGO.


Instalação

pip install berna-tjgo-diacde-lib

Dependências

O projeto utiliza as seguintes bibliotecas:

  • spacy
  • nltk
  • beautifulsoup4

Recursos Necessários (Download Manual):

Para o funcionamento correto da biblioteca, são necessários os seguintes recursos que devem ser baixados manualmente:

  • NLTK:
    • stopwords (para remoção de stopwords):
      python -m nltk.downloader stopwords
      
    • punkt (para tokenização):
      python -m nltk.downloader punkt
      
  • spaCy:
    • Modelo de linguagem em português (ex: pt_core_news_sm para lematização):
      python -m spacy download pt_core_news_sm
      

É crucial garantir que estes recursos estejam instalados antes de utilizar as funcionalidades que dependem deles.


Módulo de Pré-Processamento

Interface Fluente com ProcessLinked

A classe ProcessLinked adota o padrão Builder, permitindo que você monte uma receita de pré-processamento personalizada e a execute sob demanda. Isso é ideal tanto para higienização de dados sensíveis (LGPD) quanto para a preparação de textos para LLMs.

Cenário A: Anonimização de Peças Jurídicas (Substituição de Dados)

Em vez de apenas deletar as informações, você pode usar o argumento change_to para mascarar dados sensíveis antes de enviar o texto para uma API externa ou modelo público.

from berna_tjgo_diacde_lib import ProcessLinked

# 1. Define a receita de anonimização (o pipeline é reutilizável)
anonimizador = (
    ProcessLinked()
    .filter_cpf(change_to="[CPF_ANONIMIZADO]")
    .filter_cnpj(change_to="[CNPJ_ANONIMIZADO]")
    .filter_oab(change_to="[OAB_ANONIMIZADO]")
    .filter_telefone(change_to="[TEL_ANONIMIZADO]")
    .filter_spaces() # Garante espaçamento limpo após as trocas
)

# 2. Aplica a mesma receita em diferentes textos
peticao_1 = "O autor João, inscrito no CPF 123.456.789-00 e OAB/GO 00.000, liga no (62) 99999-9999."
peticao_2 = "A empresa X (CNPJ 12.345.678/0001-99) não respondeu aos chamados."

print(anonimizador.as_str(peticao_1))
# Saída: O autor João, inscrito no [CPF_ANONIMIZADO] e [OAB_ANONIMIZADO], liga no [TEL_ANONIMIZADO].

print(anonimizador.as_str(peticao_2))
# Saída: A empresa X ([CNPJ_ANONIMIZADO]) não respondeu aos chamados.

Cenário B: Pipeline para NLP Tradicional (Tokenização e Lematização)

Se o seu objetivo é alimentar modelos de Bag-of-Words, TF-IDF ou calcular similaridade pura, você pode transformar o texto diretamente em uma lista de tokens limpos usando o gatilho final as_tokens().

from berna_tjgo_diacde_lib import ProcessLinked

documento_sujo = """
<p>O réu estava <b>correndo</b> risco de vida na comarca de Goiânia.</p>
Acesse o processo em https://tjgo.jus.br ou envie e-mail para processual@tjgo.jus.br.
"""

# Monta o pipeline de limpeza profunda
pipeline_nlp = (
    ProcessLinked()
    .remove_html()               # Remove tags <p> e <b>
    .filter_links()              # Remove a URL do TJGO
    .filter_email()              # Remove o e-mail institucional
    .filter_special_characters() # Remove pontuações restantes
    .lemmatize()                 # Reduz palavras (ex: "correndo" -> "correr")
    .remove_stopwords()          # Remove "O", "estava", "de", "para", etc.
)

# Dispara o processamento convertendo direto para lista de tokens
tokens_limpos = pipeline_nlp.as_tokens(documento_sujo)

print(tokens_limpos)
# Saída provável: ['réu', 'correr', 'risco', 'vida', 'comarca', 'goiânia', 'acesse', 'processo', 'enviar', 'email]

Métodos Disponíveis (via TextUtils)

Nota sobre Parâmetros: Métodos iniciados com filter_ permitem o uso opcional do parâmetro change_to para definir um texto de substituição (útil para anonimização).

Método Descrição
lemmatize Reduz palavras à forma base (lema) usando spaCy.
stemming Reduz palavras à raiz usando snowballstemmer.
tokenize Divide o texto em uma lista de tokens (palavras ou sentenças, dependendo da implementação interna do NLTK).
normalizacao_hibrida Aplica um processo híbrido: Lematização para substantivos/adjetivos e Stemming seletivo para verbos/advérbios, com limpeza de pontuação e filtro de tamanho.
remove_html Remove tags HTML via BeautifulSoup.
remove_stopwords Remove palavras comuns (ex: "e", "de", "o").
filter_special_characters Remove caracteres especiais; substitui pelo change_to (default="").
filter_spaces Padroniza múltiplos espaços; substitui pelo change_to (default=" ").
filter_numbers Remove caracteres numéricos; substitui pelo change_to (default="").
filter_links Remove links; substitui pelo change_to (default="").
filter_email Remove e-mails; substitui pelo change_to (default="").
filter_cnpj/cpf/rg Filtra documentos (CNPJ, CPF, RG); substitui pelo change_to (default="").
filter_cep/oab Filtra códigos (CEP, OAB); substitui pelo change_to (default="").
lower Converte os caracteres para sua forma em minúsculo.

Módulo de Cálculo de Similaridade

Este módulo oferece funcionalidades para calcular a similaridade textual entre dois documentos utilizando diferentes métricas. A classe Berna é o ponto de entrada para estas operações, utilizando internamente o método TextUtils.tokenize para preparar o texto antes da comparação.

Classe Berna

A classe Berna permite comparar duas strings e retorna o percentual de similaridade com base em métricas comuns:

  • Similaridade de Cosseno (cosseno): Mede o cosseno do ângulo entre dois vetores não nulos em um espaço multidimensional.
  • Índice de Jaccard (jaccard): Mede a similaridade entre dois conjuntos finitos, sendo definida como o tamanho da interseção dividido pelo tamanho da união dos conjuntos.

Exemplo de Uso:

from berna_tjgo_diacde_lib import Berna

doc1 = "Este é o primeiro documento para teste de similaridade."
doc2 = "Este documento é o segundo para testar a similaridade textual."

similarity_calculator = Berna(doc1, doc2)

cosine_similarity = similarity_calculator.cosseno
jaccard_similarity = similarity_calculator.jaccard

print(f"Similaridade de Cosseno: {cosine_similarity:.2f}%")
print(f"Similaridade de Jaccard: {jaccard_similarity:.2f}%")

# Saída esperada (aproximada):
# Similaridade de Cosseno: XX.XX%
# Similaridade de Jaccard: YY.YY%

Licença

Este projeto está licenciado sob a Licença Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). Você pode compartilhar, adaptar e construir sobre o material, desde que atribua crédito apropriado, não use o material para fins comerciais e distribua suas contribuições sob a mesma licença. Para mais informações, consulte o arquivo LICENSE.


Créditos e Desenvolvedores

Desenvolvido pelo Tribunal de Justiça do Estado de Goiás - Diretoria de Inteligência Artificial, Ciência de Dados e Estatística.

Time de Desenvolvimento:


*Contato oficial: estatistica@tjgo.jus.br*

Release files for berna-tjgo-diacde-lib 1.3.2

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

Source distribution (sdist)

Source distribution for berna-tjgo-diacde-lib 1.3.2
File Size Uploaded
berna_tjgo_diacde_lib-1.3.2.tar.gz 11.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for berna-tjgo-diacde-lib 1.3.2
File Interpreter ABI Platform
berna_tjgo_diacde_lib-1.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 22.7 kB

Release files / berna_tjgo_diacde_lib-1.3.2.tar.gz

Download URL berna_tjgo_diacde_lib-1.3.2.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6bdcb11d5486f8140cb5a42614f20468c2bc76512b7efd29776ff97dccc1dc53
BLAKE2b-256 checksum
How to use checksums
5b160a89ade0ff462d42d5d877eecb5a0baf4addd9ebee44a15eb23482443f1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.4

Release files / berna_tjgo_diacde_lib-1.3.2-py3-none-any.whl

Download URL berna_tjgo_diacde_lib-1.3.2-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f168ff25cee7b8d530f38996998c9ff54f0d9c46363d6fc2b9a9130c933e68bf
BLAKE2b-256 checksum
How to use checksums
1a74fcaeef395ba9f84ffee026671ae9b75b655f7b3ee03877bce7ee22223f25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.4

Release history Release notifications | RSS feed

This release

1.3.2 This release

2 release files

1.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

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