ferrarimarlon commited on
Commit
e1a13e5
·
1 Parent(s): 5eb4d86

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -0
app.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # !pip install PyMuPDF gradio openai
2
+
3
+ import fitz, openai
4
+ import gradio as gr
5
+
6
+ def formatar(texto):
7
+ texto = texto.replace('\n', ' ')
8
+ return texto
9
+
10
+ def pdf_para_lista(documento):
11
+ conteudo = fitz.open(documento)
12
+ total_paginas = conteudo.page_count
13
+ lista_conteudo = []
14
+ # lê da primeira página à última
15
+ for i in range(0, total_paginas):
16
+ # pega todo o texto da página
17
+ texto = conteudo.load_page(i).get_text("text")
18
+ texto = formatar(texto)
19
+ # adiciona o indicador de numeração da páginas
20
+ pagina = 'Página '+str(i+1)+' - '
21
+ lista_conteudo.append(pagina+texto)
22
+
23
+ conteudo.close()
24
+ return lista_conteudo
25
+
26
+ def getResposta(arquivo, pergunta, openAI_key):
27
+ openai.api_key = openAI_key
28
+ base_texto = pdf_para_lista(arquivo)
29
+ prompt = ""
30
+ # adiciona uma quebra de linha para cada página
31
+ for c in base_texto:
32
+ prompt += c + '\n\n'
33
+ # instancia o modelo GPT
34
+ completion = openai.ChatCompletion.create(
35
+ model = 'gpt-3.5-turbo',
36
+ messages = [
37
+ {'role': 'assistant', 'content': prompt},
38
+ {'role': 'user', 'content': pergunta},
39
+ {'role': 'system', 'content':'Retorne apenas texto contido no resultado. Retorne o número da página de cada resultado no formato [Página].'}
40
+ ],
41
+ temperature = 0
42
+ )
43
+ resposta = completion['choices'][0]['message']['content']
44
+ return resposta
45
+
46
+ with gr.Blocks() as demo:
47
+
48
+ gr.Markdown(f'<center><h1>Aplicação IA Generativa em Documentos PDF</h1></center>')
49
+
50
+ with gr.Row():
51
+
52
+ with gr.Group():
53
+ gr.Markdown(f'<p style="text-align:center">Open AI API key <a href="https://platform.openai.com/account/api-keys">aqui</a></p>')
54
+ openAI_key=gr.Textbox(label='Sua chave OpenAI:')
55
+ arquivo = gr.File(label='Insira seu PDF:', file_types=['.pdf'])
56
+ pergunta = gr.Textbox(label='Faça um pergunta em relação ao PDF:')
57
+ btn = gr.Button(value='Enviar')
58
+ btn.style(full_width=True)
59
+ with gr.Group():
60
+ resposta = gr.Textbox(label='Resposta:')
61
+
62
+ btn.click(getResposta, inputs=[arquivo, pergunta, openAI_key], outputs=[resposta])
63
+
64
+ demo.launch()
65
+