Sobre o que falam os documentos oficiais? Quais as palavras mais frequentes? Este é um notebook para exploração inicial do texto dos documentos municipais. Atualmente só mostra as palavras mais frequentes, mas há outras análises interessantes.
O exemplo é com as Leis Municipais, porém qualquer documento oficial pode ser carregado para realizar a mesma análise.
import pandas as pd
import matplotlib.pyplot as plt
city_laws = pd.read_json('leis.json')
city_laws.drop(['documento'], inplace=True, axis=1)
city_laws.describe()
titulo | categoria | resumo | texto | |
---|---|---|---|---|
count | 6033 | 6033 | 6033 | 6033 |
unique | 6033 | 8 | 4961 | 6029 |
top | LEI Nº 705, de 09 de junho de 1971 | Leis Ordinárias | DISPÕE SOBRE A CONCESSÃO DO TÍTULO DE CIDADÃO ... | Conteúdo obsoleto:\nEste Ato não tem mais efe... |
freq | 1 | 3367 | 153 | 3 |
city_laws
titulo | categoria | resumo | texto | |
---|---|---|---|---|
0 | DECRETO Nº 8854, de 28 de fevereiro de 2013. | Decretos | DELEGA COMPETÊNCIA À SECRETARIA MUNICIPAL DE P... | O PREFEITO MUNICIPAL DE FEIRA DE SANTANA, Esta... |
1 | DECRETO Nº 8849, de 25 de fevereiro de 2013. | Decretos | ABRE CRÉDITO SUPLEMENTAR AO ORÇAMENTO DO MUNIC... | O PREFEITO MUNICIPAL DE FEIRA DE SANTANA, Esta... |
2 | DECRETO Nº 8853, de 27 de fevereiro de 2013. | Decretos | NOMEIA MEMBROS DO CONSELHO MUNICIPAL DE DESENV... | O PREFEITO MUNICIPAL DE FEIRA DE SANTANA, Esta... |
3 | DECRETO Nº 8967, de 17 de julho de 2013 | Decretos | ALTERA O QUADRO DE DETALHAMENTO DE DESPESA DO ... | O PREFEITO MUNICIPAL DE FEIRA DE SANTANA, Esta... |
4 | DECRETO Nº 8982, de 30 de julho de 2013 | Decretos | AUTORIZA O FUNCIONAMENTO DE ESTABELECIMENTOS C... | O PREFEITO MUNICIPAL DE FEIRA DE SANTANA, Esta... |
... | ... | ... | ... | ... |
6028 | RESOLUÇÃO Nº 125/1980 | Resoluções | DISPÕE SOBRE A CONCESSÃO DE TÍTULO DE CIDADÃO ... | Faço saber que a Câmara Municipal aprovou e eu... |
6029 | RESOLUÇÃO Nº 403/2003 | Resoluções | AUTORIZA A MESA DIRETIVA DO PODER LEGISLATIVO ... | A CÂMARA MUNICIPAL DE FEIRA DE SANTANA, Estado... |
6030 | RESOLUÇÃO Nº 492/2014 | Resoluções | INSTITUI A SEGUNDA SEMANA DO MÊS DE AGOSTO EM ... | A CÂMARA MUNICIPAL DE FEIRA DE SANTANA, Estado... |
6031 | RESOLUÇÃO Nº 382/2001 | Resoluções | CRIA A MEDALHA VEREADOR DIVAL FIGUEIREDO MACHA... | A CÂMARA MUNICIPAL DE FEIRA DE SANTANA, Estado... |
6032 | RESOLUÇÃO Nº 431/2004 | Resoluções | MODIFICA E SUPRIME DISPOSITIVOS DA RESOLUÇÃO N... | A CÂMARA MUNICIPAL DE FEIRA DE SANTANA, Estado... |
6033 rows × 4 columns
print(city_laws.iloc[len(city_laws)-1, 3])
A CÂMARA MUNICIPAL DE FEIRA DE SANTANA, Estado da Bahia, na conformidade do artigo 70, Inciso V, da Lei Municipal nº37, de 05 de Abril de 1990 e, artigos 287, § 2º e, 420, do Regimento Interno, promulga a seguinte Resolução: Art. 1ºDê-se aos dispositivos abaixo mencionados, da Resolução nº393/2002 - Regimento Interno, as seguintes redações: "Art. 7º A Mesa Diretora da Câmara compor-se-á do Presidente, Primeiro e Segundo Secretários, com mandato de 02 ( dois ) anos, admitida a recondução para a eleição subsequente. § 4º Se, hora regimental, não estiver presente o Presidente, abrirá os trabalhos o Vice-Presidente ou, na falta deste, o Primeiro ou Segundo Secretários, na sequência, ou ainda, caso estes não estejam presentes, o Vereador mais votado nas eleições municipais." "Art. 33 Compete, privativamente, ao Vice-Presidente:" "Art. 36 ... I - ... e) acompanhar e supervisionar a Ata da Sessão, proceder a sua leitura e assiná-la depois do Presidente e do Vice-Presidente. II - ... c) assinar, depois do Presidente e do Vice-Presidente, os atos da Mesa Diretora. Parágrafo Único - O Primeiro Secretário será substituído em suas faltas, ausências, impedimentos ou licenças, havendo nas duas últimas hipóteses investidura na plenitude da respectiva função, pelo Segundo Secretário." "Art. 48 As Comissões Permanentes, em número de 05 ( cinco ), são as seguinte: I - ... II - ... III - ... IV - ... V - Comissão de Meio Ambiente, Direitos Humanos e Defesa do Consumidor." "Art. 57 ... I - ... II - ... III - ... IV - ... V - da Comissão de Meio Ambiente, Direitos Humanos e Defesa do Consumidor." "a) ... 1 - ... 2 - ... 3 - ... b) ... c) ... d) ... e) opinar sobre todas as proposições que digam respeito aos direitos humanos, especialmente àquelas que envolvam matérias referentes à criança, adolescente e idoso; f) propor iniciativas relacionadas a direitos humanos; g) receber reclamações e encaminhá-las aos órgãos competentes; h) propor ações de combate ao rascismo e discriminação de qualquer natureza, bem como manter intercâmbio com órgãos públicos, entidades civis e filantrópicas sem fins lucrativos, para atender o disposto na alínea anterior; i) divulga a legislação que trata dos direitos da mulher trabalhadora urbana e rural; j) propor ações de combate à violência e prostituição infanto-juvenil; k) opinar sobre proposições que versem a respeito da saúde da mulher, planejamento familiar e assistência social; l) fiscalizar, em conjunto com a Delegacia Regional do Trabalho, a instalação de creches nas empresas e demais locais de trabalhos, exigidos por lei; m) opinar sobre proposições relativas a produtos, serviços e, quando cabível, contratos que norteiam as relações de consumo; n) desenvolver ampla divulgação da legislação e dos programas de defesa do consumidor; o) propor a criação de políticas e instrumentos de defesa do consumidor, em conjunto com os demais órgãos públicos e particulares; p) fiscalizar os produtos de consumo e seu fornecimento, e zelar pela sua qualidade; q) receber reclamações e encaminhá-las ao órgão competente." "Art. 164 O Líder e Vice-Líder podem fazer parte de Comissões Permanentes e Temporárias, exceto o Líder e Vice-Líder do Governo." "Art. 168 Lavrar-se-á a ata, com o resumo dos trabalhos de cada sessão, cujo redação obedecerá ao padrão uniforme adotado pela Mesa Diretora." "Art. 188 As atas serão organizadas em anais, por ordem cronológica, por período legislativo e recolhidas ao Arquivo da Câmara." "Art. 190 Os Vereadores só poderão falar sobre a ata para impugná-la ou retificá-la no todo em parte, logo após a leitura da mesma. § 1º A discussão sobre a impugnação ou retificação da ata não poderá exceder o tempo destinado ao Grande Expediente, que nesta hipótese ficará prejudicado." "Art. 199 Aberto a sessão, o Segundo Secretário fará a leitura da ata anterior, que o Presidente submeterá à apreciação do Plenário." "Art. 200 Após a leitura da ata, o Primeiro Secretário procederá a leitura de:" "Art. 413 - ... Parágrafo Único - Caso o Presidente da Câmara não promulgue a lei, caberá ao Vice-Presidente promulgá-la." "Art. 418 - ... § 2º Se lei não for promulgada dentro de 48 ( quarenta e oito ) horas o Presidente da Câmara Municipal a promulgará, e se este em igual prazo, não o fizer, fá-lo-á obrigatoriamente, o Vice-Presidente." Art. 2ºDê-se ao capítulo III, do Título VII - Da Elaboração Legislativo Especial, a seguinte redação: "CapítuloIII DA CONCESSÃO DE HONRARIAS SEÇÃO I DAS HONRARIAS" "Art. 402 - A Câmara Municipal concederá o Título Honorífico de Cidadão Feirense a pessoas, pelos seus relevantes e notórios serviços prestados ao Município e ao seu povo." "Art. 403 - A Câmara Municipal também concederá: a) Comenda - Maria Quitéria, Áureo Filho, Filinto Justiniano Ferreira Bastos, Padre Ovídio Alves de São Boaventura, Godofredo Rebello de Figueiredo Filho, Maestro Tertuliano Ferreira Santos, Armando Curvelo de Menezes e, Dr. Gastão Guimarães; b) Medalhas - Mérito de Meio Ambiente, Fundação Senhor dos Passos, Vereador Dival Figueiredo Machado, Missionário Roderick Murdo Gillanders, Mérito Rotário, Zumbi dos Palmares e Arquiteto Anápio Aurélio de Miranda; c) Certificados - Verde e, de Excelência." "SEÇÃO DISPOSIÇÕES GERAIS" "Art. 404 - O Projeto de Decreto Legislativo destinado a concessão de honrarias, deverá ser apresentado por, no mínimo, 2/3 ( dois terços ) dos membros da Câmara e, acompanhado de justificativa, além de, biografia quando inerente a pessoa física. § 1º Recebido o Projeto de Decreto Legislativo, o mesmo após lido, será encaminhado à Comissão de Constituição Justiça e Redação que, dentro de 10 ( dez ) dias, emitirá parecer fundamentado, o qual após lido será pautado para a Ordem do Dia da sessão seguinte. § 2º Será considerado aprovado o Projeto de Decreto Legislativo que obtiver 2/3 ( dois terços ) de votos favoráveis dos membros da Câmara. § 3º Cada Vereador poderá apresentar 08 ( oito ) projetos de Decreto Legislativo por legislatura destinados a concessão do Título de Cidadão Feirense, enquanto que as demais Honrarias tem suas quantidades estabelecidas nas Resoluções que as instituíram." "Art. 405 - As honrarias poderão ser cassadas, caso os homenageados tenham comprovadamente praticado atos que colidam com os motivos que as ensejam Parágrafo Único - Aplicam-se os dispositivos desta Seção, no que couber, ao Projeto de Decreto Legislativo de cassação da honraria" Art. 3ºSuprima-se os dispositivos abaixo mencionados, e dê-se nova numeração aos demais: "a) artigos - 34,37. 87, 99, 100, 102, 124, 187, 189, 191, 192, 193, 223, 356, 417; b) parágrafos - 3º do art. 101, 4º do art. 135 e único do art. 199;" Art. 4ºEsta Resolução entrará em vigor na data de sua publicação, produzindo seus efeitos a partir de 1º de Janeiro de 2005, revogadas as disposições em contrário. MESA DIRETIVA DA CÂMARA MUNICIPAL DE FEIRA DE SANTANA, 26 de Outubro de 2004. Ver. ANTÔNIO CARLOS DALTRO COELHO Presidente Ver. GENÉSIO SERAFIM DE LIMA 1º Secretário Ver. JORGE RAIMUNDO DE OLIVEIRA SILVA 2º Secretário
A seguir, geramos uma visualização das palavras mais comuns no texto das Leis. Algo que pode ser desenvolvido em uma núvem de palavras.
A ideia é descobrir palavras chave recorrente nas Leis. Sobre o que falam nossas Leis Municiapis?
import re
import nltk
from nltk.corpus import stopwords
nltk.download('stopwords')
[nltk_data] Downloading package stopwords to /home/guiga/nltk_data... [nltk_data] Package stopwords is already up-to-date!
True
def clean_text(text):
if not isinstance(text, str):
raise ValueError(f"Esperava string, recebido {type(text)}")
# Remove pontuação, dígitos e espaços em branco
text = re.findall(r"[A-Za-zÀ-ú]+[-A-Za-zÀ-ú]*", text.lower())
# Remove stopwords
return [word for word in text if word not in stopwords.words("portuguese")]
text = ' '.join(city_laws['texto'].tolist())
text = clean_text(text)
unique_words_count = len(set(text))
print(f'Número de palavras únicas no texto: {unique_words_count}')
Número de palavras únicas no texto: 31958
Stopwords são palavras a serem removidas na etapa de pré-processamento do texto. Em geral são palavras muito comuns, utilizadas em quase todos os textos, ou não possuem valor descritivo do que diz o texto.
Em ambos os casos, não possuem informação sobre o que trata o texto, que é o que a gente quer visualizar com a frequencia das palavras do texto.
O método clean_text
já remove algumas stopwords
padrões do português, como preposições, artigos, etc:
("de", "a", "este").
Utilizamos o módulo Counter do Python para visualizar as palavras mais comuns nos textos das Leis e decidir se elas possuem valor semântico ou não. Isto é, se descrevem o conteúdo do texto ou não. As palavras que não possuirem, incluímos na lista de stopwords, palavras a serem removidas.
from collections import Counter
counter_ = Counter(text)
counter_.most_common(100)
[('art', 30126), ('municipal', 27921), ('lei', 20410), ('r', 19890), ('rua', 17445), ('feira', 13996), ('santana', 12692), ('prefeito', 11447), ('d', 10347), ('n', 9408), ('câmara', 9151), ('município', 7269), ('data', 6655), ('publicação', 6418), ('seguinte', 6106), ('disposições', 5588), ('i', 5429), ('estado', 5420), ('bahia', 5334), ('vigor', 5222), ('ii', 5007), ('fica', 5000), ('contrário', 4860), ('entrará', 4589), ('revogadas', 4547), ('ver', 4513), ('artigo', 4474), ('secretário', 4395), ('ser', 4159), ('poder', 4048), ('decreto', 3904), ('projeto', 3877), ('saber', 3846), ('iii', 3798), ('faço', 3706), ('josé', 3694), ('parágrafo', 3670), ('executivo', 3594), ('gabinete', 3578), ('legislativo', 3569), ('através', 3486), ('silva', 3475), ('secretaria', 3464), ('único', 3453), ('sanciono', 3418), ('serviços', 3302), ('desta', 3187), ('despesas', 3031), ('presidente', 2978), ('v', 2898), ('prefeitura', 2842), ('autoria', 2763), ('iv', 2731), ('pública', 2592), ('recursos', 2491), ('atividades', 2468), ('m', 2435), ('social', 2418), ('deste', 2337), ('público', 2301), ('saúde', 2244), ('mesa', 2243), ('chefe', 2241), ('autor', 2213), ('edil', 2165), ('administração', 2156), ('qualquer', 2121), ('santos', 2117), ('b', 2092), ('decretou', 1991), ('execução', 1982), ('inciso', 1980), ('prazo', 1976), ('desenvolvimento', 1934), ('sobre', 1931), ('dias', 1927), ('decorrentes', 1909), ('carvalho', 1901), ('dr', 1877), ('resolução', 1846), ('vice-presidente', 1833), ('decreta', 1828), ('geral', 1798), ('uso', 1792), ('ato', 1791), ('poderá', 1782), ('diretiva', 1778), ('costa', 1774), ('conta', 1759), ('forma', 1757), ('públicos', 1708), ('dia', 1706), ('antonio', 1699), ('conselho', 1678), ('serviço', 1671), ('oliveira', 1659), ('exercício', 1657), ('seguintes', 1649), ('valor', 1615), ('orçamentária', 1614)]
Palavras como: 'art' (artigo), 'municipal', 'lei', 'rua', 'feira', 'santana', 'prefeito', 'câmara', 'município', 'publicação', 'seguinte', 'disposições', 'estado', 'bahia', 'vigor', aparecem em quase todas as Leis, portanto elas não identificam bem o texto das Leis.
Letras do alfabeto e números romanos, como: 'i', 'ii', 'iii', 'd', 'n', 'r' também aparecem bastante no texto das Leis e não possuem valor semântico. Também vamos remove-las.
def remove_stopwords(text):
custom_stopwords = ['feira', 'santana', 'art', 'municipal', 'lei', 'r',
'prefeito', 'câmara', 'município', 'data', 'seguinte', 'disposições',
'estado', 'bahia', 'vigor', 'secretário', 'decreto', 'projeto',
'iii', 'i', 'ii', 'contrário', 'presidente', 'artigo', 'rua',
'faço', 'parágrafo', 'executivo', 'gabinete', 'único', 'sanciono',
'desta', 'v', 'iv', 'autoria', 'através', 'deste', 'vice', 'autor',
'qualquer', 'b', 'sobre', 'das', 'decorrentes', 'fica', 'dias',
'resolução', 'geral', 'uso', 'ato', 'diretiva', 'exercício',
'seguintes', 'meio', 'm', 'c', 'd', 'n', 'correrão', 'publicação']
return [word for word in text if word not in custom_stopwords]
text = remove_stopwords(text)
from nltk import FreqDist
plt.figure(figsize=(20,10))
fd = FreqDist(text)
fd.plot(30, title='Palavras x Frequência', cumulative=False)
<matplotlib.axes._subplots.AxesSubplot at 0x7f040f57b430>
O que esperava era obter palavras comuns no texto das Leis que também descrevessem o conteúdo.
Existem algumas palavras descritivas do conteúdo, por exemplo "revogadas", "secretaria", "serviços", "despesas", "social", "saúde", de certa forma descrevem o conteúdo das Leis.
Aparecem alguns nomes próprios, como "José", "Silva", "Santos", "Carvalho". Nomes frequentes na base de dados. Os nomes do prefeito em exercício, do edil, presidente da câmara e outros cargos, frequentemente aparecem no texto das Leis. O que por exemplo explica os nomes José e Carvalho, que aparecem no nome do prefeito José Ronaldo de Carvalho, ganhador de 4 pleitos no município.
No entanto apenas estas palavras não dão uma boa indicação sobre o conteúdo destas Leis. Por isso, sugerimos no começo deste notebook algumas técnicas para extração tópicos dos textos, bem como as palavras mais frequentes nestes tópicos. Possivelmente este procedimento retornará um resultado mais interpretável.