hedtorresca commited on
Commit
fbc1c20
·
verified ·
1 Parent(s): 95453b3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +153 -153
app.py CHANGED
@@ -1,154 +1,154 @@
1
- import gradio as gr
2
- from newspaper import Article
3
- import openai
4
- import re
5
- import pandas as pd
6
- import os
7
-
8
- # Configurar la clave API de OpenAI
9
- openai.api_key = 'sk-proj-LjY9v9KS5uiaear7adYrT3BlbkFJeenafXW8MA1ZIWMkcKWy'
10
-
11
- # Simulación de la función get_final_url debido a falta de definición
12
- def get_final_url(url):
13
- return url
14
-
15
- # Función para limpiar URL (del script proporcionado)
16
- def clean_url(url):
17
- cleaned_url2 = re.sub(r'&ved=.*', '', url)
18
- cleaned_url = get_final_url(cleaned_url2)
19
- return cleaned_url
20
-
21
- # Función para extraer detalles del artículo
22
- def get_article_details(url):
23
- clean_url_processed = clean_url(url)
24
- try:
25
- article = Article(clean_url_processed)
26
- article.download()
27
- article.parse()
28
- article.nlp()
29
- return {
30
- 'Título': article.title,
31
- 'Fecha Publicacion': article.publish_date,
32
- 'Fuente': article.source_url,
33
- 'Link': clean_url_processed,
34
- 'Texto completo': article.text,
35
- 'Resumen': article.summary
36
- }
37
- except Exception as e:
38
- print(f'Failed to process article at {clean_url_processed}: {e}')
39
- return None
40
-
41
- # Función para extraer detalles adicionales usando OpenAI
42
- def extract_additional_details(text):
43
- message = [
44
- {"role": "system", "content": "Eres un asistente que ayuda a extraer e inferir información específica de textos de noticias."},
45
- {"role": "user", "content": (
46
- f"Extrae la siguiente información del texto: \n"
47
- f"- Nombre de la víctima\n- Género de la víctima\n- Nacionalidad de la víctima\n- Ciudad de nacimiento de la víctima\n- Rango de edad de la víctima\n- Fecha corta de los hechos\n- Hora de los hechos\n"
48
- f"- Lugar específico de los hechos\n- Municipio de los hechos\n- Departamento de los hechos\n- País de los hechos\n- Tipo específico de entorno\n"
49
- f"- Profesión de la víctima\n- Tipo de muerte\n- Tipo de arma o medio\n- Descripción de los hechos\n- Presunto responsable\n"
50
- f"- Relación víctima-responsable\n- Presunta relación con grupos armados o bandas delincuenciales del presunto responsable\n- Previa existencia de medida cautelar\n"
51
- f"- Grupo étnico de la víctima\n- La víctima es LGBT\n- La víctima es lideresa\n- Tipo de lideresa\n- Otras víctimas mortales o heridas en los hechos\n- Feminicidio u Homicidio\n- Fuente\n- Medio de comunicación\n- Formato temático o formato episódico\n- Atribución de responsabilidad sobre el hecho\n "
52
- f"- Texto\n{text}"
53
- )}
54
- ]
55
-
56
- response = openai.ChatCompletion.create(
57
- model="gpt-4o",
58
- messages=message,
59
- max_tokens=600,
60
- n=1,
61
- stop=None,
62
- temperature=0.2,
63
- )
64
- return response.choices[0].message['content'].strip()
65
- def parse_details(details):
66
- fields = [
67
- 'Nombre de la víctima', 'Género de la víctima', 'Nacionalidad de la víctima', 'Rango de edad de la víctima', 'Fecha corta de los hechos', 'Hora de los hechos',
68
- 'Lugar específico de los hechos', 'Municipio de los hechos', 'Departamento de los hechos', 'País de los hechos', 'Ciudad de nacimiento de la víctima','Tipo específico de entorno',
69
- 'Profesión de la víctima', 'Tipo de muerte', 'Tipo de arma o medio', 'Descripción de los hechos',
70
- 'Presunto responsable', 'Relación víctima-responsable', 'Presunta relación con grupos armados o bandas delincuenciales del presunto responsable',
71
- 'Previa existencia de medida cautelar', 'Grupo étnico de la víctima', 'La víctima es LGBT', 'La víctima es lideresa', 'Tipo de lideresa',
72
- 'Otras víctimas mortales o heridas en los hechos', 'Feminicidio u Homicidio', 'Fuente', 'Medio de comunicación', 'Formato temático o formato episódico','Atribución de responsabilidad sobre el hecho'
73
- ]
74
-
75
- parsed_details = {}
76
- for field in fields:
77
- pattern = rf"{field}:\s*(.*)"
78
- match = re.search(pattern, details)
79
- parsed_details[field] = match.group(1).strip() if match else None
80
- return parsed_details
81
-
82
- # Función para generar el archivo Excel
83
- def generate_excel(details, additional_details):
84
- #combined_details = {**details, **eval(additional_details)}
85
- df = pd.concat([details, additional_details], axis=1)
86
- output_dir = 'data'
87
- os.makedirs(output_dir, exist_ok=True)
88
- output_file_path = os.path.join(output_dir, 'detalles_articulo.xlsx')
89
- df['Fecha Publicacion'] = pd.to_datetime(df['Fecha Publicacion'], utc=True)
90
- df['Fecha Publicacion'] = df['Fecha Publicacion'].dt.strftime('%d/%m/%Y')
91
- df.to_excel(output_file_path, index=False)
92
- return output_file_path
93
-
94
- # Función del interfaz de Gradio
95
- def extract_article_info(url):
96
- details = get_article_details(url)
97
- if details:
98
- additional_details = extract_additional_details(details['Título'] + "\n Fecha de publicación: "+ str(pd.to_datetime(details['Fecha Publicacion'], utc=True)) + "\n" + details['Texto completo'] + "\n Fuente: " + details['Fuente'] )
99
- parsed_details = parse_details(additional_details.replace('**', ''))
100
- details2 = pd.DataFrame([details])
101
- details_df = pd.DataFrame([parsed_details])
102
- excel_path = generate_excel(details2, details_df)
103
-
104
- return details['Título'], details['Fecha Publicacion'], details['Fuente'], details['Link'], details['Texto completo'], details['Resumen'], parsed_details['Nombre de la víctima'], parsed_details['Género de la víctima'], parsed_details['Nacionalidad de la víctima'], parsed_details['Rango de edad de la víctima'], parsed_details['Fecha corta de los hechos'], parsed_details['Hora de los hechos'], parsed_details['Lugar específico de los hechos'], parsed_details['Municipio de los hechos'], parsed_details['Departamento de los hechos'], parsed_details['País de los hechos'], parsed_details['Ciudad de nacimiento de la víctima'],parsed_details['Tipo específico de entorno'], parsed_details['Profesión de la víctima'], parsed_details['Tipo de muerte'], parsed_details['Tipo de arma o medio'], parsed_details['Descripción de los hechos'], parsed_details['Presunto responsable'], parsed_details['Relación víctima-responsable'], parsed_details['Presunta relación con grupos armados o bandas delincuenciales del presunto responsable'],parsed_details['Previa existencia de medida cautelar'], parsed_details['Grupo étnico de la víctima'], parsed_details['La víctima es LGBT'], parsed_details['La víctima es lideresa'], parsed_details['Tipo de lideresa'],parsed_details['Otras víctimas mortales o heridas en los hechos'], parsed_details['Feminicidio u Homicidio'], parsed_details['Medio de comunicación'], parsed_details['Formato temático o formato episódico'],parsed_details['Atribución de responsabilidad sobre el hecho'], excel_path
105
- else:
106
- return "Error procesando el artículo", "", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
107
-
108
- # Diseño de la interfaz de Gradio
109
- iface = gr.Interface(
110
- fn=extract_article_info,
111
- inputs=gr.Textbox(lines=2, placeholder="Ingresa la URL del artículo"),
112
- outputs=[
113
- gr.Textbox(label="Título"),
114
- gr.Textbox(label="Fecha de Publicación"),
115
- gr.Textbox(label="Fuente"),
116
- gr.Textbox(label="Link"),
117
- gr.Textbox(label="Texto Completo"),
118
- gr.Textbox(label="Resumen"),
119
- gr.Textbox(label="Nombre de la víctima"),
120
- gr.Textbox(label="Género de la víctima"),
121
- gr.Textbox(label="Nacionalidad de la víctima"),
122
- gr.Textbox(label="Rango de edad de la víctima"),
123
- gr.Textbox(label="Fecha corta de los hechos"),
124
- gr.Textbox(label="Hora de los hechos"),
125
- gr.Textbox(label="Lugar específico de los hechos"),
126
- gr.Textbox(label="Municipio de los hechos"),
127
- gr.Textbox(label="Departamento de los hechos"),
128
- gr.Textbox(label="País de los hechos"),
129
- gr.Textbox(label="Ciudad de nacimiento de la víctima"),
130
- gr.Textbox(label="Tipo específico de entorno"),
131
- gr.Textbox(label="Profesión de la víctima"),
132
- gr.Textbox(label="Tipo de muerte"),
133
- gr.Textbox(label="Tipo de arma o medio"),
134
- gr.Textbox(label="Descripción de los hechos"),
135
- gr.Textbox(label="Presunto responsable"),
136
- gr.Textbox(label="Relación víctima-responsable"),
137
- gr.Textbox(label="Presunta relación con grupos armados o bandas delincuenciales del presunto responsable"),
138
- gr.Textbox(label="Previa existencia de medida cautelar"),
139
- gr.Textbox(label="Grupo étnico de la víctima"),
140
- gr.Textbox(label="La víctima es LGBT"),
141
- gr.Textbox(label="La víctima es lideresa"),
142
- gr.Textbox(label="Tipo de lideresa"),
143
- gr.Textbox(label="Otras víctimas mortales o heridas en los hechos"),
144
- gr.Textbox(label="Feminicidio u Homicidio"),
145
- gr.Textbox(label="Medio de comunicación"),
146
- gr.Textbox(label="Formato temático o formato episódico"),
147
- gr.Textbox(label="Atribución de responsabilidad sobre el hecho"),
148
- gr.File(label="Descargar detalles como Excel")
149
- ],
150
- title="Extracción de Detalles de Noticias",
151
- description="Ingresa la URL de un artículo de noticias y obtén los detalles extraídos."
152
- )
153
-
154
  iface.launch(share=True, debug= True)
 
