linguagem-simples-br 1.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- linguagem_simples_br-1.6.1/LICENSE +21 -0
- linguagem_simples_br-1.6.1/PKG-INFO +427 -0
- linguagem_simples_br-1.6.1/README.md +412 -0
- linguagem_simples_br-1.6.1/linguagem_simples/__init__.py +7 -0
- linguagem_simples_br-1.6.1/linguagem_simples/__main__.py +82 -0
- linguagem_simples_br-1.6.1/linguagem_simples/detectores.py +632 -0
- linguagem_simples_br-1.6.1/linguagem_simples/incisos.py +80 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/cores.txt +18 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/documentos.txt +24 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/estrangeirismos.txt +61 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/jargoes.txt +51 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/links-vagos.txt +65 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/nominalizacoes.txt +15 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/palavras-complexas.txt +111 -0
- linguagem_simples_br-1.6.1/linguagem_simples/lexicos/redundancias.txt +39 -0
- linguagem_simples_br-1.6.1/linguagem_simples/limiares.py +55 -0
- linguagem_simples_br-1.6.1/linguagem_simples/pagina.py +229 -0
- linguagem_simples_br-1.6.1/linguagem_simples/relatorio.py +170 -0
- linguagem_simples_br-1.6.1/linguagem_simples/texto.py +139 -0
- linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/PKG-INFO +427 -0
- linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/SOURCES.txt +31 -0
- linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/dependency_links.txt +1 -0
- linguagem_simples_br-1.6.1/linguagem_simples_br.egg-info/top_level.txt +1 -0
- linguagem_simples_br-1.6.1/pyproject.toml +33 -0
- linguagem_simples_br-1.6.1/setup.cfg +4 -0
- linguagem_simples_br-1.6.1/tests/test_detectores.py +881 -0
- linguagem_simples_br-1.6.1/tests/test_pacote.py +44 -0
- linguagem_simples_br-1.6.1/tests/test_pagina.py +204 -0
- linguagem_simples_br-1.6.1/tests/test_readme.py +33 -0
- linguagem_simples_br-1.6.1/tests/test_relatorio.py +215 -0
- linguagem_simples_br-1.6.1/tests/test_texto.py +52 -0
- linguagem_simples_br-1.6.1/tests/test_vitrine.py +245 -0
- linguagem_simples_br-1.6.1/tests/test_vitrine_html.py +49 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 peterwkdev-creator
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: linguagem-simples-br
|
|
3
|
+
Version: 1.6.1
|
|
4
|
+
Summary: Verificador aberto da Lei 15.263/2025 (Política Nacional de Linguagem Simples): confere um texto contra as técnicas do art. 5º. Não é parecer jurídico.
|
|
5
|
+
Author: Peter
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/peterwkdev-creator/linguagem-simples-br
|
|
8
|
+
Project-URL: Issues, https://github.com/peterwkdev-creator/linguagem-simples-br/issues
|
|
9
|
+
Keywords: linguagem-simples,lei-15263,acessibilidade,plain-language,portugues,setor-publico
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Requires-Python: >=3.11
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Dynamic: license-file
|
|
15
|
+
|
|
16
|
+
# linguagem-simples-br
|
|
17
|
+
|
|
18
|
+
[](https://github.com/peterwkdev-creator/linguagem-simples-br/actions/workflows/testes.yml)
|
|
19
|
+
[](https://github.com/peterwkdev-creator/linguagem-simples-br/releases/latest)
|
|
20
|
+
[](LICENSE)
|
|
21
|
+
|
|
22
|
+
Verificador aberto da **Lei 15.263/2025**, a Política Nacional de Linguagem
|
|
23
|
+
Simples. Confere um texto contra as 18 técnicas do art. 5º e diz, técnica por
|
|
24
|
+
técnica, o que achou, onde achou e o que não confere. Feito para servidor
|
|
25
|
+
público, órgão e quem escreve para o cidadão.
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
**[Experimente no navegador](https://peterwkdev-creator.github.io/linguagem-simples-br/)**:
|
|
30
|
+
cole o texto, ou o HTML de uma página, e clique. A página roda esta mesma biblioteca no seu
|
|
31
|
+
navegador (Pyodide); o texto não sai do seu computador. Na primeira visita
|
|
32
|
+
ela baixa cerca de 6 MB e fica pronta em 1,7 s (medido em 10/10/2026, numa
|
|
33
|
+
conexão rápida). Depois disso, conferir o texto do exemplo leva uns 5 ms.
|
|
34
|
+
|
|
35
|
+
**Precisão medida** em páginas de serviço do gov.br, por inciso: XII 100%,
|
|
36
|
+
XV 98%, XVII 98%, VI 96%, II 95%, XIV 88%, VIII 78%; o XIII acerta 31% e por isso
|
|
37
|
+
só aponta trechos para quem lê decidir. Intervalos em
|
|
38
|
+
[Precisão medida](#precisão-medida).
|
|
39
|
+
|
|
40
|
+
> O resultado aponta trechos para revisão. **Não é parecer jurídico** e não
|
|
41
|
+
> certifica que um texto cumpre a lei.
|
|
42
|
+
|
|
43
|
+
## Instalar
|
|
44
|
+
|
|
45
|
+
Python 3.11 ou mais novo; só a biblioteca padrão, sem outra dependência.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pip install linguagem-simples-br
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Ou direto da tag no GitHub:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install "git+https://github.com/peterwkdev-creator/linguagem-simples-br@v1.6.1"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Também roda sem instalar, de dentro da pasta do repositório.
|
|
58
|
+
|
|
59
|
+
## Uso
|
|
60
|
+
|
|
61
|
+
Na linha de comando:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python -m linguagem_simples texto.txt
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Em Python:
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
from linguagem_simples.relatorio import conferir
|
|
71
|
+
|
|
72
|
+
texto = "Procure o INSS para pedir o benefício."
|
|
73
|
+
for resultado in conferir(texto):
|
|
74
|
+
for o in resultado.ocorrencias:
|
|
75
|
+
print(resultado.inciso.numero, o.trecho, o.mensagem)
|
|
76
|
+
# VIII INSS INSS: primeira ocorrência sem o nome completo antes
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
O arquivo é texto, Markdown ou HTML; `-` lê da entrada padrão. O relatório
|
|
80
|
+
lista os 18 incisos, na ordem da lei, cada um com a classe e o que
|
|
81
|
+
aconteceu. Mais exemplos [abaixo](#mais-exemplos).
|
|
82
|
+
|
|
83
|
+
## Por quê
|
|
84
|
+
|
|
85
|
+
A Lei 15.263/2025 vale desde 17/11/2025 para a administração direta e
|
|
86
|
+
indireta de todos os Poderes e entes (art. 1º), inclusive os municípios. O
|
|
87
|
+
art. 5º lista 18 técnicas de escrita. Algumas se contam no texto (frase
|
|
88
|
+
longa, sigla sem o nome antes, voz passiva, link "clique aqui"); outras só
|
|
89
|
+
uma pessoa confere (o mais importante primeiro, o teste com o público).
|
|
90
|
+
|
|
91
|
+
Este verificador aponta o trecho de cada uma que se conta, diz quais não
|
|
92
|
+
confere e por quê, e publica quanto acerta, medido em páginas reais de
|
|
93
|
+
órgão. Cada limiar e cada palavra dos léxicos vem de um guia oficial, com
|
|
94
|
+
a página.
|
|
95
|
+
|
|
96
|
+
## O que cobre
|
|
97
|
+
|
|
98
|
+
| Inciso | Texto da lei | O que o detector aponta | Padrão |
|
|
99
|
+
|---|---|---|---|
|
|
100
|
+
| II | redigir frases curtas | frase longa | mais de 20 palavras |
|
|
101
|
+
| III | desenvolver uma ideia por parágrafo | parágrafo longo, sinal de mais de uma ideia | mais de 8 frases |
|
|
102
|
+
| IV | usar palavras comuns, de fácil compreensão | palavra que um guia oficial manda trocar por outra mais conhecida ("o pedido foi deferido", "dez dias ininterruptos") e a forma que o guia sugere | léxico em `linguagem_simples/lexicos/palavras-complexas.txt`: 86 linhas do TJRS, da CAPES, da Anvisa e da SES-DF, com as formas do verbo |
|
|
103
|
+
| V | usar sinônimos de termos técnicos e de jargões ou explicá-los no próprio texto | termo técnico ou jargão que um guia manda trocar ou explicar ("exordial acusatória", "transitou em julgado"), quando o texto não o explica logo depois (entre parênteses, com "ou seja" ou "isto é") | léxico em `linguagem_simples/lexicos/jargoes.txt`: 32 entradas do TJRS, da SES-DF e da Anvisa |
|
|
104
|
+
| VI | evitar palavras estrangeiras que não sejam de uso corrente | palavra estrangeira que um guia oficial manda trocar ("faça o login", "um checklist") e a forma que o guia sugere | léxico em `linguagem_simples/lexicos/estrangeirismos.txt`: 36 entradas da CAPES, da Anvisa, do TJGO, do TJRS e do Manual de Comunicação do Senado |
|
|
105
|
+
| VIII | redigir o nome completo antes das siglas | primeira vez que a sigla aparece sem o nome antes | léxico de cores em `linguagem_simples/lexicos/`, com a fonte de cada palavra |
|
|
106
|
+
| IX | organizar o texto de forma esquemática, quando couber, com o uso de listas, tabelas e recursos gráficos | frase de parágrafo que anuncia uma série depois dos dois-pontos, com os itens separados por vírgula ou ponto e vírgula ("leve ao atendimento os documentos: RG, CPF e comprovante") | 3 itens ou mais |
|
|
107
|
+
| XII | redigir frases preferencialmente na voz ativa | verbo "ser" com particípio ("foi entregue pela empresa"), com ou sem quem faz a ação | — |
|
|
108
|
+
| XIII | evitar frases intercaladas | trecho entre vírgulas no meio da frase que começa por pronome relativo (", que deve ser apresentado pelo requerente,") | — |
|
|
109
|
+
| XIV | evitar o uso de substantivos no lugar de verbos | verbo de apoio com substantivo ("faça a identificação") e substantivo do léxico com complemento ("prevenção da Covid-19") | léxico em `linguagem_simples/lexicos/`, com a fonte de cada palavra |
|
|
110
|
+
| XV | evitar redundâncias e palavras desnecessárias | expressão do léxico com palavras sobrando ("compareça pessoalmente", "a fim de", "de acordo com") e a forma que o guia sugere | léxico em `linguagem_simples/lexicos/redundancias.txt`: 29 entradas do TRE-AL, do CJF e da CAPES, com a página |
|
|
111
|
+
| XVII | usar linguagem acessível à pessoa com deficiência (Lei 13.146/2015) | no HTML, link de texto vago ("clique aqui", "saiba mais"), imagem sem `alt` e tabela sem célula de cabeçalho (`th`); no texto e no Markdown, só o link vago | eMAG 3.1, recomendações 3.5, 3.6 e 3.10; léxico em `linguagem_simples/lexicos/links-vagos.txt`: 46 entradas |
|
|
112
|
+
|
|
113
|
+
O IV, o V, o VI, o IX, o XIII e o XVII são **sinal**, não automáticos: o
|
|
114
|
+
IV, o V e o VI só conhecem as palavras que um guia manda trocar; a palavra
|
|
115
|
+
difícil depende de quem lê (TJRS, p. 31), a lei aceita o termo técnico
|
|
116
|
+
explicado e a palavra estrangeira de uso corrente; o IX acerta 73% das
|
|
117
|
+
vezes, e a lei diz "quando couber"; o XIII acerta 31%; o XVII confere só
|
|
118
|
+
três pontos do que a Lei 13.146/2015 pede. Os seis apontam trechos para
|
|
119
|
+
quem lê decidir. Os outros seis são automáticos.
|
|
120
|
+
|
|
121
|
+
Os outros 6 incisos aparecem no relatório com a classe de cada um:
|
|
122
|
+
**automático** (dá para contar; detector ainda não escrito), **sinal** (dá
|
|
123
|
+
para apontar, quem lê decide) ou **fora do alcance** (X e XVIII: só uma
|
|
124
|
+
pessoa confere). O inciso XI vem desligado por padrão.
|
|
125
|
+
|
|
126
|
+
A lei não fixa número. Cada limiar vem de um guia oficial, com a página, em
|
|
127
|
+
`linguagem_simples/limiares.py`, e quem usa pode trocar.
|
|
128
|
+
|
|
129
|
+
## Como é testado
|
|
130
|
+
|
|
131
|
+
Para rodar os testes:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
python -m unittest -v
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Cada detector passa por duas provas: pega o defeito plantado e não dispara
|
|
138
|
+
no texto que um guia oficial dá como bom. Onde o guia traz um par "antes e
|
|
139
|
+
depois", o "antes" tem de dar mais ocorrências que o "depois". Os trechos
|
|
140
|
+
estão em `tests/guias.py`, com a página e o hash do PDF. Os exemplos em
|
|
141
|
+
Python deste README rodam nos testes, como estão.
|
|
142
|
+
|
|
143
|
+
### Precisão medida
|
|
144
|
+
|
|
145
|
+
Dos trechos que cada detector aponta, quantos uma pessoa, lendo o trecho na
|
|
146
|
+
página, confirma. Páginas de serviço do gov.br sorteadas, padrões de
|
|
147
|
+
fábrica, critério escrito antes de anotar e duas passagens, a segunda às
|
|
148
|
+
cegas:
|
|
149
|
+
|
|
150
|
+
| Inciso | Precisão | Acertos / anotados | Intervalo de 95% (Wilson) | Amostra |
|
|
151
|
+
|---|---|---|---|---|
|
|
152
|
+
| XII | 100% | 59 / 59 | 94% a 100% | 30 páginas, 09/10/2026 |
|
|
153
|
+
| XV | 98% | 59 / 60 | 91% a 100% | 150 páginas, 10/10/2026 |
|
|
154
|
+
| XVII | 98% | 49 / 50 | 90% a 100% | 150 páginas, 10/10/2026 |
|
|
155
|
+
| IV | 98% | 40 / 41 | 87% a 100% | 490 páginas, 11/10/2026 |
|
|
156
|
+
| VI | 96% | 25 / 26 | 81% a 99% | 120 páginas novas, 10/10/2026 |
|
|
157
|
+
| II | 95% | 57 / 60 | 86% a 98% | 30 páginas, 09/10/2026 |
|
|
158
|
+
| XIV | 88% | 21 / 24 | 69% a 96% | 30 páginas, 09/10/2026 |
|
|
159
|
+
| VIII | 78% | 38 / 49 | 64% a 87% | 30 páginas, 09/10/2026 |
|
|
160
|
+
| IX | 73% | 22 / 30 | 56% a 86% | 220 páginas novas, 10/10/2026 |
|
|
161
|
+
| XIII | 31% | 13 / 42 | 19% a 46% | 150 páginas, 09/10/2026 |
|
|
162
|
+
|
|
163
|
+
III não apontou nada nas 30 páginas da primeira amostra: sem número.
|
|
164
|
+
Precisão não é cobertura: o que o detector deixa passar não entra nesta
|
|
165
|
+
conta. Do XVII, a cobertura também foi medida: em 30 páginas novas, dos
|
|
166
|
+
18 nomes de link vagos, ele aponta 5 (**28%**, de 12% a 51%), sem apontar
|
|
167
|
+
nenhum nome que diz o destino. O léxico dele é uma lista fechada (46
|
|
168
|
+
expressões na 1.2.0): "Acesse o serviço", "Protocolar" ou as abas "O que
|
|
169
|
+
é?" do modelo do gov.br passam sem marca. O IX foi medido duas vezes: a
|
|
170
|
+
1ª versão acertou 43% nas 180 páginas das outras amostras, quase sempre
|
|
171
|
+
errando no dois-pontos de rótulo ("Atenção:", "Endereço:"); a 1.3.0 não
|
|
172
|
+
conta esse dois-pontos, e o número acima é dela, em páginas que nenhuma
|
|
173
|
+
versão tinha visto. A cobertura do IX é baixa por desenho: das 59
|
|
174
|
+
enumerações dentro de parágrafo numa amostra de 150 frases com série
|
|
175
|
+
("Pix, cartão de crédito ou boleto"), ele aponta 4 (**7%**, de 3% a 16%),
|
|
176
|
+
porque 52 delas não têm dois-pontos. Sem marca do IX não quer dizer sem
|
|
177
|
+
enumeração. O VI erra pouco e deixa passar muito: o único erro foi "login
|
|
178
|
+
único", nome de serviço; mas, das 20 palavras estrangeiras que duas
|
|
179
|
+
passagens às cegas mandariam trocar em 30 páginas novas ("courier",
|
|
180
|
+
"upload", "in loco", "vide"), ele aponta 2 (**10%**, de 3% a 30%), porque
|
|
181
|
+
só conhece as que um guia lista. E quase tudo o que ele aponta é "login"
|
|
182
|
+
(96 de 103 nas 120 páginas), que a CAPES manda trocar por "acesso", mas
|
|
183
|
+
que as mesmas passagens deram como de uso corrente: quem lê decide. Cada
|
|
184
|
+
O IV é a palavra que um guia manda trocar ("protocolar",
|
|
185
|
+
"requerer", "deferimento"): o único erro foi o nome de uma opção da tela
|
|
186
|
+
entre aspas; em 5 dos 40 acertos, a forma do guia não cabe ("a licença
|
|
187
|
+
será expedida": cabe "emitida", não "enviada"), e a mensagem diz o que o
|
|
188
|
+
guia sugere, não o que serve no trecho. O V acerta onde aponta (8 de 8
|
|
189
|
+
em páginas de serviço, **amostra pequena**), mas a lista dos guias é
|
|
190
|
+
estreita: em 120 notícias do CNJ ele apontou uma vez, e dos 77 termos
|
|
191
|
+
técnicos que duas passagens às cegas listaram em 30 delas ("autos",
|
|
192
|
+
"liminar", "mérito", "precatórios"), não apontou nenhum (**0%**, de 0% a
|
|
193
|
+
5%). Sem marca do V não quer dizer sem jargão. Cada
|
|
194
|
+
amostra, o método e o que os erros mostram estão em
|
|
195
|
+
[docs/precisao.md](docs/precisao.md).
|
|
196
|
+
|
|
197
|
+
## Mais exemplos
|
|
198
|
+
|
|
199
|
+
O relatório em texto, com a linha e a coluna de cada trecho:
|
|
200
|
+
|
|
201
|
+
```text
|
|
202
|
+
II. redigir frases curtas
|
|
203
|
+
automático; limiar 20, fonte: TJGO p. 9, TRE-AL p. 13, CJF p. 6 e outros dois guias: até 20 palavras por frase (CAPES dá 25); 1 ocorrência
|
|
204
|
+
- linha 1, coluna 1: frase com 27 palavras (limiar: 20): “Certifico e dou fé que, dando cumprimento ao mandado subscrito extraí…”
|
|
205
|
+
|
|
206
|
+
VIII. redigir o nome completo antes das siglas
|
|
207
|
+
automático; 1 ocorrência
|
|
208
|
+
- linha 3, coluna 21: INSS: primeira ocorrência sem o nome completo antes: “INSS”
|
|
209
|
+
|
|
210
|
+
X. organizar o texto a fim de que as informações mais importantes apareçam primeiramente
|
|
211
|
+
fora do alcance; não conferido: só uma pessoa confere
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
HTML é reconhecido pela extensão (`.html`, `.htm`), pelo começo do arquivo
|
|
215
|
+
(`<!doctype html>` ou `<html>`) ou pela opção `--html`. Texto e Markdown em
|
|
216
|
+
UTF-8; HTML em UTF-8 ou no charset que a página declara.
|
|
217
|
+
|
|
218
|
+
| Opção | O que faz |
|
|
219
|
+
|---|---|
|
|
220
|
+
| `--json` | relatório em JSON, com início, fim, linha e coluna de cada trecho no arquivo lido |
|
|
221
|
+
| `--html` | lê como HTML um arquivo que não tem extensão `.html` |
|
|
222
|
+
| `--max-palavras N` | inciso II: palavras por frase (padrão 20) |
|
|
223
|
+
| `--max-frases N` | inciso III: frases por parágrafo (padrão 8) |
|
|
224
|
+
| `--ignorar-sigla SIGLA` | inciso VIII: sigla que o público já conhece (repetível) |
|
|
225
|
+
| `--ligar INCISO` | liga um inciso desligado por padrão, como o XI |
|
|
226
|
+
| `--desligar INCISO` | desliga um inciso |
|
|
227
|
+
| `--versao` | mostra a versão |
|
|
228
|
+
|
|
229
|
+
Código de saída: 0 sem ocorrências, 1 com ocorrências, 2 erro de uso ou de
|
|
230
|
+
leitura.
|
|
231
|
+
|
|
232
|
+
Também dá para usar como biblioteca, com a posição de cada trecho:
|
|
233
|
+
|
|
234
|
+
```python
|
|
235
|
+
from linguagem_simples.relatorio import conferir, como_dict
|
|
236
|
+
|
|
237
|
+
texto = "Procure o INSS. O atendimento é feito de segunda a sexta-feira."
|
|
238
|
+
for resultado in conferir(texto):
|
|
239
|
+
for ocorrencia in resultado.ocorrencias:
|
|
240
|
+
print(ocorrencia.inciso, ocorrencia.inicio, ocorrencia.mensagem)
|
|
241
|
+
# VIII 10 INSS: primeira ocorrência sem o nome completo antes
|
|
242
|
+
# XII 30 voz passiva sem agente: a frase não diz quem faz a ação
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Para HTML, `ler_html` tira o texto e guarda onde cada trecho e cada link,
|
|
246
|
+
imagem e tabela estão na página; o relatório recebe a página no lugar do
|
|
247
|
+
texto, confere também o XVII e dá linha e coluna no HTML:
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
from linguagem_simples.pagina import ler_html
|
|
251
|
+
from linguagem_simples.relatorio import conferir, como_texto
|
|
252
|
+
|
|
253
|
+
pagina = ler_html('<main><p>Para pedir, <a href="/pedir">clique aqui</a>.</p></main>')
|
|
254
|
+
for resultado in conferir(pagina):
|
|
255
|
+
for o in resultado.ocorrencias:
|
|
256
|
+
print(o.inciso, o.trecho, o.mensagem)
|
|
257
|
+
# XVII clique aqui link com texto que não diz o destino (eMAG 3.5)
|
|
258
|
+
print(como_texto(conferir(pagina), pagina))
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Os detectores também se chamam um a um, em `linguagem_simples/detectores.py`.
|
|
262
|
+
|
|
263
|
+
## Fontes e limites
|
|
264
|
+
|
|
265
|
+
### Guias usados
|
|
266
|
+
|
|
267
|
+
Consultados em 09/10/2026:
|
|
268
|
+
|
|
269
|
+
- TJGO, Guia de Linguagem Simples do TJGO
|
|
270
|
+
- CAPES, O uso da Linguagem Simples na CAPES (2026)
|
|
271
|
+
- Anvisa, Guia de Linguagem Simples, 1ª edição
|
|
272
|
+
- TRE-AL, Linguagem Simples – Cartilha (2024)
|
|
273
|
+
- CJF, Guia de Linguagem Simples (2024)
|
|
274
|
+
- SES-DF, Guia para simplificar documentos (2024)
|
|
275
|
+
- 10 dicas para escrever um documento em Linguagem Simples (repositório da
|
|
276
|
+
Enap)
|
|
277
|
+
|
|
278
|
+
Consultado em 10/10/2026: eMAG, Modelo de Acessibilidade em Governo
|
|
279
|
+
Eletrônico, versão 3.1 (obrigatório no governo federal pela Portaria SLTI
|
|
280
|
+
nº 3, de 07/05/2007), recomendações 3.5, 3.6 e 3.10. Também em 10/10/2026:
|
|
281
|
+
Senado Federal, Manual de Comunicação, verbete "Estrangeirismo" (pares do
|
|
282
|
+
VI e a lista de palavras de uso amplo, que o VI não aponta) e a lista
|
|
283
|
+
"Estrangeirismos grafados sem itálico ou aspas"; TJRS, Guia de Linguagem
|
|
284
|
+
Simples (2022), quadro de palavras complexas (p. 31 e 32, IV), exemplos de
|
|
285
|
+
jargões e termos técnicos (p. 34) e quadro "Expressões que devem ser
|
|
286
|
+
evitadas" (p. 107, V), quadro de expressões estrangeiras (p. 36); TRF3, Escola de
|
|
287
|
+
Magistrados, "Expressões latinas em textos jurídicos" (2021).
|
|
288
|
+
|
|
289
|
+
Texto da lei: publicação original no portal da Câmara dos Deputados, DOU de
|
|
290
|
+
17/11/2025.
|
|
291
|
+
|
|
292
|
+
Outras fontes: Dicionário Priberam da Língua Portuguesa (um verbete por
|
|
293
|
+
palavra do léxico de cores) e Lei Complementar 95/1998, art. 4º, no portal
|
|
294
|
+
do Planalto (epígrafe de ato normativo em maiúsculas).
|
|
295
|
+
|
|
296
|
+
### Limites conhecidos
|
|
297
|
+
|
|
298
|
+
- Sigla escrita como nome próprio ("Lacen", "Anvisa") não é reconhecida.
|
|
299
|
+
- Com o padrão de 20 palavras, o "depois" da CAPES e o da Anvisa ainda
|
|
300
|
+
têm uma frase acima de 20 (de 21 a 23 palavras); os dois guias aceitam até
|
|
301
|
+
25. Com `--max-palavras 25`, nada aparece.
|
|
302
|
+
- VI é uma lista fechada de 36 entradas, cada uma com a fonte: palavra
|
|
303
|
+
estrangeira fora dela passa (10% de cobertura, acima). "Upload",
|
|
304
|
+
"courier", "desktop", "packing list" e "in loco", que as passagens
|
|
305
|
+
mandariam trocar, passam porque nenhum guia oficial lido dá a forma a
|
|
306
|
+
usar no lugar. As 12 entradas do TJRS (1.5.0: "performance",
|
|
307
|
+
"expertise", "in casu", "in natura"…) ficaram fora da medida de 96%:
|
|
308
|
+
nas 520 páginas do gov.br já lidas, aparecem em 2, e acertam nas 2.
|
|
309
|
+
Não aponta as que os guias dão como de uso corrente (e-mail, site,
|
|
310
|
+
mouse, download, on-line; "vide", "status" e "data venia", para o
|
|
311
|
+
Senado e o TRF3), nem "menu", que o Senado troca por "cardápio" mas que nas
|
|
312
|
+
páginas de serviço é sempre o menu da tela. Não aponta a palavra dentro
|
|
313
|
+
de endereço ("gov.br/login"). A sugestão é a do guia e nem sempre cabe:
|
|
314
|
+
em "login e senha", cabe "usuário", não "acesso" (11 dos 25 acertos).
|
|
315
|
+
Numa página do gov.br lida inteira, aponta o título "Login Integrado"
|
|
316
|
+
do rodapé do portal.
|
|
317
|
+
- IX não aponta série de dois itens ("RG e CPF"): com dois, o "e" não
|
|
318
|
+
separa a enumeração de uma frase comum. Os pares da DICAS (p. 2) e da
|
|
319
|
+
SES-DF (p. 6), que põem dois itens em tópicos, passam sem marca. Também
|
|
320
|
+
não conta o dois-pontos com menos de 5 palavras antes ("Atenção: leve o
|
|
321
|
+
RG, o CPF e o título"), que nas páginas do gov.br é quase sempre rótulo
|
|
322
|
+
de campo, nem a série que a página já põe em lista ou tabela. A série
|
|
323
|
+
sem dois-pontos ("pague por Pix, cartão ou boleto") também passa: é a
|
|
324
|
+
maioria das enumerações dentro de parágrafo (52 de 59 na medida).
|
|
325
|
+
- XII aponta toda voz passiva com "ser", e a lei diz "preferencialmente":
|
|
326
|
+
o texto que os guias dão como bom também tem passiva sem agente ("podem
|
|
327
|
+
ser utilizadas", TRE-AL; "pode ser punido", Anvisa). A mensagem diz se a
|
|
328
|
+
frase tem ou não quem faz a ação; quem lê decide.
|
|
329
|
+
- XII não pega a passiva com "-se" ("recomenda-se"). O par da CAPES
|
|
330
|
+
("é responsabilidade da CAPES") fica de fora: não tem verbo na passiva.
|
|
331
|
+
- XIII só pega o trecho entre vírgulas com pronome relativo; entre
|
|
332
|
+
travessões, não. Não sabe onde a oração termina: aponta a oração no fim
|
|
333
|
+
da frase quando ela tem vírgula por dentro (31% de precisão, acima).
|
|
334
|
+
- XIV conhece só as palavras que os guias trazem (12, com o plural); fora
|
|
335
|
+
delas, só aponta "fazer" ou "promover" com substantivo em -ção ou -mento.
|
|
336
|
+
- XV conhece só as expressões que os guias trazem. Nas páginas do gov.br,
|
|
337
|
+
quase tudo o que ele aponta é "de acordo com" (TRE-AL p. 17: prefira
|
|
338
|
+
"segundo, conforme, como"); os pleonasmos da lista ("subir para cima")
|
|
339
|
+
não apareceram. "No Estado de Pernambuco" (CJF) fica de fora: pede a
|
|
340
|
+
lista dos estados.
|
|
341
|
+
Não aponta a palavra depois de nome de documento com "de" ("Guia de
|
|
342
|
+
Recolhimento"): o nome do documento não se troca por verbo.
|
|
343
|
+
- XVI sem detector, e com a classe **sinal**: nenhum guia
|
|
344
|
+
oficial dá lista de palavras imprecisas. O Manual de Redação da
|
|
345
|
+
Presidência (2018, p. 17) e o TJMG (p. 6) só dão a regra; a CAPES
|
|
346
|
+
(p. 11), um exemplo ("por descumprimento da norma"); o TJRS (p. 58),
|
|
347
|
+
comandos de despacho ("cumpra-se", "intime-se"). E o mesmo Manual usa
|
|
348
|
+
"oportunamente" num exemplo certo (p. 62), que o TJGO (p. 15) reescreve.
|
|
349
|
+
Se a palavra é imprecisa depende do contexto: quem lê decide.
|
|
350
|
+
- XVII lê só a marcação: não vê a imagem, não segue o link e não aplica o
|
|
351
|
+
CSS. Confere três recomendações do eMAG; as outras exigências da Lei
|
|
352
|
+
13.146/2015 que o inciso cita ficam com quem lê. No texto e no Markdown,
|
|
353
|
+
só aponta o link vago ("[clique aqui](url)").
|
|
354
|
+
- XVII conta como nome do link o texto, o `alt` da imagem dentro dele, o
|
|
355
|
+
`aria-label` e o `aria-labelledby`; o `title` não conta (eMAG 3.5). Link
|
|
356
|
+
sem nome nenhum fica de fora. Imagem com `alt=""`, `aria-hidden="true"`
|
|
357
|
+
ou `role="presentation"` é enfeite e fica de fora; tabela com
|
|
358
|
+
`role="presentation"` também. Tabela de leiaute sem esse `role` é
|
|
359
|
+
apontada: quem lê decide.
|
|
360
|
+
- XVII nas páginas do gov.br: o "Saiba mais" do quadro "Login Integrado"
|
|
361
|
+
do portal fica dentro do `<main>` e aparece em quase toda página. Já as
|
|
362
|
+
abas do modelo de página de serviço ("O que é?", "Quem pode utilizar
|
|
363
|
+
este serviço?", "Etapas para a realização deste serviço", "Outras
|
|
364
|
+
Informações") também são vagas pelo eMAG 3.5, mas o XVII não as aponta:
|
|
365
|
+
vêm do portal, não do texto do órgão. Sem marca nelas não quer dizer
|
|
366
|
+
que estão certas.
|
|
367
|
+
- HTML: se a página tem `<main>`, só o que está dentro dele conta; sem
|
|
368
|
+
`<main>`, a página inteira, menos menu (`<nav>`), código, formulário e o
|
|
369
|
+
que tem o atributo `hidden`. O CSS não é aplicado: texto escondido por
|
|
370
|
+
CSS entra. Elementos lado a lado sem espaço no HTML colam as palavras
|
|
371
|
+
("22:24Modificado").
|
|
372
|
+
- VIII deixa de fora a palavra em caixa alta que aparece em minúscula no
|
|
373
|
+
mesmo texto (de cinco letras em diante), o nome de cor ("VERMELHO -
|
|
374
|
+
Emergência"), endereço ("GOV.BR") e o "DE" e o mês da data na epígrafe
|
|
375
|
+
de ato normativo ("RDC Nº 513, DE 27 DE MAIO DE 2021", que a LC 95/1998,
|
|
376
|
+
art. 4º, manda grafar em maiúsculas). Fora disso, palavra comum em caixa
|
|
377
|
+
alta ainda é apontada ("SENHA", "BUSCAR").
|
|
378
|
+
- VIII reconhece o nome antes da sigla ligado a ela ("Nome (SIGLA)",
|
|
379
|
+
"Nome - SIGLA" ou o nome próprio colado, "Nome SIGLA", com uma ou mais
|
|
380
|
+
letras de cada palavra e até duas palavras puladas) ou, em qualquer
|
|
381
|
+
ponto antes, como nome próprio cujas iniciais são a sigla: o nome
|
|
382
|
+
inteiro ou, se a sigla tem três letras ou mais, o fim dele depois de um
|
|
383
|
+
conectivo ("Secretaria Especial da Receita Federal do Brasil" serve a
|
|
384
|
+
RFB). Com duas letras, o fim do nome coincide demais ("Cadastro de
|
|
385
|
+
Pessoa Física" e a PF de Polícia Federal). Fora disso aponta:
|
|
386
|
+
"Coordenação-Geral de Autorização para Transferência Fusão, Cisão,
|
|
387
|
+
Incorporação e Retirada - CGTR" pula quatro palavras do nome. Abreviatura de mês ("31 DEZ")
|
|
388
|
+
também é apontada, e a sigla cujas letras não saem das iniciais do nome
|
|
389
|
+
que vem antes: a sigla em inglês ("Serviços de Tráfego Aéreo (ATS)") e a
|
|
390
|
+
que pega sílabas ("Cadastro de Imóveis Rurais (CAFIR)").
|
|
391
|
+
|
|
392
|
+
## O que há em cada pasta
|
|
393
|
+
|
|
394
|
+
- `linguagem_simples/`: a biblioteca. `incisos.py` tem os 18 incisos, com
|
|
395
|
+
o texto da lei e a classe de cada um; `texto.py` divide o texto em
|
|
396
|
+
blocos e frases; `pagina.py` lê o HTML; `detectores.py`, um detector por
|
|
397
|
+
inciso; `limiares.py`, os limiares com a fonte; `relatorio.py`, o
|
|
398
|
+
relatório em texto e JSON; `__main__.py`, a linha de comando.
|
|
399
|
+
- `linguagem_simples/lexicos/`: os léxicos, uma entrada por linha, com a
|
|
400
|
+
fonte.
|
|
401
|
+
- `tests/`: os testes; `tests/guias.py` traz os trechos dos guias, com a
|
|
402
|
+
página e o hash, e `tests/test_readme.py` roda os exemplos deste README.
|
|
403
|
+
- `vitrine/`: a página do "Experimente no navegador". O GitHub Actions a
|
|
404
|
+
monta e publica a cada push que muda a biblioteca, a página ou os testes
|
|
405
|
+
(`.github/workflows/pages.yml`).
|
|
406
|
+
- `docs/`: o GIF do começo deste README e o
|
|
407
|
+
[histórico da precisão](docs/precisao.md).
|
|
408
|
+
- [`CHANGELOG.md`](CHANGELOG.md): o que mudou em cada versão.
|
|
409
|
+
|
|
410
|
+
## Compatibilidade
|
|
411
|
+
|
|
412
|
+
Versão semântica: o formato do relatório (texto e JSON) e as opções da
|
|
413
|
+
linha de comando só mudam numa versão 2; detector novo sai numa 1.x. O que
|
|
414
|
+
mudou em cada versão está no [CHANGELOG.md](CHANGELOG.md).
|
|
415
|
+
|
|
416
|
+
## Contribuir
|
|
417
|
+
|
|
418
|
+
Resultado diferente do esperado ou caso que falta?
|
|
419
|
+
[Abra uma issue](https://github.com/peterwkdev-creator/linguagem-simples-br/issues/new/choose)
|
|
420
|
+
pelo modelo "Resultado diferente do esperado", com texto inventado ou de
|
|
421
|
+
página pública, sem dado de pessoa. Para mandar código, veja o
|
|
422
|
+
[CONTRIBUTING.md](CONTRIBUTING.md); a conversa segue o
|
|
423
|
+
[código de conduta](CODE_OF_CONDUCT.md).
|
|
424
|
+
|
|
425
|
+
## Licença
|
|
426
|
+
|
|
427
|
+
[MIT](LICENSE).
|