AniseF commited on
Commit
deccc5b
·
verified ·
1 Parent(s): a12283b

Upload 3 files

Browse files
Files changed (3) hide show
  1. README.md +46 -8
  2. app.py +124 -0
  3. requirements.txt +4 -0
README.md CHANGED
@@ -1,8 +1,46 @@
1
- ---
2
- title: Seu App
3
- emoji: 🚀
4
- colorFrom: blue
5
- colorTo: green
6
- sdk: gradio
7
- python_version: 3.11
8
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PNL Grego Antigo — versão corrigida
2
+
3
+ ## Correção do erro de runtime
4
+
5
+ A versão anterior de `app.py` executava:
6
+
7
+ ```python
8
+ snapshot_download(repo_id="Jacobo/grc_perseus_lg")
9
+ ```
10
+
11
+ O repositório `Jacobo/grc_perseus_lg` não deve mais ser usado para obter o modelo. A aplicação agora instala o modelo `grc_perseus_lg` diretamente pelo pacote greCy, a partir do release oficial no GitHub.
12
+
13
+ O `app.py` simplesmente carrega:
14
+
15
+ ```python
16
+ spacy.load("grc_perseus_lg")
17
+ ```
18
+
19
+ ## Arquivos
20
+
21
+ - `app.py` — aplicação Gradio corrigida.
22
+ - `requirements.txt` — dependências e wheel do modelo greCy.
23
+ - `README.md` — estas instruções.
24
+
25
+ ## Como atualizar o Space
26
+
27
+ Substitua no Space:
28
+
29
+ - `app.py`
30
+ - `requirements.txt`
31
+
32
+ O `README.md` é opcional.
33
+
34
+ Depois de salvar os arquivos, faça um **Factory reboot** ou aguarde o rebuild automático do Space.
35
+
36
+ ## Observação sobre apóstrofos
37
+
38
+ O modelo greCy foi treinado com o *modifier letter apostrophe* `ʼ` (U+02BC). O `app.py` converte automaticamente apóstrofos comuns `’` e `'` para esse caractere antes da análise.
39
+
40
+ ## Modelo
41
+
42
+ O aplicativo usa:
43
+
44
+ `grc_perseus_lg`
45
+
46
+ É o modelo Perseus Large do greCy, com análise de lematização, morfologia, POS e dependências.
app.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import spacy
4
+
5
+ MODEL_NAME = "grc_perseus_lg"
6
+
7
+
8
+ def carregar_modelo():
9
+ """
10
+ Carrega o modelo greCy instalado pelo requirements.txt.
11
+
12
+ O modelo antigo era baixado com:
13
+ snapshot_download("Jacobo/grc_perseus_lg")
14
+
15
+ Esse repositório não deve mais ser usado para o download do modelo.
16
+ O modelo agora é instalado diretamente a partir do pacote greCy.
17
+ """
18
+ try:
19
+ nlp = spacy.load(MODEL_NAME)
20
+ print(f"✓ Modelo {MODEL_NAME} carregado com sucesso.")
21
+ return nlp
22
+ except Exception as exc:
23
+ raise RuntimeError(
24
+ f"Não foi possível carregar o modelo spaCy '{MODEL_NAME}'. "
25
+ "Verifique se o wheel do greCy foi instalado corretamente."
26
+ ) from exc
27
+
28
+
29
+ nlp = carregar_modelo()
30
+
31
+
32
+ def normalizar_grego(texto):
33
+ """
34
+ O greCy foi treinado usando o modifier letter apostrophe U+02BC.
35
+ Converte alguns apóstrofos comuns para esse caractere.
36
+ """
37
+ return (
38
+ texto.replace("’", "ʼ")
39
+ .replace("'", "ʼ")
40
+ # U+1FBD GREEK KORONIS
41
+ .replace("͵", "ʼ")
42
+ )
43
+
44
+
45
+ def analisar_texto(texto):
46
+ if not texto or not texto.strip():
47
+ return 0, 0, 0.0, pd.DataFrame(
48
+ columns=[
49
+ "Token",
50
+ "Lema",
51
+ "Classe Gramatical",
52
+ "Morfologia",
53
+ "Dependência",
54
+ ]
55
+ )
56
+
57
+ texto = normalizar_grego(texto)
58
+ doc = nlp(texto)
59
+
60
+ # Apenas tokens lexicais para Tokens/Types/TTR.
61
+ palavras = [
62
+ token.text.lower()
63
+ for token in doc
64
+ if not token.is_punct and not token.is_space
65
+ ]
66
+
67
+ total_tokens = len(palavras)
68
+ total_types = len(set(palavras))
69
+ ttr = round(total_types / total_tokens, 4) if total_tokens else 0.0
70
+
71
+ dados_tokens = [
72
+ {
73
+ "Token": token.text,
74
+ "Lema": token.lemma_,
75
+ "Classe Gramatical": token.pos_,
76
+ "Morfologia": str(token.morph),
77
+ "Dependência": token.dep_,
78
+ }
79
+ for token in doc
80
+ if not token.is_space
81
+ ]
82
+
83
+ df_tokens = pd.DataFrame(dados_tokens)
84
+
85
+ return total_tokens, total_types, ttr, df_tokens
86
+
87
+
88
+ demo = gr.Interface(
89
+ fn=analisar_texto,
90
+ inputs=gr.Textbox(
91
+ lines=6,
92
+ placeholder="Digite o texto em Grego Antigo aqui...",
93
+ label="Texto em Grego Antigo",
94
+ ),
95
+ outputs=[
96
+ gr.Number(label="Total de Tokens"),
97
+ gr.Number(label="Total de Types (Palavras Únicas)"),
98
+ gr.Number(label="Type-Token Ratio (TTR)"),
99
+ gr.Dataframe(
100
+ label="Análise Morfológica e Sintática",
101
+ headers=[
102
+ "Token",
103
+ "Lema",
104
+ "Classe Gramatical",
105
+ "Morfologia",
106
+ "Dependência",
107
+ ],
108
+ ),
109
+ ],
110
+ title="Análise Lexical e Gramatical — Grego Antigo",
111
+ description=(
112
+ "Cálculo de Tokens, Types e TTR + lematização, "
113
+ "morfologia e análise sintática pelo modelo greCy "
114
+ "`grc_perseus_lg`."
115
+ ),
116
+ examples=[
117
+ ["Μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος"],
118
+ ["ἄνδρα μοι ἔννεπε, Μοῦσα, πολύτροπον"],
119
+ ],
120
+ )
121
+
122
+
123
+ if __name__ == "__main__":
124
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ pandas
2
+ spacy>=3.7.5,<3.9
3
+ https://github.com/jmyerston/greCy/releases/download/v3.7.5/grc_perseus_lg-3.7.5-py3-none-any.whl
4
+ gradio>=5.0,<7