1
+ import gradio as gr
2
+ from newspaper import Article
3
+ import openai
4
+ import re
5
+ import pandas as pd
6
+ import os
7
+
8
+ # Configurar la clave API de OpenAI
9
+ openai.api_key = 'sk-proj-LjY9v9KS5uiaear7adYrT3BlbkFJeenafXW8MA1ZIWMkcKWy'
10
+
11
+ # Simulación de la función get_final_url debido a falta de definición
12
+ def get_final_url(url):
13
+ return url
14
+
15
+ # Función para limpiar URL (del script proporcionado)
16
+ def clean_url(url):
17
+ cleaned_url2 = re.sub(r'&ved=.*', '', url)
18
+ cleaned_url = get_final_url(cleaned_url2)
19
+ return cleaned_url
20
+
21
+ # Función para extraer detalles del artículo
22
+ def get_article_details(url):
23
+ clean_url_processed = clean_url(url)
24
+ try:
25
+ article = Article(clean_url_processed)
26
+ article.download()
27
+ article.parse()
28
+ article.nlp()
29
+ return {
30
+ 'Título': article.title,
31
+ 'Fecha Publicacion': article.publish_date,
32
+ 'Fuente': article.source_url,
33
+ 'Link': clean_url_processed,
34
+ 'Texto completo': article.text,
35
+ 'Resumen': article.summary
36
+ }
37
+ except Exception as e:
38
+ print(f'Failed to process article at {clean_url_processed}: {e}')
39
+ return None
40
+
41
+ # Función para extraer detalles adicionales usando OpenAI
42
+ def extract_additional_details(text):
43
+ message = [
44
+ {"role": "system", "content": "Eres un asistente que ayuda a extraer e inferir información específica de textos de noticias."},
45
+ {"role": "user", "content": (
46
+ f"Extrae la siguiente información del texto: \n"
47
+ f"- Nombre de la víctima\n- Género de la víctima\n- Nacionalidad de la víctima\n- Ciudad de nacimiento de la víctima\n- Rango de edad de la víctima\n- Fecha corta de los hechos\n- Hora de los hechos\n"
48
+ f"- Lugar específico de los hechos\n- Municipio de los hechos\n- Departamento de los hechos\n- País de los hechos\n- Tipo específico de entorno\n"
49
+ f"- Profesión de la víctima\n- Tipo de muerte\n- Tipo de arma o medio\n- Descripción de los hechos\n- Presunto responsable\n"
50
+ f"- Relación víctima-responsable\n- Presunta relación con grupos armados o bandas delincuenciales del presunto responsable\n- Previa existencia de medida cautelar\n"
51
+ f"- Grupo étnico de la víctima\n- La víctima es LGBT\n- La víctima es lideresa\n- Tipo de lideresa\n- Otras víctimas mortales o heridas en los hechos\n- Feminicidio u Homicidio\n- Fuente\n- Medio de comunicación\n- Formato temático o formato episódico\n- Atribución de responsabilidad sobre el hecho\n "
52
+ f"- Texto\n{text}"
53
+ )}
54
+ ]
55
+
56
+ response = openai.ChatCompletion.create(
57
+ model="gpt-3.5-turbo-0125",
58
+ messages=message,
59
+ max_tokens=600,
60
+ n=1,
61
+ stop=None,
62
+ temperature=0.2,
63
+ )
64
+ return response.choices[0].message['content'].strip()
65
+ def parse_details(details):
66
+ fields = [
67
+ 'Nombre de la víctima', 'Género de la víctima', 'Nacionalidad de la víctima', 'Rango de edad de la víctima', 'Fecha corta de los hechos', 'Hora de los hechos',
68
+ 'Lugar específico de los hechos', 'Municipio de los hechos', 'Departamento de los hechos', 'País de los hechos', 'Ciudad de nacimiento de la víctima','Tipo específico de entorno',
69
+ 'Profesión de la víctima', 'Tipo de muerte', 'Tipo de arma o medio', 'Descripción de los hechos',
70
+ 'Presunto responsable', 'Relación víctima-responsable', 'Presunta relación con grupos armados o bandas delincuenciales del presunto responsable',
71
+ 'Previa existencia de medida cautelar', 'Grupo étnico de la víctima', 'La víctima es LGBT', 'La víctima es lideresa', 'Tipo de lideresa',
72
+ 'Otras víctimas mortales o heridas en los hechos', 'Feminicidio u Homicidio', 'Fuente', 'Medio de comunicación', 'Formato temático o formato episódico','Atribución de responsabilidad sobre el hecho'
73
+ ]
74
+
75
+ parsed_details = {}
76
+ for field in fields:
77
+ pattern = rf"{field}:\s*(.*)"
78
+ match = re.search(pattern, details)
79
+ parsed_details[field] = match.group(1).strip() if match else None
80
+ return parsed_details
81
+
82
+ # Función para generar el archivo Excel
83
+ def generate_excel(details, additional_details):
84
+ #combined_details = {**details, **eval(additional_details)}
85
+ df = pd.concat([details, additional_details], axis=1)
86
+ output_dir = 'data'
87
+ os.makedirs(output_dir, exist_ok=True)
88
+ output_file_path = os.path.join(output_dir, 'detalles_articulo.xlsx')
89
+ df['Fecha Publicacion'] = pd.to_datetime(df['Fecha Publicacion'], utc=True)
90
+ df['Fecha Publicacion'] = df['Fecha Publicacion'].dt.strftime('%d/%m/%Y')
91
+ df.to_excel(output_file_path, index=False)
92
+ return output_file_path
93
+
94
+ # Función del interfaz de Gradio
95
+ def extract_article_info(url):
96
+ details = get_article_details(url)
97
+ if details:
98
+ additional_details = extract_additional_details(details['Título'] + "\n Fecha de publicación: "+ str(pd.to_datetime(details['Fecha Publicacion'], utc=True)) + "\n" + details['Texto completo'] + "\n Fuente: " + details['Fuente'] )
99
+ parsed_details = parse_details(additional_details.replace('**', ''))
100
+ details2 = pd.DataFrame([details])
101
+ details_df = pd.DataFrame([parsed_details])
102
+ excel_path = generate_excel(details2, details_df)
103
+
104
+ return details['Título'], details['Fecha Publicacion'], details['Fuente'], details['Link'], details['Texto completo'], details['Resumen'], parsed_details['Nombre de la víctima'], parsed_details['Género de la víctima'], parsed_details['Nacionalidad de la víctima'], parsed_details['Rango de edad de la víctima'], parsed_details['Fecha corta de los hechos'], parsed_details['Hora de los hechos'], parsed_details['Lugar específico de los hechos'], parsed_details['Municipio de los hechos'], parsed_details['Departamento de los hechos'], parsed_details['País de los hechos'], parsed_details['Ciudad de nacimiento de la víctima'],parsed_details['Tipo específico de entorno'], parsed_details['Profesión de la víctima'], parsed_details['Tipo de muerte'], parsed_details['Tipo de arma o medio'], parsed_details['Descripción de los hechos'], parsed_details['Presunto responsable'], parsed_details['Relación víctima-responsable'], parsed_details['Presunta relación con grupos armados o bandas delincuenciales del presunto responsable'],parsed_details['Previa existencia de medida cautelar'], parsed_details['Grupo étnico de la víctima'], parsed_details['La víctima es LGBT'], parsed_details['La víctima es lideresa'], parsed_details['Tipo de lideresa'],parsed_details['Otras víctimas mortales o heridas en los hechos'], parsed_details['Feminicidio u Homicidio'], parsed_details['Medio de comunicación'], parsed_details['Formato temático o formato episódico'],parsed_details['Atribución de responsabilidad sobre el hecho'], excel_path
105
+ else:
106
+ return "Error procesando el artículo", "", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
107
+
108
+ # Diseño de la interfaz de Gradio
109
+ iface = gr.Interface(
110
+ fn=extract_article_info,
111
+ inputs=gr.Textbox(lines=2, placeholder="Ingresa la URL del artículo"),
112
+ outputs=[
113
+ gr.Textbox(label="Título"),
114
+ gr.Textbox(label="Fecha de Publicación"),
115
+ gr.Textbox(label="Fuente"),
116
+ gr.Textbox(label="Link"),
117
+ gr.Textbox(label="Texto Completo"),
118
+ gr.Textbox(label="Resumen"),
119
+ gr.Textbox(label="Nombre de la víctima"),
120
+ gr.Textbox(label="Género de la víctima"),
121
+ gr.Textbox(label="Nacionalidad de la víctima"),
122
+ gr.Textbox(label="Rango de edad de la víctima"),
123
+ gr.Textbox(label="Fecha corta de los hechos"),
124
+ gr.Textbox(label="Hora de los hechos"),
125
+ gr.Textbox(label="Lugar específico de los hechos"),
126
+ gr.Textbox(label="Municipio de los hechos"),
127
+ gr.Textbox(label="Departamento de los hechos"),
128
+ gr.Textbox(label="País de los hechos"),
129
+ gr.Textbox(label="Ciudad de nacimiento de la víctima"),
130
+ gr.Textbox(label="Tipo específico de entorno"),
131
+ gr.Textbox(label="Profesión de la víctima"),
132
+ gr.Textbox(label="Tipo de muerte"),
133
+ gr.Textbox(label="Tipo de arma o medio"),
134
+ gr.Textbox(label="Descripción de los hechos"),
135
+ gr.Textbox(label="Presunto responsable"),
136
+ gr.Textbox(label="Relación víctima-responsable"),
137
+ gr.Textbox(label="Presunta relación con grupos armados o bandas delincuenciales del presunto responsable"),
138
+ gr.Textbox(label="Previa existencia de medida cautelar"),
139
+ gr.Textbox(label="Grupo étnico de la víctima"),
140
+ gr.Textbox(label="La víctima es LGBT"),
141
+ gr.Textbox(label="La víctima es lideresa"),
142
+ gr.Textbox(label="Tipo de lideresa"),
143
+ gr.Textbox(label="Otras víctimas mortales o heridas en los hechos"),
144
+ gr.Textbox(label="Feminicidio u Homicidio"),
145
+ gr.Textbox(label="Medio de comunicación"),
146
+ gr.Textbox(label="Formato temático o formato episódico"),
147
+ gr.Textbox(label="Atribución de responsabilidad sobre el hecho"),
148
+ gr.File(label="Descargar detalles como Excel")
149
+ ],
150
+ title="Extracción de Detalles de Noticias",
151
+ description="Ingresa la URL de un artículo de noticias y obtén los detalles extraídos."
152
+ )
153
+
154
  iface.launch(share=True, debug= True)