Spaces:
Sleeping
Sleeping
antonioFlavio
commited on
Commit
•
730eeaa
1
Parent(s):
d367110
Deploy
Browse files- app.py +24 -0
- complex_extractor_gpt.py +35 -0
- requirements.txt +4 -0
- template.py +75 -0
app.py
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import json
|
3 |
+
import template
|
4 |
+
import complex_extractor_gpt
|
5 |
+
|
6 |
+
def greet(text, template_id):
|
7 |
+
if text == "":
|
8 |
+
raise gr.Error("Texto vazio! Informe um texto para extração de palavras complexas.")
|
9 |
+
|
10 |
+
if template_id == "":
|
11 |
+
raise gr.Error("Template não selecionado! Selecione um template para continuar.")
|
12 |
+
|
13 |
+
output = complex_extractor_gpt.extrair_complex_words(template.get_template(template_id), text)
|
14 |
+
|
15 |
+
return json.dumps(output, indent=4)
|
16 |
+
|
17 |
+
inputs = [
|
18 |
+
gr.Textbox(lines=5, label="Digite o texto de entrada"),
|
19 |
+
gr.Dropdown(['template_1', 'template_2', 'template_3', 'template_4', 'template_5'], label="Selecione o Template para avaliação:")
|
20 |
+
]
|
21 |
+
|
22 |
+
demo = gr.Interface(fn=greet, inputs=inputs, outputs="json")
|
23 |
+
|
24 |
+
demo.launch()
|
complex_extractor_gpt.py
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
|
3 |
+
from typing import List
|
4 |
+
from pydantic import BaseModel, Field
|
5 |
+
from langchain.chat_models import ChatOpenAI
|
6 |
+
from langchain.prompts import ChatPromptTemplate
|
7 |
+
from langchain.utils.openai_functions import convert_pydantic_to_openai_function
|
8 |
+
from langchain.output_parsers.openai_functions import JsonKeyOutputFunctionsParser
|
9 |
+
|
10 |
+
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
|
11 |
+
|
12 |
+
class PalavraComplexa(BaseModel):
|
13 |
+
"""Informações de uma palavra complexa."""
|
14 |
+
palavra_complexa: str = Field(description="palavra complexa")
|
15 |
+
palavra_substituta: str = Field(description="substituto da palavra complexa")
|
16 |
+
|
17 |
+
|
18 |
+
class Informacao(BaseModel):
|
19 |
+
"""Lista de palavras complexas para extrair a informação."""
|
20 |
+
palavras: List[PalavraComplexa] = Field(description="Lista de informações de palavras complexas")
|
21 |
+
|
22 |
+
|
23 |
+
|
24 |
+
def extrair_complex_words(template, texto):
|
25 |
+
|
26 |
+
model = ChatOpenAI(openai_api_key=OPENAI_API_KEY)
|
27 |
+
extraction_functions = [convert_pydantic_to_openai_function(Informacao)]
|
28 |
+
extraction_model = model.bind(functions=extraction_functions, function_call={"name":"Informacao"})
|
29 |
+
|
30 |
+
prompt_step = ChatPromptTemplate.from_template(template)
|
31 |
+
extraction_chain_model = prompt_step | extraction_model | JsonKeyOutputFunctionsParser(key_name="palavras")
|
32 |
+
|
33 |
+
retorno = extraction_chain_model.invoke({"trecho": texto})
|
34 |
+
|
35 |
+
return retorno
|
requirements.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
gradio
|
2 |
+
langchain==0.0.348
|
3 |
+
openai==1.3.8
|
4 |
+
pydantic==1.10.8
|
template.py
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
def _get_template_1():
|
3 |
+
return """Atue como um especialista em extrair palavras complexas de textos jurídicos. Considere como público alvo pessoas com baixa escolaridade, com idade de 18 anos.
|
4 |
+
Não considere como complexo: nomes de pessoas, entidades, números.
|
5 |
+
Considere apenas as palavras existentes no trecho. Se não houver palavras complexas, deixe vazio.
|
6 |
+
Não exagere, não selecione como palavra complexa mais do que 40% das palavras do trecho. Dê preferência para as mais complexas.
|
7 |
+
Uma palavra complexa não deve ser considerada como simplificação de outra palavra complexa.
|
8 |
+
|
9 |
+
Extraia palavras complexas e suas respectivas palavras simples substitutas: {trecho}.
|
10 |
+
|
11 |
+
Considere o gênero e grau das palavras ao redor da palavra complexa para sugerir a palavra simples substituta.
|
12 |
+
Na palavra simples, faça o ajuste morfológico necessário para que a frase permaneça coesa e coerente.
|
13 |
+
"""
|
14 |
+
|
15 |
+
def _get_template_2():
|
16 |
+
return """Atue como um especialista em extrair palavras complexas de textos jurídicos. Considere como público alvo pessoas com baixa escolaridade, com idade de 20 anos.
|
17 |
+
Não considere como complexo: nomes de pessoas, entidades, números.
|
18 |
+
Considere apenas as palavras existentes no trecho. Se não houver palavras complexas, deixe vazio.
|
19 |
+
Não selecione palavras simples como complexas e dê preferência para as mais complexas.
|
20 |
+
Uma palavra complexa não deve ser considerada como simplificação de outra palavra complexa.
|
21 |
+
|
22 |
+
Extraia palavras complexas e suas respectivas palavras simples substitutas: {trecho}.
|
23 |
+
|
24 |
+
Considere o gênero e grau das palavras ao redor da palavra complexa para sugerir a palavra simples substituta. Na palavra simples, faça o ajuste morfológico necessário para que a frase permaneça coesa e coerente.
|
25 |
+
"""
|
26 |
+
|
27 |
+
def _get_template_3():
|
28 |
+
return """Atue como um especialista em extrair palavras complexas de textos jurídicos. Considere como público alvo pessoas com baixa ou média escolaridade, com idade de 24 anos.
|
29 |
+
Não considere como complexo: nomes de pessoas, entidades, números.
|
30 |
+
Considere apenas as palavras existentes no trecho. Se não houver palavras complexas, deixe vazio.
|
31 |
+
Não selecione palavras simples como complexas e dê preferência para as mais complexas.
|
32 |
+
Uma palavra complexa não deve ser considerada como simplificação de outra palavra complexa.
|
33 |
+
|
34 |
+
Extraia palavras complexas e suas respectivas palavras simples substitutas: {trecho}.
|
35 |
+
|
36 |
+
Considere o gênero e grau das palavras ao redor da palavra complexa para sugerir a palavra simples substituta. Na palavra simples, faça o ajuste morfológico necessário para que a frase permaneça coesa e coerente.
|
37 |
+
"""
|
38 |
+
|
39 |
+
def _get_template_4():
|
40 |
+
return """Atue como um especialista em extrair palavras complexas de textos jurídicos.
|
41 |
+
Não considere como complexo: nomes de pessoas, entidades, números.
|
42 |
+
Considere apenas as palavras existentes no trecho. Se não houver palavras complexas, deixe vazio.
|
43 |
+
Não selecione palavras simples como complexas e dê preferência para as mais complexas.
|
44 |
+
Uma palavra complexa não deve ser considerada como simplificação de outra palavra complexa.
|
45 |
+
Considere como complexa palavras do juridiquês ou palavras formais.
|
46 |
+
|
47 |
+
Extraia palavras complexas e suas respectivas palavras simples substitutas: {trecho}.
|
48 |
+
|
49 |
+
Considere o gênero e grau das palavras ao redor da palavra complexa para sugerir a palavra simples substituta. Na palavra simples, faça o ajuste morfológico necessário para que a frase permaneça coesa e coerente.
|
50 |
+
"""
|
51 |
+
|
52 |
+
def _get_template_5():
|
53 |
+
return """Atue como um especialista em extrair palavras complexas de textos jurídicos.
|
54 |
+
Não considere como complexo: nomes de pessoas, entidades, números ou datas
|
55 |
+
Considere apenas as palavras existentes no trecho. Se não houver palavras complexas, deixe vazio.
|
56 |
+
Não selecione palavras simples como complexas e dê preferência para as mais complexas.
|
57 |
+
Uma palavra complexa não deve ser considerada como simplificação de outra palavra complexa.
|
58 |
+
Considere como complexa palavras do juridiquês ou palavras formais.
|
59 |
+
Se a simplificação de uma palavra for ela mesma, não considere como palavra complexa.
|
60 |
+
|
61 |
+
Extraia palavras complexas e suas respectivas palavras simples substitutas: {trecho}.
|
62 |
+
|
63 |
+
Considere o gênero e grau das palavras ao redor da palavra complexa para sugerir a palavra simples substituta. Na palavra simples, faça o ajuste morfológico necessário para que a frase permaneça coesa e coerente.
|
64 |
+
"""
|
65 |
+
|
66 |
+
templates = {}
|
67 |
+
|
68 |
+
templates["template_1"] = _get_template_1()
|
69 |
+
templates["template_2"] = _get_template_2()
|
70 |
+
templates["template_3"] = _get_template_3()
|
71 |
+
templates["template_4"] = _get_template_4()
|
72 |
+
templates["template_5"] = _get_template_5()
|
73 |
+
|
74 |
+
def get_template(template_id):
|
75 |
+
return templates[template_id]
|