orange3-text-analysis 0.0.1__py3-none-any.whl
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.
- orange3_text_analysis-0.0.1.data/data/help/orange3-text-analysis/index.html +29 -0
- orange3_text_analysis-0.0.1.dist-info/METADATA +151 -0
- orange3_text_analysis-0.0.1.dist-info/RECORD +18 -0
- orange3_text_analysis-0.0.1.dist-info/WHEEL +5 -0
- orange3_text_analysis-0.0.1.dist-info/entry_points.txt +5 -0
- orange3_text_analysis-0.0.1.dist-info/licenses/LICENSE +674 -0
- orange3_text_analysis-0.0.1.dist-info/top_level.txt +1 -0
- text_analysis/__init__.py +0 -0
- text_analysis/limpeza.py +116 -0
- text_analysis/modelo.py +250 -0
- text_analysis/traducao.py +154 -0
- text_analysis/widgets/__init__.py +7 -0
- text_analysis/widgets/icons/limpeza.svg +1 -0
- text_analysis/widgets/icons/sentimento.svg +1 -0
- text_analysis/widgets/icons/traducao.svg +1 -0
- text_analysis/widgets/owlimpezatexto.py +282 -0
- text_analysis/widgets/owsentimentohf.py +222 -0
- text_analysis/widgets/owtraducao.py +310 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>Text Analysis — add-on do Orange</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<h1>Text Analysis — add-on do Orange</h1>
|
|
9
|
+
<p>
|
|
10
|
+
Add-on do <a href="https://orangedatamining.com">Orange Data Mining</a>
|
|
11
|
+
para limpar, traduzir e classificar textos (ex.: análise de sentimento)
|
|
12
|
+
com modelos do <a href="https://huggingface.co">Hugging Face</a>.
|
|
13
|
+
Os widgets aparecem na categoria <strong>Text Analysis</strong> da barra
|
|
14
|
+
lateral do Orange.
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<h2>Widgets</h2>
|
|
18
|
+
<ul>
|
|
19
|
+
<li><strong>Limpeza de Texto</strong> — limpa o texto e cria uma nova
|
|
20
|
+
coluna com o resultado.</li>
|
|
21
|
+
<li><strong>Tradução</strong> — traduz textos entre português, inglês e
|
|
22
|
+
outros idiomas.</li>
|
|
23
|
+
<li><strong>Modelo Hugging Face</strong> — transforma um modelo de
|
|
24
|
+
classificação de texto do Hugging Face em um modelo do Orange.</li>
|
|
25
|
+
</ul>
|
|
26
|
+
|
|
27
|
+
<p>Veja o <code>README.md</code> do projeto para detalhes de instalação e uso.</p>
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: orange3-text-analysis
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Add-on do Orange: limpeza, tradução e classificação de textos com modelos do Hugging Face
|
|
5
|
+
Home-page: http://orange.biolab.si/download
|
|
6
|
+
Author: Mayki dos Santos Oliveira, Brasil BR
|
|
7
|
+
Author-email: maykioliveira97@gmail.com
|
|
8
|
+
Keywords: orange3 add-on
|
|
9
|
+
Requires-Python: >=3.12
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: transformers
|
|
13
|
+
Requires-Dist: torch
|
|
14
|
+
Requires-Dist: sentencepiece
|
|
15
|
+
Requires-Dist: protobuf
|
|
16
|
+
Requires-Dist: ftfy
|
|
17
|
+
Requires-Dist: emoji
|
|
18
|
+
Requires-Dist: orange3>=3.40.0
|
|
19
|
+
Requires-Dist: pyqt5>=5.15.11
|
|
20
|
+
Dynamic: author
|
|
21
|
+
Dynamic: author-email
|
|
22
|
+
Dynamic: home-page
|
|
23
|
+
Dynamic: license-file
|
|
24
|
+
|
|
25
|
+
# Text Analysis — add-on do Orange
|
|
26
|
+
|
|
27
|
+
Add-on do [Orange Data Mining](https://orangedatamining.com) para limpar,
|
|
28
|
+
traduzir e classificar textos (ex.: análise de sentimento) com modelos do
|
|
29
|
+
[Hugging Face](https://huggingface.co). Os widgets aparecem na categoria
|
|
30
|
+
**Text Analysis** da barra lateral do Orange.
|
|
31
|
+
|
|
32
|
+
## Requisitos
|
|
33
|
+
|
|
34
|
+
- **Orange 3** (testado com a versão 3.40) e **Python 3.9 ou superior**
|
|
35
|
+
- **Orange3-Text** (opcional, recomendado): fornece o widget Corpus e os
|
|
36
|
+
demais widgets de texto
|
|
37
|
+
|
|
38
|
+
Bibliotecas Python (instaladas automaticamente com o add-on):
|
|
39
|
+
|
|
40
|
+
| Biblioteca | Para que é usada |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `transformers` | Carregar e executar os modelos do Hugging Face |
|
|
43
|
+
| `torch` | Motor de execução dos modelos (CPU ou GPU) |
|
|
44
|
+
| `sentencepiece` | Tokenizadores de modelos multilíngues (XLM-RoBERTa, T5, M2M100) |
|
|
45
|
+
| `protobuf` | Leitura dos arquivos de tokenizador SentencePiece |
|
|
46
|
+
| `ftfy` | Correção de codificação quebrada (ex.: `péssimo` → `péssimo`) |
|
|
47
|
+
| `emoji` | Remoção de emojis e conversão em texto em português |
|
|
48
|
+
|
|
49
|
+
## Instalação
|
|
50
|
+
|
|
51
|
+
O add-on deve ser instalado **no mesmo Python que o Orange usa**.
|
|
52
|
+
|
|
53
|
+
**Pelo terminal**, dentro da pasta do projeto (troque `python` pelo
|
|
54
|
+
executável do Python do Orange, se for outro):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
python -m pip install .
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Pelo próprio Orange**, colando no widget *Python Script* e clicando em
|
|
61
|
+
*Run* (ajuste o caminho da pasta):
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
import sys, subprocess
|
|
65
|
+
pasta = "/caminho/para/orange3-text-analysis"
|
|
66
|
+
r = subprocess.run([sys.executable, "-m", "pip", "install", pasta],
|
|
67
|
+
capture_output=True, text=True)
|
|
68
|
+
print(r.stdout[-1500:]); print(r.stderr[-1500:])
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Depois, **reinicie o Orange**.
|
|
72
|
+
|
|
73
|
+
Para desenvolvimento, instale em modo editável (as alterações no código
|
|
74
|
+
valem após reiniciar o Orange, sem reinstalar):
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
python -m pip install -e .
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
> **Atualizando a partir do `orange3-sentimento`:** desinstale o pacote
|
|
81
|
+
> antigo com `python -m pip uninstall orange3-sentimento`, senão os widgets
|
|
82
|
+
> aparecem duplicados. Modelos `.pkcls` salvos com o pacote antigo precisam
|
|
83
|
+
> ser gerados de novo.
|
|
84
|
+
|
|
85
|
+
## Widgets
|
|
86
|
+
|
|
87
|
+
### Limpeza de Texto
|
|
88
|
+
|
|
89
|
+
Limpa o texto e cria uma nova coluna com o resultado, mostrando uma prévia
|
|
90
|
+
antes/depois. Opções: corrigir codificação quebrada, remover HTML, links,
|
|
91
|
+
e-mails e menções (remover ou trocar pelos marcadores `http`, `email` e
|
|
92
|
+
`@user`), hashtags, emojis (remover ou converter em texto), números,
|
|
93
|
+
caracteres repetidos (`muuuuito` → `muuuito`), espaços excessivos,
|
|
94
|
+
minúsculas, acentos e pontuação, além de descartar textos curtos e
|
|
95
|
+
duplicados.
|
|
96
|
+
|
|
97
|
+
### Tradução
|
|
98
|
+
|
|
99
|
+
Traduz textos com `unicamp-dl/translation-pt-en-t5` (português → inglês),
|
|
100
|
+
`unicamp-dl/translation-en-pt-t5` (inglês → português) ou
|
|
101
|
+
`facebook/m2m100_418M` (100 idiomas, com listas de idioma de origem e
|
|
102
|
+
destino). Pode criar uma nova coluna ou substituir o texto original. Divide
|
|
103
|
+
textos longos em frases, roda em segundo plano com barra de progresso e usa
|
|
104
|
+
a GPU, se houver.
|
|
105
|
+
|
|
106
|
+
### Modelo Hugging Face
|
|
107
|
+
|
|
108
|
+
Transforma um modelo de classificação de texto do Hugging Face (ex.:
|
|
109
|
+
`cardiffnlp/twitter-xlm-roberta-base-sentiment`) em um modelo do Orange,
|
|
110
|
+
compatível com *Predictions*, *Save Model* e *Load Model*. Lê os rótulos do
|
|
111
|
+
próprio modelo, aceita parâmetros avançados em JSON e, ao receber o corpus
|
|
112
|
+
rotulado na entrada, usa a variável-alvo dele para que o *Predictions*
|
|
113
|
+
calcule as métricas de avaliação.
|
|
114
|
+
|
|
115
|
+
## Fluxo de exemplo
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Corpus → Limpeza de Texto ─┬─► Modelo Hugging Face ──► Predictions
|
|
119
|
+
└─────────────────────────► Predictions
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Para usar um modelo disponível só em inglês, inclua o widget **Tradução**
|
|
123
|
+
(português → inglês) depois da Limpeza de Texto.
|
|
124
|
+
|
|
125
|
+
## Estrutura do projeto
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
orange3-text-analysis/
|
|
129
|
+
├── README.md
|
|
130
|
+
├── pyproject.toml
|
|
131
|
+
├── docs/
|
|
132
|
+
├── tests/
|
|
133
|
+
└── src/
|
|
134
|
+
└── text_analises/
|
|
135
|
+
├── modelo.py # adaptador Hugging Face → modelo do Orange
|
|
136
|
+
├── limpeza.py # funções de limpeza de texto
|
|
137
|
+
├── traducao.py # funções de tradução
|
|
138
|
+
└── widgets/
|
|
139
|
+
├── owsentimentohf.py
|
|
140
|
+
├── owlimpezatexto.py
|
|
141
|
+
├── owtraducao.py
|
|
142
|
+
└── icons/
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Observações
|
|
146
|
+
|
|
147
|
+
- Cada modelo é baixado do Hugging Face no primeiro uso (de centenas de MB
|
|
148
|
+
a cerca de 2 GB) e fica em cache em `~/.cache/huggingface`.
|
|
149
|
+
- Em sistemas com vírgula decimal (ex.: português do Brasil), o add-on
|
|
150
|
+
ajusta temporariamente a formatação numérica ao carregar os modelos,
|
|
151
|
+
evitando o erro do `protobuf` com tokenizadores SentencePiece.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
orange3_text_analysis-0.0.1.data/data/help/orange3-text-analysis/index.html,sha256=jem4PyUt13238T_T_oIC8dNKelfHwxDN2tsN6oJRsMM,1025
|
|
2
|
+
orange3_text_analysis-0.0.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
3
|
+
text_analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
text_analysis/limpeza.py,sha256=Eo3HdFRbbyhav4FeEQBTKp3fI-ymQfN3-pXdNoo5FAw,4023
|
|
5
|
+
text_analysis/modelo.py,sha256=FL3LTVyp6ob_r0nH2hxa-YaSr7S1MuodA7r8tBQ1SPM,10455
|
|
6
|
+
text_analysis/traducao.py,sha256=AHc2zYxFo-h_6OqgRDtjl1-UChDy1dTApW9bigu2GZc,6548
|
|
7
|
+
text_analysis/widgets/__init__.py,sha256=TI_MlFgipZLG4dn_3nxAXi8V1fXdpfg6ItFphnsNSaE,266
|
|
8
|
+
text_analysis/widgets/owlimpezatexto.py,sha256=R2xE520jsmW2Ij2iEwAdgR73os0Z6jUhrk1_acQXFG0,11684
|
|
9
|
+
text_analysis/widgets/owsentimentohf.py,sha256=OUHBbj5JcmdWP8jeMEqK8xfza0-t6BNekaQHWkFg_E4,9435
|
|
10
|
+
text_analysis/widgets/owtraducao.py,sha256=O_WbYlP6ni9h3IkayQ1ZKh3xSkPtchti6cktWrHKbLo,12234
|
|
11
|
+
text_analysis/widgets/icons/limpeza.svg,sha256=p5OdvoF6vpYJfENk3AALAafViCxinOv9_MY6T2ftmkM,426
|
|
12
|
+
text_analysis/widgets/icons/sentimento.svg,sha256=81lF5J704xiCERZjtt9RI_UeyCgZGufIeul2bsuIRno,337
|
|
13
|
+
text_analysis/widgets/icons/traducao.svg,sha256=UMaILaGYPIkO4SrM-72Mw8HXcBoSz1Wx7tz6komOgv8,439
|
|
14
|
+
orange3_text_analysis-0.0.1.dist-info/METADATA,sha256=ao_qG6Monw2PQNN3dIEdvExxURuG_vZ16fXpgOjJ0bc,5393
|
|
15
|
+
orange3_text_analysis-0.0.1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
16
|
+
orange3_text_analysis-0.0.1.dist-info/entry_points.txt,sha256=V9XPdxkFjxzXXJgjJY2gRXsIShqZGKJi2yUPVg3ggIQ,102
|
|
17
|
+
orange3_text_analysis-0.0.1.dist-info/top_level.txt,sha256=1Owxhl879ZlbNiyJnsxLqwxoOAeaPbXFP_RPwACP6HA,14
|
|
18
|
+
orange3_text_analysis-0.0.1.dist-info/RECORD,,
|