antonioFlavio commited on
Commit
730eeaa
1 Parent(s): d367110
Files changed (4) hide show
  1. app.py +24 -0
  2. complex_extractor_gpt.py +35 -0
  3. requirements.txt +4 -0
  4. 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]