Alejandro Pardo commited on
Commit
16edd5b
·
1 Parent(s): b9afbea

Deploy: 2026-02-23 09:22

Browse files
data/processed/anibal_gaviria/biografia/biografia.txt CHANGED
@@ -1 +1 @@
1
- Anibal Gaviria Correa es un politico colombiano que ha sido Gobernador de Antioquia (2004-2007 y 2020-2023) y Alcalde de Medellin (2012-2015). Participa en la Gran Consulta por Colombia del 8 de marzo de 2026 como candidato de centro-derecha. Su propuesta se centra en descentralizacion, tarifa cero en transporte publico, reforma a la salud y mano firme contra la violencia.
 
1
+ Aníbal Gaviria Correa es un politico colombiano que ha sido Gobernador de Antioquia (2004-2007 y 2020-2023) y Alcalde de Medellin (2012-2015). Participa en la Gran Consulta por Colombia del 8 de marzo de 2026 como candidato de centro-derecha. Su propuesta se centra en descentralizacion, tarifa cero en transporte publico, reforma a la salud y mano firme contra la violencia.
data/processed/anibal_gaviria/biografia/biografia_metadata.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "candidate": "Anibal Gaviria",
3
  "proposal_title": "Biografia",
4
  "topic": "Biografia",
5
  "source_url": "",
 
1
  {
2
+ "candidate": "Aníbal Gaviria",
3
  "proposal_title": "Biografia",
4
  "topic": "Biografia",
5
  "source_url": "",
data/processed/ivan_cepeda/caracol/entrevista.txt ADDED
@@ -0,0 +1,786 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ como Iván Cepeda en ese contacto que de pronto se crea y de paso me cuenta cómo se organizan esas manifestaciones.
2
+ Bueno, lo primero es que siento una enorme emoción porque realmente percibo mucho afecto y mucho reconocimiento en la gente.
3
+ Y creo que eso, pues, digamos independientemente de lo que a mí me corresponde,
4
+ creo que es un reconocimiento al propio gobierno y a lo que ha hecho en estos años por la gente,
5
+ sobre todo por la gente que ha tenido las condiciones más difíciles en el país y en muchas regiones rurales
6
+ y en la periferia de las grandes ciudades.
7
+ ¿Cómo se organizan con la gente?
8
+ La gente hace los esfuerzos.
9
+ Nosotros no financiamos en ninguna clase de movilizaciones.
10
+ Nuestra campaña es una campaña, lo he dicho desde el comienzo, austera y he cumplido con ese presupuesto.
11
+ Y entonces eso hace que haya una fuerza que se despliegue en los territorios que también nosotros creemos que va a expresar en las urnas.
12
+ Primero el 8 de marzo y después el 31 de mayo.
13
+ Ya vamos a hablar de todos estos temas de política, de su programa, de su campaña,
14
+ pero le quería hacer una pregunta, lo hablábamos con Alejandra ayer.
15
+ A mí personalmente me ha llamado la atención que usted lee los discursos.
16
+ Sí, eso es una decisión.
17
+ Eso no es común, ¿por qué?
18
+ Por varias razones.
19
+ Primero porque nosotros queremos que nuestro programa quede claramente establecido.
20
+ Entonces son 50 actos, son 50 discursos, son 50 elaboraciones que se pueden encontrar fácilmente
21
+ para que no se diga que estamos haciendo retórica, demagogia,
22
+ que esto son cosas que uno promete en el calor de una manifestación con las emociones.
23
+ Aquí hay un planteamiento serio y es un planteamiento que está condensado en ya, no sé,
24
+ tal vez 200 páginas que están allí disponibles para que se puedan examinar.
25
+ Cada una de esas intervenciones públicas trae propuestas sobre temas concretos
26
+ y han sido desplegados con una lógica.
27
+ Así que ahí está el programa.
28
+ Ahora bien, yo también puedo hacer, lo he hecho durante mis años en el Congreso,
29
+ intervenciones orales.
30
+ En el Congreso siempre se interviene sin texto escrito,
31
+ así que no es un asunto de una limitación en esa materia,
32
+ sino porque quiero apelar a la rigurosidad y la claridad del planteamiento.
33
+ Bueno, las campañas suelen decirse o resumirse en continuidad o cambio.
34
+ En este caso usted es el candidato de la continuidad de este proyecto progresista
35
+ que ha estado en el gobierno de Gustavo Petro.
36
+ En términos generales, esa continuidad, ¿a usted en qué le está dando fuerza
37
+ y en qué le está restando?
38
+ Porque, por supuesto, hay claros y oscuros del balance de este gobierno.
39
+ Pues unos matices a ese planteamiento.
40
+ Yo creo que hay que continuar lo que es lo más importante,
41
+ lo mejor que ha dejado el gobierno.
42
+ En algunos puntos habrá cambios y habrá cambios, yo diría también,
43
+ profundos y serios.
44
+ Y en lo que tiene que ver con la continuidad,
45
+ habrá profundización de la propuesta esencial de este gobierno,
46
+ que a mi juicio es la política social.
47
+ Y yo creo que eso es profundamente benéfico para el país.
48
+ ¿Por qué?
49
+ Porque este gobierno ha mostrado que el problema social en Colombia,
50
+ cuando digo el problema social me refiero a la pobreza y a la desigualdad social,
51
+ no son cargas, no son simplemente una inversión forzada de un gobierno y del Estado,
52
+ no, es una inversión para el desarrollo.
53
+ Digamos, lo nuevo del gobierno Petro y del planteamiento que hemos hecho
54
+ es que invertir en lo social es invertir en el crecimiento económico
55
+ y en el desarrollo del país.
56
+ Y ese planteamiento ha mostrado frutos y por eso lo vamos no solo a continuar,
57
+ sino a radicalizar.
58
+ Esa palabra ha sido objeto de discusiones.
59
+ Sí vamos a hacer una política social que cada vez transforme más
60
+ y pueda erradicar la pobreza y también superar la desigualdad social.
61
+ ¿En qué políticas, por ejemplo?
62
+ Exactamente.
63
+ ¿En qué políticas específicas para hablar de esa palabra que usted dice
64
+ puede asustar hablar de radicalizar y la profundización de esas reformas sociales?
65
+ ¿En qué en concreto?
66
+ Yo creo que ya hay unas reformas que están en curso.
67
+ La reforma agraria, por ejemplo, ha sido muy importante en este gobierno.
68
+ Yo creo que este es el primer gobierno que tiene realmente una política seria
69
+ con resultados visibles de reforma agraria.
70
+ Y ahora el reto no es solamente entregar tierras, titularlas,
71
+ como está establecido en el Acuerdo de Paz de 2016,
72
+ sino también pasar a que la economía campesina se convierta en un motor de la economía nacional.
73
+ Para eso es necesario seguir avanzando en el crecimiento agropecuario del país,
74
+ que ha sido uno de los éxitos de este gobierno.
75
+ Este gobierno tiene mucho que mostrar en materia de desarrollo de la economía agropecuaria.
76
+ Así que allí habrá un vector de desarrollo social muy importante.
77
+ Vamos a seguir avanzando en la reforma laboral, en la reforma pensional, por supuesto.
78
+ Hay que avanzar en la reforma a la salud.
79
+ Es necesario aprofundizar la reforma en materia de educación.
80
+ Y lo más importante también en este aspecto es el desarrollo de los territorios.
81
+ No hemos podido, en unas cuantas zonas del país,
82
+ generar un proceso de transformación territorial.
83
+ Yo creo que esa es la razón, no solamente del atraso de muchos territorios,
84
+ sino también el problema de la violencia.
85
+ Creo que ese es el...
86
+ En Cauca, en Catatumbo, en sur de Bolívar, para mencionar tres sitios,
87
+ ese es el problema esencial.
88
+ Doctor Iván, usted dice, volviendo con la inquietud de María Alejandra,
89
+ de que algunos se pueden asustar con la palabra radicalizar esas reformas sociales
90
+ que el país requiere y reclama y necesita.
91
+ Esa radicalización de la que usted habla, esa profundización de esas reformas,
92
+ ¿qué tanto tocan el actual modelo económico que tiene el país?
93
+ Y se lo pregunto porque es la misma inquietud que a usted le han planteado,
94
+ entiendo, usted me corregirá, gremios económicos, voceros empresariales...
95
+ Sí, sí hemos tenido un diálogo muy intenso.
96
+ Y le han dicho, oiga, ¿qué va a cambiar usted el modelo?
97
+ ¿Eso qué va a transformar o en qué va a radicalizar
98
+ o en qué puede cambiar el modelo económico del país?
99
+ Yo creo que es muy importante que en esto haya total salida.
100
+ Nosotros seguimos la línea que ha planteado en esto durante los años de gobierno
101
+ tanto el presidente Petro como el Pacto Histórico.
102
+ Nosotros no estamos por acabar con el capitalismo en este estadio del desarrollo nacional.
103
+ Creemos que hay que hacer un capitalismo productivo
104
+ y eso significa que haya una redistribución efectivamente de la riqueza,
105
+ pero que esa redistribución sirva a la prosperidad de la sociedad.
106
+ Es decir, nosotros creemos que es necesario superar la idea
107
+ de que acabar con la pobreza es casi equivalente a hacerle un daño a la riqueza
108
+ que hay en ciertos sectores de la sociedad.
109
+ No, yo creo que se puede conciliar la prosperidad de todos los sectores
110
+ y para eso hay todos los recursos, toda la potencialidad de un país como Colombia.
111
+ Colombia no es un país que tenga problemas como otros en materia de una riqueza natural,
112
+ de una biodiversidad, de una geografía, de unas capacidades humanas también
113
+ que le permitan convertirse en lo que hemos querido nosotros,
114
+ una potencia mundial agroalimentaria.
115
+ Ese es el planteamiento.
116
+ Y ese planteamiento en estos años ha mostrado ser un planteamiento correcto.
117
+ No porque sea una discusión ideológica,
118
+ sino porque hay cifras que lo muestran de una manera bastante concluyente.
119
+ Pero la tensión que se ha generado entre el gobierno actual y el sector privado dice otra cosa,
120
+ doctor Iván, y se lo digo porque el presidente ha decidido
121
+ dividir al país en buenos y malos, en ricos y pobres,
122
+ y en que hay que quitarles a los ricos para darles a los pobres.
123
+ ¿Usted va a continuar con ese planteamiento?
124
+ No, yo no creo que ese sea el planteamiento que ha hecho el presidente
125
+ y la demostración más palmaria de esa afirmación es que las empresas,
126
+ las grandes empresas del país han tenido ganancias muy importantes.
127
+ Eso es otra cosa, pero que lo ha dicho, lo ha dicho.
128
+ O sea que la política no ha sido acabar con la empresa privada.
129
+ Ha habido una discusión muy intensa, ha habido intentos de un acuerdo nacional,
130
+ ha habido incluso pactos que han tenido éxito.
131
+ Yo le menciono uno de ellos porque tuve que ver con él.
132
+ La venta de tierras por parte de FEDEGAN al Estado colombiano
133
+ para ser entregadas al campesinado.
134
+ O sea que sí ha habido posibilidades de un diálogo.
135
+ En otros campos no.
136
+ Entonces ahí hay un reto.
137
+ La invitación que yo hago es a que desarrollemos un diálogo honesto,
138
+ serio, leal, para que podamos lograr la prosperidad del país
139
+ y seguir desarrollando lo que ya hemos avanzado en esa materia.
140
+ En ese sentido y para profundizar esas reformas y esas políticas sociales,
141
+ pues está al frente de una realidad fiscal.
142
+ Y aquí hay una preocupación sobre si el crecimiento que se está planteando
143
+ de algo más del 2.8 para Colombia en las últimas cifras
144
+ puede ser sostenible para lo que viene.
145
+ Y si el nuevo gobierno, que si usted es elegido presidente,
146
+ tendrá que enfrentar es esa realidad fiscal.
147
+ Una deuda enorme, un gasto público que tendría que reducirse
148
+ o un aumento de impuestos.
149
+ Usted en esa fórmula, ¿cómo se plantea?
150
+ Hay otra vía además de la cual voy a hablar ahora.
151
+ Pero bueno, primero el origen del deuda.
152
+ Aquí hay una responsabilidad del gobierno, por supuesto,
153
+ pero hay una responsabilidad acumulada.
154
+ Y eso me parece importante decirlo.
155
+ Pero bueno, es el problema y vamos a tener que abocarlo.
156
+ Pero por supuesto es un problema muy serio.
157
+ Existen fórmulas.
158
+ Yo tengo una que creo que es importante desarrollar con todo,
159
+ la energía y el entusiasmo,
160
+ y es la lucha contra la corrupción y el despilfarro en el Estado.
161
+ Usted habla de una macro corrupción.
162
+ Sí, exactamente.
163
+ Y de tener un abordaje desde lo macro y no necesariamente...
164
+ Yo lo que creo, y en eso me distancio un poco de colegas,
165
+ candidatos y candidatas que he visto en estos espacios mediáticos,
166
+ es que no basta con un discurso genérico contra la corrupción
167
+ y la indignación que a todos nos produce y la condena,
168
+ en fin, toda esa demagogia que hemos escuchado en muchos planteamientos.
169
+ Aquí es necesaria una política muy seria y estructurada,
170
+ y en mi caso tiene tres nuevos énfasis.
171
+ Lo primero es que no es una lucha contra la corrupción menor.
172
+ Vamos a hacer una lucha de sistema contra la corrupción.
173
+ ¿Y eso qué significa?
174
+ Vamos a tomar los casos, los macro casos de corrupción.
175
+ Y eso no simplemente para hacer de eso una crónica.
176
+ Vamos a ir por los responsables de esos hechos.
177
+ A través de mecanismos de investigación que no se han aplicado.
178
+ Es decir, a la macro corrupción no se le puede aplicar el tipo penal
179
+ o de investigación penal que se hace con pequeños casos
180
+ o casos individuales de corrupción.
181
+ Hay que hacer investigación criminal de sistema.
182
+ Pero en segundo lugar, vamos a ir caso por caso.
183
+ No, no se trata simplemente de hacer una lucha genérica.
184
+ Obviamente hay que tener mecanismos preventivos
185
+ de un sistema que prevenga la corrupción,
186
+ pero vamos a tomar casos particulares.
187
+ Y aquí, por ejemplo, menciono el siguiente.
188
+ ¿Cómo es posible que los territorios del país
189
+ que tienen mayor cantidad de recursos por regalías sean los más pobres?
190
+ ¿Quién explica eso?
191
+ Hace unos días estuve hablando con alguien que me decía
192
+ si aquí los recursos de las regalías se hubieran invertido,
193
+ las regalías estarían adoquinadas con lingotes de 18 kilates de oro.
194
+ Y es un pueblo que no tiene agua potable,
195
+ o una población que no tiene agua potable.
196
+ ¿En la Guajira dónde quedaba eso?
197
+ En Cesar, en este caso.
198
+ Entonces, ¿cómo es posible que se hayan robado de esa forma,
199
+ o por lo menos en una gran proporción desviado los recursos de las regalías?
200
+ En el 90 teníamos como ejemplo Arauca,
201
+ que eran los grandes, ¿se acuerdan?
202
+ El velódromo.
203
+ Los grandes elefantes blancos de obras que quedaban allí.
204
+ Entonces vamos caso por caso.
205
+ Y el tercero es que no va a ser una lucha solitaria del gobierno.
206
+ Yo voy a invitar a la ciudadanía a que hagamos,
207
+ digamos, un frente común contra la corrupción.
208
+ Y eso implica una rebelión de la ciudadanía.
209
+ ¿Pero un tema cultural de la ciudadanía?
210
+ Es decir, que no participe tampoco en este caso de las elecciones,
211
+ no quiero desviar de su idea,
212
+ pero tiene que ver mucho, por ejemplo, con la compra de votos, etc.
213
+ O sea, la corrupción pareciera que además de los sistemas
214
+ que han permitido quedarse y apropiarse con recursos públicos,
215
+ tienen que ver con la manera en la que los colombianos
216
+ también hemos aceptado el transcurrir, digamos, de esa corrupción.
217
+ Eso es lo que nosotros en nuestro programa hemos llamado
218
+ la postración moral, que debe ser objeto de una revolución ética en el país.
219
+ Es decir, es un problema de conciencia y de cultura y de educación.
220
+ Y también pasa por otra cosa.
221
+ Usted decía, mire, a cosas que ha hecho el actual gobierno,
222
+ lo anoté aquí, hay que hacer cambios profundos y serios.
223
+ ¿Eso implica este tema de la corrupción?
224
+ Se lo pregunto por los escándalos espantosos de la unidad de gestión de riesgo,
225
+ ministros presos, el FOMAG.
226
+ Yo en un discurso dije que los olmedos no serían tolerados.
227
+ ¿Cómo hace usted para que no entren olmedos a su gobierno?
228
+ No, es decir, no voy a hacer demagogia.
229
+ Precisamente porque he dicho que no hay que hacer...
230
+ Pero déjame plantearle la pregunta al revés.
231
+ ¿Cómo va a hacer en este plan de macro contra la macrocorrupción,
232
+ qué mecanismos va a establecer, qué alarmas va a establecer
233
+ para que no entren olmedos?
234
+ Y aquí no le vamos a meter ideología,
235
+ porque hay gente del proyecto político del presidente Petro
236
+ que terminó untada hasta las narices.
237
+ Ha ocurrido y evidentemente el presidente lo ha reconocido
238
+ y ha sido en eso absolutamente claro y drástico.
239
+ Pero evidentemente el problema de la corrupción en Colombia es que es un sistema.
240
+ Es decir, no es que haya casos, no es que se presenten situaciones
241
+ en las que se desvía la función pública y se convierte esto en un lucro personal.
242
+ Es que es un sistema al interior del Estado.
243
+ Es una empresa.
244
+ Es decir, hay instituciones en las cuales se van heredando no las políticas públicas,
245
+ sino las formas de esquilmar y de saquear el presupuesto.
246
+ Entonces, no voy a hacer en esto promesas demagógicas.
247
+ Es muy posible o altamente probable que se presenten casos de corrupción
248
+ en un gobierno que yo presida.
249
+ Pero lo que no voy a tolerar es que eso ocurra sin que haya una reacción,
250
+ una prevención y una acción decidida para que eso sea castigado y reprimido.
251
+ Ahora, para eso he pensado, y ahí está el planteamiento en un sistema
252
+ que va a funcionar o debe funcionar para combatir la macrocorrupción,
253
+ que tiene niveles de prevención, tiene niveles de actuación
254
+ y tiene niveles de castigo y sanción.
255
+ Tiene que contar usted con la justicia para esto.
256
+ De hecho, la justicia tendría que participar también de ese sistema.
257
+ ¿Tendría que tener cambios también?
258
+ Porque hemos visto también que muchas partes, muchos procesos también,
259
+ en su impunidad, entre comillas, y en el aplazamiento de las decisiones,
260
+ hacen parte de la macrocorrupción.
261
+ María Alejandra, ¿qué tal, doctor Iván, qué tal este señor Matos
262
+ y que sale caminando semejante escándalo de corrupción
263
+ y ofreció un preacuerdo con la fiscalía?
264
+ Era una moto y una camioneta.
265
+ Y lo peor es que la fiscalía le parecía buenísimo.
266
+ Pero aquí el problema primero es cómo se investiga esto.
267
+ No puede seguir siendo investigado caso por caso.
268
+ Aquí hay que desarrollar lo que se llama la investigación de sistema.
269
+ Es decir, hay que crear o desarrollar,
270
+ cuando ya hay en la fiscalía unidades para esto,
271
+ una forma de investigar y reprimir esos delitos que corresponda a su naturaleza.
272
+ Y ¿hay normatividad suficiente para esto?
273
+ Y se lo pregunto porque usted también habla,
274
+ y voy a enlazar las dos cosas, de una asamblea nacional constituyente.
275
+ Y a veces, cuando se plantea esa idea,
276
+ inicialmente los defensores de la constitución del 91
277
+ y el plano político que se está discutiendo este tema es,
278
+ no, se pega bien una constituyente para cambiarlo todo.
279
+ En este tema de la normatividad, digamos, del cuerpo de leyes de Colombia,
280
+ para, por ejemplo, lograr esos cambios de sistema,
281
+ ¿son con lo que tenemos o para qué sería la constituyente?
282
+ Yo creo que es perfectamente posible hacer esos cambios
283
+ sin necesidad de grandes cambios normativos.
284
+ Ahora, otra cosa es que en Colombia se requiere una reforma a la justicia,
285
+ pero no depende una cosa de otra.
286
+ Yo creo que existen instrumentos suficientes
287
+ para hacer una lucha contra la corrupción mucho más profunda y clara con lo que ya hay.
288
+ Ahora, sobre la asamblea constituyente he sido muy claro en el planteamiento.
289
+ Yo creo que efectivamente puede ser un escenario,
290
+ pero siempre y cuando haya un proceso de concertación y de acuerdo nacional.
291
+ Yo creo que hay que dar ese paso,
292
+ hay que intentar llegar a un acuerdo sobre los problemas esenciales.
293
+ ¿Cuáles son esos problemas?
294
+ Aquí ya hemos hablado de dos,
295
+ la corrupción y los cambios en materia de política social.
296
+ Si hay una concertación sobre esos temas,
297
+ si hay un mecanismo mediante el cual podamos hacerlos viables
298
+ desde el punto de vista normativo y constitucional,
299
+ lo podemos pactar y esa puede ser una asamblea constituyente.
300
+ El otro gran pilar de estos temas que son,
301
+ doctor Iván Cepeda,
302
+ que el país plantea a los colombianos es el de la seguridad.
303
+ Y ahí usted lo mencionaba,
304
+ es el otro gran tema del que sus detractores hoy
305
+ le recuerdan todo el tiempo aquí y en todo lado.
306
+ Usted es el gran responsable porque usted fue,
307
+ dicen, el arquitecto de la paz total.
308
+ Estaba viendo aquí la ley 2272 del 2022,
309
+ que facultaba al gobierno para hacer esa estrategia,
310
+ sacar adelante.
311
+ ¿Qué tan responsable se siente usted políticamente del desastre
312
+ del orden público que está hoy el país?
313
+ No, yo me siento orgulloso de haber trabajado por la paz en Colombia.
314
+ Yo he tenido intervención en buena parte de los procesos de paz
315
+ que se han dado.
316
+ Unos han tenido éxito,
317
+ como es el acuerdo de paz que se firmó en 2016.
318
+ En ese acuerdo tuve un papel en buena parte discreto,
319
+ de un trabajo de facilitación,
320
+ pero he trabajado en otros procesos.
321
+ Algunos no han fructificado por diversas razones.
322
+ Pero yo creo que trabajar por la paz,
323
+ lo dice la Constitución,
324
+ no es solamente un derecho de los colombianos,
325
+ es un deber.
326
+ Y como tal no puede ser criminalizado.
327
+ La explicación de que por la política de paz hay violencia,
328
+ es una explicación que a mi modo de ver es absolutamente deleznable,
329
+ superficial y absolutamente retrógrada.
330
+ Pero me da pena.
331
+ Es decir, ¿para usted esta paz total funcionó?
332
+ No, podemos discutir sobre los resultados en materia de paz,
333
+ pero ahora me parece que es importante que discutamos
334
+ si es la política de paz la causa de la violencia.
335
+ Y lo que yo diría es lo siguiente,
336
+ los grupos armados en Colombia
337
+ funcionan hoy sobre la base de economías ilícitas que son bollantes,
338
+ que tienen un desarrollo global, no solamente en Colombia.
339
+ El problema de las redes del narcotráfico no es un problema colombiano,
340
+ es un problema que va desde Alaska hasta la Patagonia.
341
+ Hoy en día hay redes criminales en todos los países latinoamericanos
342
+ y el problema de las drogas, para no hablar de otros,
343
+ se ha convertido en un problema transnacional, evidentemente.
344
+ Así que ahí hay un problema.
345
+ No digo que en Colombia nos debamos simplemente justificar
346
+ con que el problema es transnacional.
347
+ No, ahí hay un problema que debemos abocar.
348
+ Pero también está el problema de la minería ilegal del oro,
349
+ que es tan grave o más grave que el problema del narcotráfico.
350
+ Entonces es allí donde está el problema, no en la política de paz.
351
+ Podemos discutir la política de paz, podemos discutir sus resultados,
352
+ claro que sí.
353
+ Y perdóname, lo interrumpo, María Alejandra, para renunciar a este tema.
354
+ Es que quienes saben del tema,
355
+ y no solamente los candidatos presidenciales que le atacan a usted,
356
+ sus detractores, sino gente que sabe, dice,
357
+ mire, esta política de paz del actual gobierno
358
+ lo que hizo fue facilitarles a estos grupos
359
+ todos esos fenómenos que usted dice, estoy de acuerdo con usted,
360
+ el narcotráfico es transversal, nos atraviesa a todos en este continente.
361
+ Pero el asunto es que esta política de paz
362
+ le facilitó mucho la vida a esos grupos.
363
+ Podemos discutir en qué casos,
364
+ porque me parece que esas generalizaciones no ayudan.
365
+ No, pues se los tengo en Catatumbo.
366
+ Puede ser que en algunos casos puntualmente.
367
+ 23 mil hombres más.
368
+ Pero yo le voy a decir algo, Juan Roberto.
369
+ Este gobierno ha incautado 3 mil toneladas de cocaína.
370
+ Claro, ahora vienen la oposición y nuestros contradictores a decirnos
371
+ que eso es porque hay más comercio y porque hay más tráfico ilícito.
372
+ No, pero son 3 mil toneladas.
373
+ Es una cifra absolutamente inusitada
374
+ y que ha implicado una labor enorme
375
+ que hay que reconocerle a las fuerzas militares y de policía.
376
+ Este es un esfuerzo que incluso ha sido reconocido internacionalmente.
377
+ Entonces no se puede decir que la política de paz,
378
+ eso me parece que es una afirmación falaz,
379
+ ató de manos a la fuerza pública.
380
+ Este gobierno ha tenido una acción clara,
381
+ represora de los grupos armados
382
+ y ha hecho incluso acciones militares que no han hecho otros gobiernos,
383
+ como la que se ha hecho, por ejemplo, en el Cañón del Micay,
384
+ un sitio que era un santuario de las organizaciones criminales.
385
+ Entonces, evidentemente aquí podemos discutir,
386
+ podemos hablar de cómo diseñar una política de paz,
387
+ pero la conclusión no puede ser de ninguna manera
388
+ que buscar la paz es inmediatamente sinónimo
389
+ o que es equivalente a promover a los grupos armados y a la criminalidad,
390
+ como lo he escuchado, no digo que aquí se esté planteando así el argumento,
391
+ pero sí se lo he escuchado a los detractores de la política del gobierno.
392
+ Miremos entonces cuál sería la política de seguridad
393
+ y luego hablaremos de una comunicación que usted le acaba de hacer
394
+ a las fuerzas militares, tal vez en otro tipo de área
395
+ que es las condiciones para el cuerpo.
396
+ Pero creo que es íntimamente.
397
+ Claro, que está íntimamente ligado,
398
+ pero en una política de seguridad, de control territorial,
399
+ de llegar allí donde esas fuerzas criminales
400
+ han crecido y han establecido un contacto con la población
401
+ que muchas veces confunde en el hecho de asumir casi que funciones de Estado,
402
+ proveyendo además bienes y servicios en esas poblaciones
403
+ que es el reemplazo total del Estado.
404
+ ¿Cuál es el planteamiento?
405
+ El planteamiento aquí es que la política de seguridad
406
+ no es una política aislada ni es una política hegemónica,
407
+ es una política que se integra al conjunto de la política del Estado
408
+ y yo creo que hay que tener una política de seguridad fuerte,
409
+ pero tiene que ser una política que actúe en una armonía
410
+ y en una articulación plena con otras políticas.
411
+ Digamos, ¿dónde está el problema aquí?
412
+ Bueno, uno podría decir que en todo el país,
413
+ pero fundamentalmente hay cinco o seis territorios
414
+ donde se concentra el problema.
415
+ Esos territorios hay que desarrollarlos,
416
+ ahí hay que desarrollar un tipo de economía distinta.
417
+ Si no lo logramos,
418
+ podrá haber la política de intervención militar más poderosa del planeta.
419
+ Hemos estado 70 años en esa historia.
420
+ Entonces, la política de seguridad es parte de una política integral del Estado,
421
+ para lo que se ha intentado en otros momentos,
422
+ pero que hay que avanzar en ello,
423
+ la presencia integral del Estado en el territorio
424
+ para poder cambiar las condiciones del conflicto armado y de la violencia,
425
+ también en los territorios urbanos, por supuesto.
426
+ Esto no es solamente con relación a los territorios rurales.
427
+ Ese es un asunto claro,
428
+ por lo tanto mi política de seguridad no es una política
429
+ que esté exclusivamente centrada en cómo vamos a fortalecer
430
+ las capacidades militares y de inteligencia del Estado.
431
+ Eso tendrá que hacerse, por supuesto,
432
+ pero fundamentalmente es de transformación de los territorios
433
+ y de ataque de las causas de la violencia,
434
+ entre las cuales la pobreza y la desigualdad social
435
+ en las zonas rurales y en las zonas marginales urbanas es fundamental.
436
+ Doctor Iván,
437
+ ¿Usted ya ha pensado quién va a manejar el tema de seguridad en su eventual gobierno?
438
+ No puedo dar nombres,
439
+ pero sí será alguien que tenga tanto la experiencia como la capacidad
440
+ como el experticio necesario para poder desarrollar una tarea de tal responsabilidad.
441
+ Ahora tiene que ser una persona también
442
+ con la cual compartamos una visión de la seguridad.
443
+ No, es que me quedo pensando una cosa,
444
+ porque además vienen dos elementos claves también ahí,
445
+ que son lo que está pasando en Venezuela, doctor Iván,
446
+ y lo que pasó en la reunión del presidente Petro con el presidente Trump en la Casa Blanca,
447
+ que tienen que estar o están íntimamente ligados con la seguridad en Colombia.
448
+ Usted en un eventual gobierno suyo,
449
+ ¿cómo recoge eso que hereda de esta fase final del gobierno Petro?
450
+ Yo creo que una de las zonas precisamente que hay que prestarle atención en su transformación
451
+ son las zonas fronterizas,
452
+ tanto la de Venezuela como la de Ecuador,
453
+ porque allí hay una concentración precisamente de factores
454
+ que han estimulado la violencia del lado y lado de la frontera.
455
+ Bueno, en Venezuela está el ELN y otros grupos armados,
456
+ y aquí en Colombia tenemos al tren de Aragua.
457
+ Eso implica una política que debe tener un componente, por supuesto,
458
+ de cooperación y de trabajo conjunto de las fuerzas militares y de policía,
459
+ y de inteligencia de ambos países,
460
+ pero también implica una política de transformación del territorio,
461
+ e implica una cooperación económica,
462
+ e implica además lo que ha hecho de manera acertada este gobierno,
463
+ estimular el comercio, el intercambio entre los países.
464
+ La política de cerrar fronteras bajo el gobierno anterior, el gobierno Duque, fue un fracaso.
465
+ No solamente no terminó cumpliendo un propósito que había anunciado ese gobierno,
466
+ que era debilitar o intentar debilitar el gobierno venezolano,
467
+ sino que además arruinó a los comerciantes en la frontera.
468
+ Así que hay que desarrollar una política diplomática, comercial, de intercambio,
469
+ y que también tiene un carácter de cooperación militar
470
+ que permita que la zona de frontera se desarrolle y pueda resolver el problema que tiene hoy.
471
+ El asunto energético ha sido protagonista en este gobierno.
472
+ Desde el comienzo el presidente Petro no solamente habló de la transición energética,
473
+ sino que además puso el tema del cambio climático y del asunto ambiental en el centro de ese debate.
474
+ ¿Cuál es su mirada frente a los retos que hoy hay un sindicato como la USO
475
+ diciendo que hay que seguir explotando y explorando?
476
+ Y bueno, ya hablaremos de política, ya que mencionó la USO, pero por ahora hablemos del tema...
477
+ El tiempo muerde.
478
+ Ya entramos ahí, pero rápidamente el tema energético,
479
+ que también es muy importante alrededor de los recursos naturales de Colombia
480
+ y su explotación y su política, digamos, de recursos que pueden venir de ahí.
481
+ La política de nuestro gobierno tendrá el énfasis de la protección de la riqueza natural,
482
+ de la biodiversidad, de la amazonía, de nuestro país.
483
+ Es un deber no solamente con nuestro país y nuestra población, sino con el mundo.
484
+ Nosotros somos guardianes de una riqueza que es planetaria.
485
+ Ahora bien, esa política debe ser compatible con el desarrollo,
486
+ no solamente de la transición energética, sino también de la explotación de ciertos recursos,
487
+ con unos ciertos parámetros, con unos ciertos controles,
488
+ con unas licencias ambientales que permitan realmente que no se le cause un daño irreparable al país.
489
+ Pero no se cierre usted a nuevos...
490
+ No habrá fracking, eso sí lo digo claramente.
491
+ Fracking no. Está demostrado el daño que le hace el fracking a la naturaleza,
492
+ a los territorios, al subsuelo, a la riqueza hídrica, así que no.
493
+ Pero yo tuve ya una conversación con el gremio de la explotación del petróleo y del gas
494
+ y ha abierto ese diálogo la posibilidad de un intercambio que nos permita examinar fórmulas.
495
+ Antes de entrar a política, es que tanto tema.
496
+ Usted habla de cambios profundos de lo que ha pasado en este gobierno y de su programa,
497
+ porque es lo importante.
498
+ El tema de la salud, que es el otro gran tema, el otro gran lunar,
499
+ como fue que dijo María Alejandra, la otra gran sombra.
500
+ Usted dirá, puede tener matices, pero lo que está pasando con el sistema de salud,
501
+ pues ya todos lo hemos visto.
502
+ Sí, una desgracia anunciada.
503
+ ¿Qué va a ser? ¿Qué tiene planteado usted en su propuesta?
504
+ Nosotros hemos hecho un planteamiento de reforma a la salud.
505
+ Nosotros creemos que el sistema debe cambiar,
506
+ el sistema en cuanto a cómo se administran los recursos financieros de la salud.
507
+ Es necesario crear un sistema que hemos dicho es mixto,
508
+ en el cual las empresas prestadoras de salud que aún quedan tengan una participación,
509
+ pero el control está en cabeza efectivamente de un sistema que permita que no se repita la historia.
510
+ ¿Cuál es la historia?
511
+ Con este desastre de intervención del Estado.
512
+ Sí, hay que hacer un tránsito evidentemente, hay que generar un plan de choques,
513
+ en eso estoy de acuerdo.
514
+ Pero hay que examinar lo que ha ocurrido.
515
+ Y lo que ha ocurrido, para no decirlo de manera eufemística,
516
+ es uno de los mayores robos que ha habido en Colombia.
517
+ El presidente Petro dijo que los que intervinieron vinieron a hacer business.
518
+ No, pero absolutamente.
519
+ Y desde el caso de corrupción, uno de los casos de corrupción mayor en Colombia.
520
+ El saqueo de billones de pesos.
521
+ Es más, yo diría que ese caso merecería una comisión de la verdad.
522
+ Es decir, si queremos examinar el asunto a fondo,
523
+ deberíamos crear una comisión que esclarezca cómo fueron esquilmados,
524
+ objeto de un saqueo absoluto, los dineros de la salud en Colombia.
525
+ Pero bueno, digamos que ese puede ser un camino que hay que examinar
526
+ para entender bien de qué estamos hablando.
527
+ Pero ahora, los millones de pacientes que esperan soluciones,
528
+ no pueden esperar a una comisión de la verdad, por supuesto.
529
+ O sea, otro diagnóstico, sí.
530
+ No, claro.
531
+ Esa es una situación que requiere un tratamiento urgente,
532
+ y evidentemente para eso es necesario un plan de choque.
533
+ Pero también es necesario la reforma, y la reforma requiere una concertación.
534
+ Por lo menos el intento de una concertación que yo espero se pueda dar.
535
+ ¿El plan de choque arrancaría por los medicamentos?
536
+ ¿Qué es lo que hoy es el dolor más grande?
537
+ Ese es uno de los temas, evidentemente.
538
+ La atención, los medicamentos.
539
+ Digamos, ¿qué hacemos en este momento con parte de la red,
540
+ de las instituciones que prestan la salud que está en una situación supremamente grave?
541
+ La situación de los trabajadores, lo que se llama el recurso humano en salud.
542
+ En fin, todos esos asuntos deben ser objeto de un tratamiento inmediato.
543
+ No puede ser una situación diferente.
544
+ Doctor Iván, ¿qué hace con la nueva EPS?
545
+ Esa es una situación que tenemos que examinar, evidentemente.
546
+ Ahí hay problemas.
547
+ A mí me gustaría, sobre la base de un examen muy claro y un diagnóstico preciso,
548
+ diagnosticar cuáles van a ser las medidas concretas a tomar ahí.
549
+ Bueno, hablemos de política,
550
+ de cómo está surgiendo todo este debate interno en el pacto histórico,
551
+ en sectores del progresismo,
552
+ que están viendo por un lado la campaña hacia el 8 de marzo
553
+ del Frente por la Vida, de esta consulta que se ha creado,
554
+ pero por el otro lado esa mirada de vámonos solos a la primera vuelta.
555
+ Voy a comenzar por el momento del Consejo Nacional Electoral.
556
+ Usted dijo, yo me voy a primera vuelta,
557
+ ¿porque ya se veía que venía lo del Consejo Nacional Electoral?
558
+ ¿O porque ya veía muy complicado un litigio que podría entrar ahí?
559
+ Porque hubo una decisión.
560
+ Esa decisión fue muy clara y categórica.
561
+ Y porque nosotros no nos hacemos ilusiones con el Consejo Nacional Electoral,
562
+ que es un organismo totalmente parcializado.
563
+ Bueno, parcializado en su composición mayoritaria.
564
+ Hemos sido víctimas de un tratamiento absolutamente arbitrario
565
+ de la violación de nuestros derechos políticos.
566
+ Lo que ocurrió en el Consejo Nacional Electoral
567
+ es la violación de los derechos políticos de la fuerza mayoritaria hoy en Colombia.
568
+ Nosotros somos el partido o el movimiento político
569
+ que tiene mayor influencia en el país.
570
+ Y se nos fue simplemente arrebatado el derecho
571
+ de participar en una consulta interpartidista.
572
+ ¿Por quiénes?
573
+ Por personas que además estaban prevaricando.
574
+ No es cierto que nosotros no hayamos interpuesto recursos.
575
+ Yo he denunciado penalmente a dos de las personas que tomaron esa decisión
576
+ porque están abiertamente o estuvieron abiertamente prevaricando.
577
+ El señor Prada y el señor Holman Ibáñez.
578
+ Así que desde ese punto de vista las cosas están claras.
579
+ Se nos negó el derecho a la participación.
580
+ En esa circunstancia no tenemos otra salida que ir directamente a primera vuelta
581
+ y así lo hemos dicho.
582
+ Y nuestra consulta es la votación de nuestras listas al Senado y la Cámara
583
+ que es la única participación que tendremos el 8 de marzo.
584
+ ¿Qué pasa el 8 de marzo a las 6 de la tarde o el 9?
585
+ Si quiere a las 7 de la mañana.
586
+ Si la consulta de Roy Barreras de este frente tiene una votación importante
587
+ ¿En qué cambia para ustedes en la campaña y digamos en ese sector del país
588
+ de izquierda y centro izquierda?
589
+ Nuestro curso está definido.
590
+ Nosotros vamos a primera vuelta.
591
+ Somos una fuerza que tiene una presencia muy importante en el país.
592
+ Yo he sido hasta ahora el candidato que tiene los mejores registros en las encuestas.
593
+ Somos una fuerza indiscutible.
594
+ Ahora, eso no quiere decir que no hagamos un diálogo.
595
+ Lo venimos haciendo con muchos sectores.
596
+ Tenemos importantes discusiones y diálogos que van llegando a acuerdos
597
+ con fuerzas muy diversas.
598
+ Así que vamos a presentar una opción bastante amplia y diversa.
599
+ Es decir, ¿tendremos Roy Barreras para rato?
600
+ Ah, no.
601
+ Roy es un político que ha tenido...
602
+ He compartido con él mucho en política durante todo este tiempo.
603
+ Respeto mucho sus opciones.
604
+ Algunas no las comparto, evidentemente, pero como en todo, yo opto por los argumentos,
605
+ por la deliberación y no por los insultos ni por zancadillas en política.
606
+ Está ya barajando, por supuesto, como todos los candidatos,
607
+ por la cercanía de la fecha de la inscripción, que es hasta el 13 de marzo,
608
+ los nombres de vicepresidentes, vicepresidentas.
609
+ ¿Cómo va eso?
610
+ Es uno de los secretos mejor guardados.
611
+ De todos los candidatos.
612
+ Pero me parece interesante, ¿qué consigue usted como esa figura?
613
+ ¿Es una figura complementaria al candidato?
614
+ Si comienzo a dar datos, obviamente, ya estaría...
615
+ Vamos llegando a la pista.
616
+ Venga, doctor Iván, el tiempo nos vuelve.
617
+ Varias preguntas.
618
+ ¿Va a ir a debates?
619
+ Sí, claro.
620
+ Yo debato profesionalmente.
621
+ Yo llevo 15 años en el Congreso.
622
+ He hecho debates, lo digo sin falsas modestias,
623
+ que han tenido un impacto en el país.
624
+ Menciono simplemente uno.
625
+ En septiembre de 2014 hice un debate al expresidente Álvaro Uribe,
626
+ senador en ese momento, que él rebulló, hay que decirlo.
627
+ Así que lo mío no es eludir debates.
628
+ Lo que sí pido es que haya unas reglas muy claras.
629
+ Yo no me voy a prestar a insultos.
630
+ Ese es lo dasal que se ha vuelto la política.
631
+ Lo he dicho claramente.
632
+ Debates con reglas claras.
633
+ Y vamos a debatir sobre argumentos, propuestas y programas.
634
+ No sobre calumnias, insultos, groserías.
635
+ Eso no me interesa.
636
+ Hay una perspectiva, digamos, de participación.
637
+ ¿Usted cree que los colombianos hoy están motivados en este proceso electoral?
638
+ Usted está viendo que este...
639
+ Porque no quiero meter el concepto de transición,
640
+ pero sí pareciera que estamos en un momento después de este primer gobierno de izquierda
641
+ frente a unas primeras elecciones que han traído, por supuesto, este clima.
642
+ ¿Usted cree que eso va a motivar a la gente a salir a votar
643
+ o que por el contrario de pronto la gente va a tomar distancia de este proceso electoral?
644
+ Lo que he visto en mis recorridos ya extensos por el país
645
+ es un clima muy favorable
646
+ y un entusiasmo de participación social, popular, ciudadana en la política.
647
+ Y eso me alegra constatarlo, por ejemplo, en la juventud,
648
+ que a pesar del escepticismo que le ha generado la corrupción,
649
+ tiene hoy una gran expectativa y esperanza.
650
+ Parte de lo que somos hoy como pacto histórico es que representamos precisamente eso,
651
+ una nueva conciencia sobre los derechos,
652
+ sobre reclamarlos y sobre exigirlos, si es necesario, con la movilización pacífica,
653
+ pero utilizando los medios para que los derechos de los ciudadanos se respeten.
654
+ Entonces, desde esa perspectiva sí, sí creo que va a haber una participación importante.
655
+ En un gobierno suyo, doctor Cepeda, eventualmente se divide el país, se fracciona,
656
+ quedamos en una profunda polarización.
657
+ ¿O usted cree que sí habrá disposición para tener puentes
658
+ y que se tejan todos estos puentes para poder tener un escenario de mayor convivencia?
659
+ Contrario a la imagen que intentan proyectar,
660
+ y yo creo que obviamente con el temor que les genera la posibilidad de un triunfo
661
+ por la fuerza que tenemos,
662
+ contrario a la imagen de división y de polarización
663
+ yo soy una persona que ha buscado siempre la concertación política.
664
+ Y he tejido relaciones con personas y con sectores políticos que se ha vaticinado,
665
+ era impensable que yo me sentara a discutir y a concertar.
666
+ Así que no tengo ningún problema, yo estaré dispuesto, lo he dicho desde el primer día,
667
+ no de mi posesión, de mi elección, a tejer esos diálogos como lo he venido haciendo ya.
668
+ ¿Ese diálogo incluiría al expresidente Alvaro Uribe?
669
+ Pues en determinadas circunstancias, yo lo he dicho siempre,
670
+ podemos dialogar con él y con el sector que representa.
671
+ ¿Usted va a respetar?
672
+ Lo cual no riñe obviamente con nuestros litigios judiciales.
673
+ Sí, es que ese es el problema, es que aquí usted es contradictor político y contraparte judicial.
674
+ ¿Confía en el sistema electoral?
675
+ No, yo más allá de decir y entregar cheques en blanco,
676
+ lo que digo es, obviamente nosotros acatamos las decisiones,
677
+ respetamos los procedimientos,
678
+ pero de ninguna manera compartimos que el sistema electoral no requiera un cambio profundo.
679
+ Nosotros creemos que el Consejo Nacional Electoral debe ser eliminado
680
+ y debe ser sustituido por una instancia imparcial
681
+ que permita realmente generar un juez neutral frente al proceso electoral.
682
+ Eso no lo es de ninguna manera hoy el Consejo Nacional.
683
+ Pero este aparato electoral es el que va a arbitrar y va a organizar estas elecciones.
684
+ Obviamente y para eso nosotros vamos a crear los controles necesarios.
685
+ Tenemos ya un dispositivo que nos va a permitir hacer una observación,
686
+ mesa por mesa, de nuestros resultados.
687
+ Testigos.
688
+ Testigos y tenemos también grupos de abogados que van a participar en el escrutinio.
689
+ Usted sabe que me deja preocupado, doctor Iván, porque dice que no entrega un cheque en blanco.
690
+ No, cheque en blanco en términos de decir que nosotros creemos ciegamente
691
+ y que elogiamos la manera en cómo actúa el sistema electoral hoy.
692
+ Pero usted está hablando del Consejo Nacional Electoral, pero de reglas estadounidenses.
693
+ Hemos sido víctimas de las arbitrariedades.
694
+ Nosotros obviamente respetamos al registrador, a sus decisiones,
695
+ pero sí le vamos a expresar como lo hemos venido haciendo cualquier clase de reparos
696
+ que tengamos frente a la manera en cómo se realiza el proceso.
697
+ Es nuestro legítimo derecho y lo vamos a ejercer.
698
+ Me deja una pregunta de sus detractores que dicen
699
+ el sistema electoral sirve si ganamos y si no, no sirve.
700
+ No, nosotros hemos reconocido las victorias y las derrotas.
701
+ El presidente Petro ha sido una persona profundamente respetuosa de la institucionalidad.
702
+ No, no creo.
703
+ Bueno, esa es una discusión, por supuesto.
704
+ Interesante, pero seguramente, y tiene razón María Alejandra,
705
+ hablamos de campaña, no del gobierno,
706
+ pero sí usted plantea ser el que continúa este proceso y este modelo de gobierno.
707
+ Pero, doctor Iván, el tiempo, mire, ya se nos fue.
708
+ Sí, yo quiero decir algo sobre ese particular.
709
+ Nosotros no somos simplemente convidados a la democracia.
710
+ Nosotros como fuerza política hemos construido también esta democracia.
711
+ Hemos participado en la Constitución del 91, en su elaboración.
712
+ Hemos participado en todos los procesos e instituciones democráticas.
713
+ Somos demócratas y como tal defendemos la democracia.
714
+ Ahora, eso no quiere decir de ninguna manera que cerremos los ojos
715
+ y que no podamos emitir opiniones críticas frente al sistema
716
+ y modificar utilizando los procedimientos que da el propio sistema para ello.
717
+ Muy bien.
718
+ Colombia está en un proceso electoral muy interesante, muy retador.
719
+ Son muchos desafíos.
720
+ Estamos, además, en un momento en el que las redes sociales,
721
+ en el que la información vertiginosa que le llega a los ciudadanos,
722
+ nos hace justamente ese trabajo periodístico mucho más riguroso,
723
+ mucho más exigente y aquí estamos, Juan Roberto,
724
+ en un camino de conocer y de escuchar a los candidatos
725
+ hacia la presidencia en este proceso del 2026.
726
+ Esa frase final suya es clave, María Alejandra.
727
+ Escucharlos y que la gente escuche sus propuestas
728
+ y pues ese es el espíritu de este espacio.
729
+ Cuando los diálogos son respetuosos y productivos como este son satisfactorios
730
+ y le agradezco este espacio.
731
+ Doctor Iván Cepeda, gracias por haber venido a Noticias Caracol
732
+ y lo esperamos en los debates, ¿no?
733
+ Dijo que venía en los debates.
734
+ Con reglas.
735
+ Ya vendrán.
736
+ Esa recta después de...
737
+ Que se preparen.
738
+ Esa recta larga, que será la recta final,
739
+ pero que todavía falta para el 31 de mayo,
740
+ la primera vuelta electoral.
741
+ Y por ahora, preparémonos para lo que viene,
742
+ que es el 8 de marzo,
743
+ esas elecciones legislativas en las que estamos haciendo mucho énfasis,
744
+ que es muy importante que los ciudadanos entiendan
745
+ la importancia de elegir el Poder Legislativo, Congreso y Senado,
746
+ Senado y Cámara, perdón, para el próximo 8 de marzo.
747
+ Es difícil votar, pero cada vez hay más pedagogía para eso.
748
+ Eso es importante, la pedagogía para que la gente entienda
749
+ de lo que se está jugando la democracia colombiana.
750
+ 7.52 minutos.
751
+ Nos vemos el lunes, ¿no?
752
+ Tenemos más entrevistas.
753
+ Tenemos más entrevistas, sí, señor.
754
+ 7.52 minutos.
755
+ Sigue la primera emisión de Noticias Caracol.
756
+ Aquí en el Congreso de la República
757
+ se debaten las leyes que rigen nuestra vida diaria.
758
+ Y justo al frente, en la Casa de Nariño,
759
+ el presidente de la República toma las decisiones
760
+ que marcan el rumbo del país.
761
+ Dos escenarios, un mismo propósito.
762
+ Construir el futuro de nuestra nación.
763
+ No se trata solo de elegir un nombre,
764
+ sino de reafirmar un compromiso con Colombia.
765
+ Es aquí donde la vida real transita.
766
+ Miles de historias, necesidades y falta de oportunidades
767
+ esperando respuestas.
768
+ Cada voto representa una historia,
769
+ cada decisión una expectativa de futuro.
770
+ Tan cerca de las elecciones,
771
+ los candidatos podrán ofrecer soluciones y no solo promesas,
772
+ especialmente cuando se presentan emergencias tan graves como esta.
773
+ Y en esta carrera electoral nosotros estaremos allí
774
+ contando la historia de una Colombia que decide,
775
+ que participa y que mira hacia adelante.
776
+ Se acerca el día en que el país hablará en las urnas.
777
+ El país que soñamos lo elegimos juntos.
778
+ Colombia decide 2026.
779
+ Noticias Caracol.
780
+ Primero la gente.
781
+ A esta hora en Noticias los problemas de movilidad
782
+ que se originan en la avenida calle 100
783
+ con avenida Suba sentido occidente oriente
784
+ por cuenta del volcamiento de un vehículo particular.
785
+ El accidente se presentó sobre las 5.30 de la mañana.
786
+ A esta hora es complicada la situación.
data/processed/ivan_cepeda/caracol/entrevista_metadata.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "candidate": "Ivan Cepeda",
3
+ "proposal_title": "Caracol",
4
+ "topic": "Entrevista",
5
+ "source_url": "https://www.youtube.com/live/keUBZq7rc2Y?si=VrV_IExxlbyFmOdE",
6
+ "source_file": "entrevista.txt",
7
+ "word_count": 7284,
8
+ "char_count": 42694,
9
+ "extraction_date": "2026-02-23T09:21:14.400316"
10
+ }
data/processed/ivan_cepeda/caracol/entrevista_timestamps.json ADDED
@@ -0,0 +1 @@
 
 
1
+ [{"offset": 0, "seconds": 0}, {"offset": 115, "seconds": 7}, {"offset": 240, "seconds": 16}, {"offset": 320, "seconds": 23}, {"offset": 417, "seconds": 29}, {"offset": 525, "seconds": 36}, {"offset": 568, "seconds": 39}, {"offset": 601, "seconds": 41}, {"offset": 630, "seconds": 44}, {"offset": 690, "seconds": 50}, {"offset": 796, "seconds": 57}, {"offset": 934, "seconds": 67}, {"offset": 981, "seconds": 70}, {"offset": 1064, "seconds": 74}, {"offset": 1133, "seconds": 78}, {"offset": 1207, "seconds": 82}, {"offset": 1232, "seconds": 84}, {"offset": 1259, "seconds": 85}, {"offset": 1279, "seconds": 87}, {"offset": 1363, "seconds": 91}, {"offset": 1460, "seconds": 100}, {"offset": 1522, "seconds": 105}, {"offset": 1609, "seconds": 112}, {"offset": 1697, "seconds": 118}, {"offset": 1773, "seconds": 123}, {"offset": 1852, "seconds": 128}, {"offset": 1891, "seconds": 131}, {"offset": 1921, "seconds": 133}, {"offset": 2002, "seconds": 139}, {"offset": 2025, "seconds": 141}, {"offset": 2081, "seconds": 144}, {"offset": 2139, "seconds": 148}, {"offset": 2215, "seconds": 154}, {"offset": 2287, "seconds": 160}, {"offset": 2369, "seconds": 164}, {"offset": 2416, "seconds": 167}, {"offset": 2493, "seconds": 174}, {"offset": 2520, "seconds": 176}, {"offset": 2593, "seconds": 182}, {"offset": 2632, "seconds": 185}, {"offset": 2691, "seconds": 190}, {"offset": 2727, "seconds": 192}, {"offset": 2794, "seconds": 198}, {"offset": 2814, "seconds": 200}, {"offset": 2860, "seconds": 204}, {"offset": 2924, "seconds": 209}, {"offset": 2963, "seconds": 212}, {"offset": 3021, "seconds": 215}, {"offset": 3031, "seconds": 216}, {"offset": 3100, "seconds": 220}, {"offset": 3182, "seconds": 224}, {"offset": 3267, "seconds": 232}, {"offset": 3308, "seconds": 235}, {"offset": 3381, "seconds": 240}, {"offset": 3450, "seconds": 245}, {"offset": 3479, "seconds": 247}, {"offset": 3558, "seconds": 252}, {"offset": 3578, "seconds": 254}, {"offset": 3621, "seconds": 258}, {"offset": 3686, "seconds": 263}, {"offset": 3756, "seconds": 268}, {"offset": 3788, "seconds": 270}, {"offset": 3801, "seconds": 271}, {"offset": 3873, "seconds": 274}, {"offset": 3956, "seconds": 279}, {"offset": 3977, "seconds": 280}, {"offset": 4030, "seconds": 283}, {"offset": 4104, "seconds": 287}, {"offset": 4182, "seconds": 292}, {"offset": 4226, "seconds": 295}, {"offset": 4288, "seconds": 301}, {"offset": 4340, "seconds": 304}, {"offset": 4437, "seconds": 311}, {"offset": 4517, "seconds": 317}, {"offset": 4565, "seconds": 320}, {"offset": 4657, "seconds": 326}, {"offset": 4723, "seconds": 330}, {"offset": 4810, "seconds": 335}, {"offset": 4852, "seconds": 338}, {"offset": 4914, "seconds": 342}, {"offset": 4995, "seconds": 350}, {"offset": 5044, "seconds": 355}, {"offset": 5094, "seconds": 358}, {"offset": 5170, "seconds": 364}, {"offset": 5212, "seconds": 368}, {"offset": 5234, "seconds": 370}, {"offset": 5305, "seconds": 375}, {"offset": 5334, "seconds": 377}, {"offset": 5406, "seconds": 381}, {"offset": 5489, "seconds": 386}, {"offset": 5532, "seconds": 389}, {"offset": 5611, "seconds": 394}, {"offset": 5674, "seconds": 399}, {"offset": 5750, "seconds": 402}, {"offset": 5825, "seconds": 406}, {"offset": 5869, "seconds": 408}, {"offset": 5926, "seconds": 411}, {"offset": 5978, "seconds": 414}, {"offset": 6031, "seconds": 416}, {"offset": 6092, "seconds": 420}, {"offset": 6173, "seconds": 428}, {"offset": 6224, "seconds": 431}, {"offset": 6315, "seconds": 438}, {"offset": 6367, "seconds": 441}, {"offset": 6440, "seconds": 447}, {"offset": 6507, "seconds": 452}, {"offset": 6567, "seconds": 456}, {"offset": 6647, "seconds": 463}, {"offset": 6691, "seconds": 465}, {"offset": 6763, "seconds": 471}, {"offset": 6846, "seconds": 478}, {"offset": 6935, "seconds": 483}, {"offset": 7011, "seconds": 489}, {"offset": 7073, "seconds": 493}, {"offset": 7111, "seconds": 495}, {"offset": 7136, "seconds": 497}, {"offset": 7213, "seconds": 502}, {"offset": 7253, "seconds": 504}, {"offset": 7328, "seconds": 509}, {"offset": 7424, "seconds": 514}, {"offset": 7483, "seconds": 518}, {"offset": 7537, "seconds": 522}, {"offset": 7602, "seconds": 525}, {"offset": 7647, "seconds": 527}, {"offset": 7718, "seconds": 531}, {"offset": 7788, "seconds": 536}, {"offset": 7856, "seconds": 541}, {"offset": 7909, "seconds": 543}, {"offset": 7973, "seconds": 548}, {"offset": 8053, "seconds": 554}, {"offset": 8100, "seconds": 557}, {"offset": 8156, "seconds": 561}, {"offset": 8218, "seconds": 566}, {"offset": 8254, "seconds": 568}, {"offset": 8306, "seconds": 572}, {"offset": 8326, "seconds": 574}, {"offset": 8352, "seconds": 576}, {"offset": 8421, "seconds": 581}, {"offset": 8482, "seconds": 587}, {"offset": 8546, "seconds": 591}, {"offset": 8621, "seconds": 596}, {"offset": 8665, "seconds": 599}, {"offset": 8740, "seconds": 606}, {"offset": 8796, "seconds": 611}, {"offset": 8836, "seconds": 613}, {"offset": 8896, "seconds": 616}, {"offset": 8941, "seconds": 619}, {"offset": 9002, "seconds": 623}, {"offset": 9029, "seconds": 625}, {"offset": 9069, "seconds": 627}, {"offset": 9120, "seconds": 630}, {"offset": 9161, "seconds": 633}, {"offset": 9218, "seconds": 636}, {"offset": 9258, "seconds": 639}, {"offset": 9294, "seconds": 641}, {"offset": 9351, "seconds": 644}, {"offset": 9395, "seconds": 647}, {"offset": 9413, "seconds": 649}, {"offset": 9475, "seconds": 655}, {"offset": 9503, "seconds": 658}, {"offset": 9569, "seconds": 663}, {"offset": 9606, "seconds": 665}, {"offset": 9623, "seconds": 666}, {"offset": 9684, "seconds": 670}, {"offset": 9742, "seconds": 675}, {"offset": 9809, "seconds": 680}, {"offset": 9871, "seconds": 684}, {"offset": 9926, "seconds": 687}, {"offset": 9999, "seconds": 692}, {"offset": 10056, "seconds": 696}, {"offset": 10096, "seconds": 700}, {"offset": 10158, "seconds": 705}, {"offset": 10215, "seconds": 709}, {"offset": 10237, "seconds": 710}, {"offset": 10293, "seconds": 716}, {"offset": 10345, "seconds": 721}, {"offset": 10393, "seconds": 725}, {"offset": 10457, "seconds": 729}, {"offset": 10526, "seconds": 734}, {"offset": 10582, "seconds": 738}, {"offset": 10618, "seconds": 740}, {"offset": 10667, "seconds": 743}, {"offset": 10716, "seconds": 747}, {"offset": 10773, "seconds": 751}, {"offset": 10821, "seconds": 754}, {"offset": 10863, "seconds": 756}, {"offset": 10902, "seconds": 759}, {"offset": 10946, "seconds": 761}, {"offset": 10992, "seconds": 764}, {"offset": 11064, "seconds": 770}, {"offset": 11084, "seconds": 772}, {"offset": 11140, "seconds": 774}, {"offset": 11200, "seconds": 778}, {"offset": 11269, "seconds": 784}, {"offset": 11311, "seconds": 787}, {"offset": 11354, "seconds": 789}, {"offset": 11388, "seconds": 792}, {"offset": 11412, "seconds": 795}, {"offset": 11473, "seconds": 799}, {"offset": 11550, "seconds": 807}, {"offset": 11589, "seconds": 810}, {"offset": 11625, "seconds": 812}, {"offset": 11639, "seconds": 813}, {"offset": 11697, "seconds": 815}, {"offset": 11727, "seconds": 817}, {"offset": 11793, "seconds": 820}, {"offset": 11841, "seconds": 823}, {"offset": 11888, "seconds": 826}, {"offset": 11933, "seconds": 829}, {"offset": 11974, "seconds": 831}, {"offset": 12041, "seconds": 835}, {"offset": 12071, "seconds": 836}, {"offset": 12139, "seconds": 839}, {"offset": 12197, "seconds": 842}, {"offset": 12260, "seconds": 846}, {"offset": 12315, "seconds": 848}, {"offset": 12382, "seconds": 852}, {"offset": 12439, "seconds": 855}, {"offset": 12516, "seconds": 860}, {"offset": 12584, "seconds": 864}, {"offset": 12614, "seconds": 866}, {"offset": 12674, "seconds": 870}, {"offset": 12731, "seconds": 873}, {"offset": 12772, "seconds": 876}, {"offset": 12852, "seconds": 881}, {"offset": 12880, "seconds": 885}, {"offset": 12940, "seconds": 889}, {"offset": 12999, "seconds": 892}, {"offset": 13039, "seconds": 895}, {"offset": 13092, "seconds": 898}, {"offset": 13137, "seconds": 900}, {"offset": 13203, "seconds": 905}, {"offset": 13263, "seconds": 908}, {"offset": 13291, "seconds": 911}, {"offset": 13329, "seconds": 913}, {"offset": 13389, "seconds": 915}, {"offset": 13427, "seconds": 918}, {"offset": 13486, "seconds": 921}, {"offset": 13535, "seconds": 924}, {"offset": 13617, "seconds": 930}, {"offset": 13684, "seconds": 934}, {"offset": 13766, "seconds": 939}, {"offset": 13811, "seconds": 942}, {"offset": 13827, "seconds": 943}, {"offset": 13913, "seconds": 947}, {"offset": 13971, "seconds": 952}, {"offset": 14026, "seconds": 956}, {"offset": 14099, "seconds": 961}, {"offset": 14130, "seconds": 963}, {"offset": 14204, "seconds": 968}, {"offset": 14281, "seconds": 976}, {"offset": 14351, "seconds": 982}, {"offset": 14421, "seconds": 987}, {"offset": 14481, "seconds": 991}, {"offset": 14519, "seconds": 994}, {"offset": 14569, "seconds": 996}, {"offset": 14638, "seconds": 1003}, {"offset": 14674, "seconds": 1005}, {"offset": 14745, "seconds": 1009}, {"offset": 14818, "seconds": 1012}, {"offset": 14853, "seconds": 1014}, {"offset": 14918, "seconds": 1017}, {"offset": 14973, "seconds": 1020}, {"offset": 15014, "seconds": 1022}, {"offset": 15044, "seconds": 1024}, {"offset": 15095, "seconds": 1027}, {"offset": 15152, "seconds": 1031}, {"offset": 15202, "seconds": 1035}, {"offset": 15272, "seconds": 1039}, {"offset": 15311, "seconds": 1043}, {"offset": 15360, "seconds": 1046}, {"offset": 15441, "seconds": 1052}, {"offset": 15483, "seconds": 1055}, {"offset": 15528, "seconds": 1057}, {"offset": 15599, "seconds": 1060}, {"offset": 15638, "seconds": 1063}, {"offset": 15692, "seconds": 1066}, {"offset": 15750, "seconds": 1070}, {"offset": 15806, "seconds": 1073}, {"offset": 15881, "seconds": 1077}, {"offset": 15932, "seconds": 1081}, {"offset": 15991, "seconds": 1084}, {"offset": 16047, "seconds": 1087}, {"offset": 16092, "seconds": 1090}, {"offset": 16167, "seconds": 1095}, {"offset": 16201, "seconds": 1098}, {"offset": 16246, "seconds": 1102}, {"offset": 16334, "seconds": 1108}, {"offset": 16412, "seconds": 1113}, {"offset": 16462, "seconds": 1117}, {"offset": 16539, "seconds": 1123}, {"offset": 16573, "seconds": 1125}, {"offset": 16642, "seconds": 1129}, {"offset": 16670, "seconds": 1131}, {"offset": 16700, "seconds": 1133}, {"offset": 16759, "seconds": 1137}, {"offset": 16801, "seconds": 1140}, {"offset": 16863, "seconds": 1144}, {"offset": 16915, "seconds": 1147}, {"offset": 16977, "seconds": 1150}, {"offset": 17020, "seconds": 1153}, {"offset": 17040, "seconds": 1155}, {"offset": 17101, "seconds": 1158}, {"offset": 17128, "seconds": 1160}, {"offset": 17177, "seconds": 1164}, {"offset": 17226, "seconds": 1167}, {"offset": 17273, "seconds": 1170}, {"offset": 17311, "seconds": 1172}, {"offset": 17352, "seconds": 1176}, {"offset": 17405, "seconds": 1180}, {"offset": 17421, "seconds": 1181}, {"offset": 17485, "seconds": 1184}, {"offset": 17525, "seconds": 1186}, {"offset": 17595, "seconds": 1190}, {"offset": 17659, "seconds": 1196}, {"offset": 17676, "seconds": 1197}, {"offset": 17699, "seconds": 1199}, {"offset": 17747, "seconds": 1203}, {"offset": 17801, "seconds": 1209}, {"offset": 17832, "seconds": 1211}, {"offset": 17869, "seconds": 1213}, {"offset": 17919, "seconds": 1217}, {"offset": 17957, "seconds": 1219}, {"offset": 17982, "seconds": 1221}, {"offset": 18029, "seconds": 1223}, {"offset": 18042, "seconds": 1224}, {"offset": 18081, "seconds": 1227}, {"offset": 18141, "seconds": 1231}, {"offset": 18210, "seconds": 1236}, {"offset": 18250, "seconds": 1239}, {"offset": 18267, "seconds": 1240}, {"offset": 18314, "seconds": 1243}, {"offset": 18375, "seconds": 1247}, {"offset": 18429, "seconds": 1250}, {"offset": 18480, "seconds": 1253}, {"offset": 18515, "seconds": 1255}, {"offset": 18546, "seconds": 1257}, {"offset": 18615, "seconds": 1262}, {"offset": 18674, "seconds": 1266}, {"offset": 18746, "seconds": 1270}, {"offset": 18801, "seconds": 1274}, {"offset": 18870, "seconds": 1278}, {"offset": 18924, "seconds": 1281}, {"offset": 18986, "seconds": 1285}, {"offset": 19015, "seconds": 1287}, {"offset": 19074, "seconds": 1290}, {"offset": 19112, "seconds": 1292}, {"offset": 19156, "seconds": 1295}, {"offset": 19216, "seconds": 1299}, {"offset": 19279, "seconds": 1302}, {"offset": 19346, "seconds": 1306}, {"offset": 19416, "seconds": 1310}, {"offset": 19430, "seconds": 1311}, {"offset": 19503, "seconds": 1315}, {"offset": 19534, "seconds": 1318}, {"offset": 19602, "seconds": 1322}, {"offset": 19646, "seconds": 1324}, {"offset": 19693, "seconds": 1327}, {"offset": 19737, "seconds": 1329}, {"offset": 19802, "seconds": 1332}, {"offset": 19876, "seconds": 1338}, {"offset": 19919, "seconds": 1341}, {"offset": 19960, "seconds": 1343}, {"offset": 19991, "seconds": 1346}, {"offset": 20045, "seconds": 1349}, {"offset": 20081, "seconds": 1350}, {"offset": 20126, "seconds": 1353}, {"offset": 20146, "seconds": 1355}, {"offset": 20189, "seconds": 1358}, {"offset": 20244, "seconds": 1364}, {"offset": 20314, "seconds": 1369}, {"offset": 20383, "seconds": 1374}, {"offset": 20413, "seconds": 1377}, {"offset": 20450, "seconds": 1380}, {"offset": 20486, "seconds": 1383}, {"offset": 20548, "seconds": 1387}, {"offset": 20619, "seconds": 1391}, {"offset": 20670, "seconds": 1394}, {"offset": 20713, "seconds": 1398}, {"offset": 20747, "seconds": 1402}, {"offset": 20789, "seconds": 1405}, {"offset": 20821, "seconds": 1408}, {"offset": 20893, "seconds": 1412}, {"offset": 20954, "seconds": 1415}, {"offset": 21018, "seconds": 1420}, {"offset": 21065, "seconds": 1425}, {"offset": 21117, "seconds": 1428}, {"offset": 21167, "seconds": 1432}, {"offset": 21212, "seconds": 1435}, {"offset": 21286, "seconds": 1440}, {"offset": 21362, "seconds": 1444}, {"offset": 21436, "seconds": 1449}, {"offset": 21489, "seconds": 1453}, {"offset": 21556, "seconds": 1457}, {"offset": 21610, "seconds": 1461}, {"offset": 21649, "seconds": 1464}, {"offset": 21679, "seconds": 1465}, {"offset": 21715, "seconds": 1467}, {"offset": 21774, "seconds": 1471}, {"offset": 21819, "seconds": 1475}, {"offset": 21878, "seconds": 1479}, {"offset": 21956, "seconds": 1485}, {"offset": 22013, "seconds": 1488}, {"offset": 22051, "seconds": 1490}, {"offset": 22078, "seconds": 1491}, {"offset": 22132, "seconds": 1495}, {"offset": 22190, "seconds": 1500}, {"offset": 22259, "seconds": 1505}, {"offset": 22321, "seconds": 1508}, {"offset": 22378, "seconds": 1513}, {"offset": 22427, "seconds": 1517}, {"offset": 22466, "seconds": 1519}, {"offset": 22511, "seconds": 1522}, {"offset": 22562, "seconds": 1525}, {"offset": 22594, "seconds": 1528}, {"offset": 22635, "seconds": 1531}, {"offset": 22689, "seconds": 1534}, {"offset": 22708, "seconds": 1536}, {"offset": 22782, "seconds": 1542}, {"offset": 22820, "seconds": 1545}, {"offset": 22901, "seconds": 1551}, {"offset": 22948, "seconds": 1553}, {"offset": 22982, "seconds": 1555}, {"offset": 23032, "seconds": 1559}, {"offset": 23107, "seconds": 1565}, {"offset": 23157, "seconds": 1568}, {"offset": 23218, "seconds": 1571}, {"offset": 23242, "seconds": 1573}, {"offset": 23299, "seconds": 1577}, {"offset": 23359, "seconds": 1582}, {"offset": 23415, "seconds": 1585}, {"offset": 23453, "seconds": 1587}, {"offset": 23515, "seconds": 1591}, {"offset": 23558, "seconds": 1594}, {"offset": 23610, "seconds": 1598}, {"offset": 23681, "seconds": 1603}, {"offset": 23694, "seconds": 1604}, {"offset": 23780, "seconds": 1610}, {"offset": 23802, "seconds": 1612}, {"offset": 23872, "seconds": 1620}, {"offset": 23958, "seconds": 1626}, {"offset": 23998, "seconds": 1629}, {"offset": 24050, "seconds": 1635}, {"offset": 24089, "seconds": 1637}, {"offset": 24144, "seconds": 1640}, {"offset": 24199, "seconds": 1643}, {"offset": 24291, "seconds": 1649}, {"offset": 24370, "seconds": 1653}, {"offset": 24406, "seconds": 1655}, {"offset": 24473, "seconds": 1660}, {"offset": 24567, "seconds": 1666}, {"offset": 24594, "seconds": 1668}, {"offset": 24636, "seconds": 1671}, {"offset": 24695, "seconds": 1675}, {"offset": 24759, "seconds": 1679}, {"offset": 24815, "seconds": 1683}, {"offset": 24861, "seconds": 1685}, {"offset": 24930, "seconds": 1690}, {"offset": 25006, "seconds": 1695}, {"offset": 25041, "seconds": 1698}, {"offset": 25109, "seconds": 1703}, {"offset": 25146, "seconds": 1705}, {"offset": 25213, "seconds": 1709}, {"offset": 25269, "seconds": 1714}, {"offset": 25363, "seconds": 1722}, {"offset": 25445, "seconds": 1727}, {"offset": 25508, "seconds": 1732}, {"offset": 25567, "seconds": 1737}, {"offset": 25648, "seconds": 1744}, {"offset": 25703, "seconds": 1747}, {"offset": 25797, "seconds": 1752}, {"offset": 25857, "seconds": 1756}, {"offset": 25943, "seconds": 1761}, {"offset": 26044, "seconds": 1767}, {"offset": 26119, "seconds": 1773}, {"offset": 26172, "seconds": 1777}, {"offset": 26268, "seconds": 1782}, {"offset": 26286, "seconds": 1784}, {"offset": 26340, "seconds": 1789}, {"offset": 26418, "seconds": 1793}, {"offset": 26496, "seconds": 1797}, {"offset": 26586, "seconds": 1806}, {"offset": 26640, "seconds": 1811}, {"offset": 26722, "seconds": 1818}, {"offset": 26782, "seconds": 1822}, {"offset": 26846, "seconds": 1827}, {"offset": 26940, "seconds": 1834}, {"offset": 26997, "seconds": 1838}, {"offset": 27099, "seconds": 1846}, {"offset": 27135, "seconds": 1848}, {"offset": 27181, "seconds": 1850}, {"offset": 27259, "seconds": 1856}, {"offset": 27325, "seconds": 1862}, {"offset": 27413, "seconds": 1870}, {"offset": 27506, "seconds": 1878}, {"offset": 27553, "seconds": 1880}, {"offset": 27641, "seconds": 1884}, {"offset": 27666, "seconds": 1886}, {"offset": 27733, "seconds": 1890}, {"offset": 27789, "seconds": 1892}, {"offset": 27872, "seconds": 1897}, {"offset": 27902, "seconds": 1899}, {"offset": 27931, "seconds": 1901}, {"offset": 27990, "seconds": 1905}, {"offset": 28051, "seconds": 1908}, {"offset": 28097, "seconds": 1911}, {"offset": 28178, "seconds": 1916}, {"offset": 28234, "seconds": 1919}, {"offset": 28320, "seconds": 1925}, {"offset": 28421, "seconds": 1932}, {"offset": 28443, "seconds": 1933}, {"offset": 28489, "seconds": 1936}, {"offset": 28570, "seconds": 1940}, {"offset": 28595, "seconds": 1942}, {"offset": 28637, "seconds": 1945}, {"offset": 28698, "seconds": 1949}, {"offset": 28753, "seconds": 1952}, {"offset": 28831, "seconds": 1957}, {"offset": 28855, "seconds": 1958}, {"offset": 28936, "seconds": 1962}, {"offset": 28968, "seconds": 1965}, {"offset": 29035, "seconds": 1970}, {"offset": 29085, "seconds": 1974}, {"offset": 29155, "seconds": 1981}, {"offset": 29222, "seconds": 1987}, {"offset": 29291, "seconds": 1992}, {"offset": 29335, "seconds": 1994}, {"offset": 29397, "seconds": 1999}, {"offset": 29458, "seconds": 2002}, {"offset": 29487, "seconds": 2003}, {"offset": 29498, "seconds": 2004}, {"offset": 29556, "seconds": 2009}, {"offset": 29613, "seconds": 2012}, {"offset": 29691, "seconds": 2018}, {"offset": 29763, "seconds": 2023}, {"offset": 29815, "seconds": 2025}, {"offset": 29858, "seconds": 2027}, {"offset": 29898, "seconds": 2028}, {"offset": 29929, "seconds": 2030}, {"offset": 29988, "seconds": 2035}, {"offset": 30076, "seconds": 2040}, {"offset": 30154, "seconds": 2047}, {"offset": 30227, "seconds": 2051}, {"offset": 30265, "seconds": 2053}, {"offset": 30306, "seconds": 2055}, {"offset": 30368, "seconds": 2058}, {"offset": 30387, "seconds": 2060}, {"offset": 30468, "seconds": 2066}, {"offset": 30533, "seconds": 2070}, {"offset": 30562, "seconds": 2072}, {"offset": 30633, "seconds": 2078}, {"offset": 30662, "seconds": 2080}, {"offset": 30722, "seconds": 2084}, {"offset": 30781, "seconds": 2088}, {"offset": 30852, "seconds": 2094}, {"offset": 30914, "seconds": 2097}, {"offset": 30954, "seconds": 2100}, {"offset": 31018, "seconds": 2104}, {"offset": 31085, "seconds": 2107}, {"offset": 31111, "seconds": 2109}, {"offset": 31152, "seconds": 2112}, {"offset": 31230, "seconds": 2116}, {"offset": 31275, "seconds": 2119}, {"offset": 31326, "seconds": 2124}, {"offset": 31389, "seconds": 2130}, {"offset": 31437, "seconds": 2133}, {"offset": 31485, "seconds": 2135}, {"offset": 31569, "seconds": 2141}, {"offset": 31620, "seconds": 2144}, {"offset": 31659, "seconds": 2147}, {"offset": 31706, "seconds": 2150}, {"offset": 31753, "seconds": 2153}, {"offset": 31767, "seconds": 2155}, {"offset": 31813, "seconds": 2158}, {"offset": 31872, "seconds": 2162}, {"offset": 31947, "seconds": 2167}, {"offset": 32013, "seconds": 2171}, {"offset": 32054, "seconds": 2174}, {"offset": 32111, "seconds": 2177}, {"offset": 32154, "seconds": 2179}, {"offset": 32235, "seconds": 2184}, {"offset": 32257, "seconds": 2185}, {"offset": 32332, "seconds": 2190}, {"offset": 32391, "seconds": 2193}, {"offset": 32443, "seconds": 2196}, {"offset": 32475, "seconds": 2198}, {"offset": 32551, "seconds": 2205}, {"offset": 32626, "seconds": 2210}, {"offset": 32659, "seconds": 2212}, {"offset": 32688, "seconds": 2214}, {"offset": 32721, "seconds": 2216}, {"offset": 32789, "seconds": 2221}, {"offset": 32875, "seconds": 2229}, {"offset": 32906, "seconds": 2231}, {"offset": 32960, "seconds": 2234}, {"offset": 33001, "seconds": 2237}, {"offset": 33072, "seconds": 2243}, {"offset": 33098, "seconds": 2245}, {"offset": 33162, "seconds": 2248}, {"offset": 33207, "seconds": 2251}, {"offset": 33215, "seconds": 2252}, {"offset": 33251, "seconds": 2257}, {"offset": 33316, "seconds": 2262}, {"offset": 33344, "seconds": 2264}, {"offset": 33431, "seconds": 2270}, {"offset": 33505, "seconds": 2276}, {"offset": 33565, "seconds": 2280}, {"offset": 33641, "seconds": 2284}, {"offset": 33690, "seconds": 2287}, {"offset": 33704, "seconds": 2289}, {"offset": 33744, "seconds": 2291}, {"offset": 33769, "seconds": 2293}, {"offset": 33834, "seconds": 2297}, {"offset": 33878, "seconds": 2299}, {"offset": 33929, "seconds": 2302}, {"offset": 33956, "seconds": 2304}, {"offset": 33998, "seconds": 2306}, {"offset": 34016, "seconds": 2307}, {"offset": 34036, "seconds": 2308}, {"offset": 34047, "seconds": 2309}, {"offset": 34075, "seconds": 2312}, {"offset": 34108, "seconds": 2315}, {"offset": 34156, "seconds": 2320}, {"offset": 34194, "seconds": 2322}, {"offset": 34220, "seconds": 2324}, {"offset": 34287, "seconds": 2328}, {"offset": 34344, "seconds": 2332}, {"offset": 34381, "seconds": 2334}, {"offset": 34432, "seconds": 2337}, {"offset": 34467, "seconds": 2341}, {"offset": 34513, "seconds": 2344}, {"offset": 34537, "seconds": 2346}, {"offset": 34564, "seconds": 2348}, {"offset": 34624, "seconds": 2352}, {"offset": 34665, "seconds": 2357}, {"offset": 34685, "seconds": 2359}, {"offset": 34733, "seconds": 2363}, {"offset": 34812, "seconds": 2367}, {"offset": 34842, "seconds": 2369}, {"offset": 34892, "seconds": 2372}, {"offset": 34981, "seconds": 2376}, {"offset": 35057, "seconds": 2381}, {"offset": 35117, "seconds": 2384}, {"offset": 35207, "seconds": 2389}, {"offset": 35265, "seconds": 2393}, {"offset": 35291, "seconds": 2396}, {"offset": 35367, "seconds": 2402}, {"offset": 35425, "seconds": 2406}, {"offset": 35488, "seconds": 2410}, {"offset": 35532, "seconds": 2414}, {"offset": 35618, "seconds": 2418}, {"offset": 35659, "seconds": 2421}, {"offset": 35743, "seconds": 2428}, {"offset": 35823, "seconds": 2433}, {"offset": 35912, "seconds": 2438}, {"offset": 35995, "seconds": 2445}, {"offset": 36034, "seconds": 2448}, {"offset": 36092, "seconds": 2452}, {"offset": 36179, "seconds": 2459}, {"offset": 36225, "seconds": 2462}, {"offset": 36307, "seconds": 2469}, {"offset": 36334, "seconds": 2471}, {"offset": 36386, "seconds": 2474}, {"offset": 36454, "seconds": 2478}, {"offset": 36537, "seconds": 2484}, {"offset": 36596, "seconds": 2488}, {"offset": 36684, "seconds": 2493}, {"offset": 36772, "seconds": 2499}, {"offset": 36825, "seconds": 2502}, {"offset": 36886, "seconds": 2505}, {"offset": 36942, "seconds": 2508}, {"offset": 36964, "seconds": 2509}, {"offset": 37025, "seconds": 2512}, {"offset": 37123, "seconds": 2517}, {"offset": 37156, "seconds": 2519}, {"offset": 37211, "seconds": 2524}, {"offset": 37272, "seconds": 2529}, {"offset": 37303, "seconds": 2532}, {"offset": 37395, "seconds": 2540}, {"offset": 37465, "seconds": 2544}, {"offset": 37515, "seconds": 2548}, {"offset": 37590, "seconds": 2555}, {"offset": 37646, "seconds": 2558}, {"offset": 37733, "seconds": 2563}, {"offset": 37804, "seconds": 2567}, {"offset": 37875, "seconds": 2573}, {"offset": 37914, "seconds": 2576}, {"offset": 37924, "seconds": 2577}, {"offset": 38009, "seconds": 2584}, {"offset": 38105, "seconds": 2589}, {"offset": 38179, "seconds": 2593}, {"offset": 38245, "seconds": 2597}, {"offset": 38334, "seconds": 2600}, {"offset": 38378, "seconds": 2602}, {"offset": 38443, "seconds": 2606}, {"offset": 38528, "seconds": 2612}, {"offset": 38591, "seconds": 2616}, {"offset": 38641, "seconds": 2618}, {"offset": 38691, "seconds": 2621}, {"offset": 38748, "seconds": 2624}, {"offset": 38808, "seconds": 2629}, {"offset": 38898, "seconds": 2636}, {"offset": 38911, "seconds": 2638}, {"offset": 38954, "seconds": 2640}, {"offset": 39016, "seconds": 2642}, {"offset": 39054, "seconds": 2644}, {"offset": 39136, "seconds": 2651}, {"offset": 39187, "seconds": 2654}, {"offset": 39234, "seconds": 2656}, {"offset": 39292, "seconds": 2660}, {"offset": 39364, "seconds": 2665}, {"offset": 39428, "seconds": 2669}, {"offset": 39498, "seconds": 2675}, {"offset": 39552, "seconds": 2679}, {"offset": 39619, "seconds": 2683}, {"offset": 39680, "seconds": 2687}, {"offset": 39758, "seconds": 2693}, {"offset": 39768, "seconds": 2694}, {"offset": 39836, "seconds": 2699}, {"offset": 39857, "seconds": 2700}, {"offset": 39918, "seconds": 2704}, {"offset": 39986, "seconds": 2710}, {"offset": 40051, "seconds": 2713}, {"offset": 40100, "seconds": 2716}, {"offset": 40155, "seconds": 2719}, {"offset": 40202, "seconds": 2722}, {"offset": 40250, "seconds": 2724}, {"offset": 40300, "seconds": 2727}, {"offset": 40343, "seconds": 2729}, {"offset": 40422, "seconds": 2733}, {"offset": 40451, "seconds": 2735}, {"offset": 40515, "seconds": 2737}, {"offset": 40551, "seconds": 2738}, {"offset": 40582, "seconds": 2740}, {"offset": 40594, "seconds": 2741}, {"offset": 40606, "seconds": 2742}, {"offset": 40630, "seconds": 2744}, {"offset": 40647, "seconds": 2746}, {"offset": 40689, "seconds": 2749}, {"offset": 40732, "seconds": 2751}, {"offset": 40761, "seconds": 2752}, {"offset": 40806, "seconds": 2755}, {"offset": 40828, "seconds": 2756}, {"offset": 40900, "seconds": 2759}, {"offset": 40951, "seconds": 2762}, {"offset": 41017, "seconds": 2766}, {"offset": 41070, "seconds": 2769}, {"offset": 41130, "seconds": 2772}, {"offset": 41189, "seconds": 2775}, {"offset": 41241, "seconds": 2779}, {"offset": 41255, "seconds": 2780}, {"offset": 41280, "seconds": 2781}, {"offset": 41305, "seconds": 2782}, {"offset": 41341, "seconds": 2784}, {"offset": 41355, "seconds": 2785}, {"offset": 41401, "seconds": 2800}, {"offset": 41437, "seconds": 2802}, {"offset": 41489, "seconds": 2805}, {"offset": 41530, "seconds": 2807}, {"offset": 41580, "seconds": 2810}, {"offset": 41610, "seconds": 2817}, {"offset": 41646, "seconds": 2820}, {"offset": 41685, "seconds": 2825}, {"offset": 41723, "seconds": 2827}, {"offset": 41769, "seconds": 2830}, {"offset": 41806, "seconds": 2834}, {"offset": 41863, "seconds": 2838}, {"offset": 41885, "seconds": 2841}, {"offset": 41920, "seconds": 2843}, {"offset": 41961, "seconds": 2847}, {"offset": 41990, "seconds": 2849}, {"offset": 42051, "seconds": 2852}, {"offset": 42119, "seconds": 2858}, {"offset": 42171, "seconds": 2861}, {"offset": 42220, "seconds": 2863}, {"offset": 42261, "seconds": 2867}, {"offset": 42315, "seconds": 2870}, {"offset": 42355, "seconds": 2873}, {"offset": 42377, "seconds": 2876}, {"offset": 42395, "seconds": 2878}, {"offset": 42413, "seconds": 2886}, {"offset": 42464, "seconds": 2889}, {"offset": 42504, "seconds": 2891}, {"offset": 42547, "seconds": 2894}, {"offset": 42601, "seconds": 2897}, {"offset": 42655, "seconds": 2900}]
src/rag/build_vector_db.py CHANGED
@@ -12,6 +12,7 @@ Usage:
12
  python build_vector_db.py
13
  """
14
 
 
15
  import json
16
  from pathlib import Path
17
  from typing import List, Dict, Tuple
@@ -121,32 +122,40 @@ def load_all_proposals() -> List[Tuple[str, Dict]]:
121
  # CHUNKING
122
  # ============================================================================
123
 
124
- def chunk_by_paragraphs(text: str, max_size: int = MAX_CHUNK_SIZE) -> List[Tuple[str, int, int]]:
125
  """
126
  Split text by paragraphs, combining small ones to reach max_size.
127
 
128
  Parses === PAGE N === markers before removing them so that each chunk
129
- carries the page range it spans.
 
 
130
 
131
  Args:
132
  text: Input text
133
  max_size: Maximum chunk size in characters
134
 
135
  Returns:
136
- List of (chunk_text, page_start, page_end) tuples.
137
  page_start/page_end are 0 when no page markers are present.
 
 
138
  """
139
  import re
140
 
141
- # Parse page markers to build (page_num, paragraph_text) pairs
142
  lines = text.split('\n')
143
  current_page = 0
144
  has_pages = False
145
- tagged_paragraphs = [] # list of (page_num, paragraph_text)
146
 
147
  # Accumulate lines into paragraphs, tracking which page each belongs to
148
  current_para_lines = []
149
  current_para_page = 0
 
 
 
 
150
 
151
  for line in lines:
152
  page_match = re.match(r'^=== PAGE (\d+) ===$', line.strip())
@@ -155,11 +164,12 @@ def chunk_by_paragraphs(text: str, max_size: int = MAX_CHUNK_SIZE) -> List[Tuple
155
  if current_para_lines:
156
  para_text = '\n'.join(current_para_lines).strip()
157
  if para_text:
158
- tagged_paragraphs.append((current_para_page, para_text))
159
  current_para_lines = []
160
  current_page = int(page_match.group(1))
161
  current_para_page = current_page
162
  has_pages = True
 
163
  continue
164
 
165
  if not line.strip():
@@ -167,63 +177,71 @@ def chunk_by_paragraphs(text: str, max_size: int = MAX_CHUNK_SIZE) -> List[Tuple
167
  if current_para_lines:
168
  para_text = '\n'.join(current_para_lines).strip()
169
  if para_text:
170
- tagged_paragraphs.append((current_para_page, para_text))
171
  current_para_lines = []
172
  current_para_page = current_page
173
  else:
174
  if not current_para_lines:
175
  current_para_page = current_page
 
176
  current_para_lines.append(line)
177
 
 
 
178
  # Flush last paragraph
179
  if current_para_lines:
180
  para_text = '\n'.join(current_para_lines).strip()
181
  if para_text:
182
- tagged_paragraphs.append((current_para_page, para_text))
183
 
184
  if not tagged_paragraphs:
185
  if text.strip():
186
- return [(text.strip(), 0, 0)]
187
  return []
188
 
189
  # If we got very few paragraphs, try splitting by single newlines
190
- if len(tagged_paragraphs) < 3 and sum(len(p) for _, p in tagged_paragraphs) > max_size * 2:
191
  # Re-split: each line becomes a paragraph (keeping page tags)
192
  new_tagged = []
193
- for page, para in tagged_paragraphs:
 
194
  for sub_line in para.split('\n'):
195
- sub_line = sub_line.strip()
196
- if sub_line and len(sub_line) > 30:
197
- new_tagged.append((page, sub_line))
 
198
  if new_tagged:
199
  tagged_paragraphs = new_tagged
200
 
201
- # Combine paragraphs into chunks, tracking page ranges
202
- chunks = [] # list of (text, page_start, page_end)
203
  current_chunk = ""
204
  chunk_page_start = tagged_paragraphs[0][0] if tagged_paragraphs else 0
205
  chunk_page_end = chunk_page_start
 
206
 
207
- for page, para in tagged_paragraphs:
208
  if current_chunk and len(current_chunk) + len(para) + 2 > max_size:
209
- chunks.append((current_chunk.strip(), chunk_page_start, chunk_page_end))
210
  current_chunk = para
211
  chunk_page_start = page
212
  chunk_page_end = page
 
213
  else:
214
  if current_chunk:
215
  current_chunk += "\n\n" + para
216
  else:
217
  current_chunk = para
218
  chunk_page_start = page
 
219
  chunk_page_end = page
220
 
221
  if current_chunk.strip():
222
- chunks.append((current_chunk.strip(), chunk_page_start, chunk_page_end))
223
 
224
  # Filter out very small chunks (unless it's the only chunk)
225
  if len(chunks) > 1:
226
- chunks = [(c, ps, pe) for c, ps, pe in chunks if len(c) >= MIN_CHUNK_SIZE]
227
 
228
  # If we still have no chunks, just split by size
229
  if not chunks and text.strip():
@@ -231,12 +249,12 @@ def chunk_by_paragraphs(text: str, max_size: int = MAX_CHUNK_SIZE) -> List[Tuple
231
  for i in range(0, len(clean_text), max_size):
232
  chunk = clean_text[i:i+max_size].strip()
233
  if chunk:
234
- chunks.append((chunk, 0, 0))
235
 
236
  return chunks
237
 
238
 
239
- def chunk_document(text: str, metadata: Dict) -> List[Tuple[str, int, int]]:
240
  """
241
  Chunk a document based on its size and structure.
242
 
@@ -249,14 +267,15 @@ def chunk_document(text: str, metadata: Dict) -> List[Tuple[str, int, int]]:
249
  metadata: Document metadata (includes word_count, char_count)
250
 
251
  Returns:
252
- List of (chunk_text, page_start, page_end) tuples.
253
  page_start/page_end are 0 when no page markers are present.
 
254
  """
255
  char_count = len(text)
256
 
257
  # For very short documents, keep them whole
258
  if char_count < KEEP_WHOLE_THRESHOLD:
259
- return [(text, 0, 0)] if text.strip() else []
260
 
261
  # For longer documents, chunk by paragraphs
262
  return chunk_by_paragraphs(text, MAX_CHUNK_SIZE)
@@ -297,7 +316,6 @@ def lookup_start_time(chunk_text: str, full_text: str, offsets: List[Dict]) -> i
297
  return 0
298
 
299
  # Binary search for the largest offset <= pos
300
- import bisect
301
  offset_values = [o["offset"] for o in offsets]
302
  idx = bisect.bisect_right(offset_values, pos) - 1
303
  if idx < 0:
@@ -436,7 +454,7 @@ def build_vector_database():
436
 
437
  print(f"\n Processing: {candidate} - {title}")
438
 
439
- # Chunk the document (returns list of (text, page_start, page_end))
440
  chunk_tuples = chunk_document(text, metadata)
441
  print(f" Created {len(chunk_tuples)} chunks")
442
 
@@ -444,14 +462,19 @@ def build_vector_database():
444
  print(f" ⚠ No chunks created, skipping")
445
  continue
446
 
447
- # Separate text from page info
448
  chunks = [ct[0] for ct in chunk_tuples]
449
  page_ranges = [(ct[1], ct[2]) for ct in chunk_tuples]
 
450
 
451
  # Create embeddings for all chunks
452
  embeddings = model.encode(chunks, show_progress_bar=False)
453
  print(f" Generated embeddings: {embeddings.shape}")
454
 
 
 
 
 
455
  # Prepare metadata for each chunk
456
  chunk_metadatas = []
457
  chunk_ids = []
@@ -471,11 +494,12 @@ def build_vector_database():
471
  print(f" chunk {i}: {topic} → {primary}"
472
  f"{' (+' + secondary_topics + ')' if secondary_topics else ''}")
473
 
474
- # Look up timestamp for video transcripts
475
- ts_offsets = metadata.get('_timestamp_offsets')
476
  start_time = 0
477
  if ts_offsets:
478
- start_time = lookup_start_time(chunk, text, ts_offsets)
 
 
479
 
480
  # Create rich metadata for each chunk
481
  chunk_meta = {
 
12
  python build_vector_db.py
13
  """
14
 
15
+ import bisect
16
  import json
17
  from pathlib import Path
18
  from typing import List, Dict, Tuple
 
122
  # CHUNKING
123
  # ============================================================================
124
 
125
+ def chunk_by_paragraphs(text: str, max_size: int = MAX_CHUNK_SIZE) -> List[Tuple[str, int, int, int]]:
126
  """
127
  Split text by paragraphs, combining small ones to reach max_size.
128
 
129
  Parses === PAGE N === markers before removing them so that each chunk
130
+ carries the page range it spans. Also tracks each chunk's character
131
+ offset in the original *text* so callers can map chunks back to
132
+ positions (e.g. for timestamp lookup) without reverse-searching.
133
 
134
  Args:
135
  text: Input text
136
  max_size: Maximum chunk size in characters
137
 
138
  Returns:
139
+ List of (chunk_text, page_start, page_end, char_offset) tuples.
140
  page_start/page_end are 0 when no page markers are present.
141
+ char_offset is the position in *text* where the chunk's first
142
+ paragraph began.
143
  """
144
  import re
145
 
146
+ # Parse page markers to build (page_num, paragraph_text, char_offset) triples
147
  lines = text.split('\n')
148
  current_page = 0
149
  has_pages = False
150
+ tagged_paragraphs = [] # list of (page_num, paragraph_text, char_offset)
151
 
152
  # Accumulate lines into paragraphs, tracking which page each belongs to
153
  current_para_lines = []
154
  current_para_page = 0
155
+ current_para_offset = 0 # char offset of the first line in current paragraph
156
+
157
+ # Running character position in the original text
158
+ line_offset = 0
159
 
160
  for line in lines:
161
  page_match = re.match(r'^=== PAGE (\d+) ===$', line.strip())
 
164
  if current_para_lines:
165
  para_text = '\n'.join(current_para_lines).strip()
166
  if para_text:
167
+ tagged_paragraphs.append((current_para_page, para_text, current_para_offset))
168
  current_para_lines = []
169
  current_page = int(page_match.group(1))
170
  current_para_page = current_page
171
  has_pages = True
172
+ line_offset += len(line) + 1 # +1 for the \n lost in split
173
  continue
174
 
175
  if not line.strip():
 
177
  if current_para_lines:
178
  para_text = '\n'.join(current_para_lines).strip()
179
  if para_text:
180
+ tagged_paragraphs.append((current_para_page, para_text, current_para_offset))
181
  current_para_lines = []
182
  current_para_page = current_page
183
  else:
184
  if not current_para_lines:
185
  current_para_page = current_page
186
+ current_para_offset = line_offset
187
  current_para_lines.append(line)
188
 
189
+ line_offset += len(line) + 1 # +1 for the \n lost in split
190
+
191
  # Flush last paragraph
192
  if current_para_lines:
193
  para_text = '\n'.join(current_para_lines).strip()
194
  if para_text:
195
+ tagged_paragraphs.append((current_para_page, para_text, current_para_offset))
196
 
197
  if not tagged_paragraphs:
198
  if text.strip():
199
+ return [(text.strip(), 0, 0, 0)]
200
  return []
201
 
202
  # If we got very few paragraphs, try splitting by single newlines
203
+ if len(tagged_paragraphs) < 3 and sum(len(p) for _, p, _ in tagged_paragraphs) > max_size * 2:
204
  # Re-split: each line becomes a paragraph (keeping page tags)
205
  new_tagged = []
206
+ for page, para, offset in tagged_paragraphs:
207
+ sub_offset = offset
208
  for sub_line in para.split('\n'):
209
+ stripped = sub_line.strip()
210
+ if stripped and len(stripped) > 30:
211
+ new_tagged.append((page, stripped, sub_offset))
212
+ sub_offset += len(sub_line) + 1 # +1 for \n
213
  if new_tagged:
214
  tagged_paragraphs = new_tagged
215
 
216
+ # Combine paragraphs into chunks, tracking page ranges and char offsets
217
+ chunks = [] # list of (text, page_start, page_end, char_offset)
218
  current_chunk = ""
219
  chunk_page_start = tagged_paragraphs[0][0] if tagged_paragraphs else 0
220
  chunk_page_end = chunk_page_start
221
+ chunk_char_offset = tagged_paragraphs[0][2] if tagged_paragraphs else 0
222
 
223
+ for page, para, offset in tagged_paragraphs:
224
  if current_chunk and len(current_chunk) + len(para) + 2 > max_size:
225
+ chunks.append((current_chunk.strip(), chunk_page_start, chunk_page_end, chunk_char_offset))
226
  current_chunk = para
227
  chunk_page_start = page
228
  chunk_page_end = page
229
+ chunk_char_offset = offset
230
  else:
231
  if current_chunk:
232
  current_chunk += "\n\n" + para
233
  else:
234
  current_chunk = para
235
  chunk_page_start = page
236
+ chunk_char_offset = offset
237
  chunk_page_end = page
238
 
239
  if current_chunk.strip():
240
+ chunks.append((current_chunk.strip(), chunk_page_start, chunk_page_end, chunk_char_offset))
241
 
242
  # Filter out very small chunks (unless it's the only chunk)
243
  if len(chunks) > 1:
244
+ chunks = [(c, ps, pe, co) for c, ps, pe, co in chunks if len(c) >= MIN_CHUNK_SIZE]
245
 
246
  # If we still have no chunks, just split by size
247
  if not chunks and text.strip():
 
249
  for i in range(0, len(clean_text), max_size):
250
  chunk = clean_text[i:i+max_size].strip()
251
  if chunk:
252
+ chunks.append((chunk, 0, 0, i))
253
 
254
  return chunks
255
 
256
 
257
+ def chunk_document(text: str, metadata: Dict) -> List[Tuple[str, int, int, int]]:
258
  """
259
  Chunk a document based on its size and structure.
260
 
 
267
  metadata: Document metadata (includes word_count, char_count)
268
 
269
  Returns:
270
+ List of (chunk_text, page_start, page_end, char_offset) tuples.
271
  page_start/page_end are 0 when no page markers are present.
272
+ char_offset is the position in *text* where the chunk begins.
273
  """
274
  char_count = len(text)
275
 
276
  # For very short documents, keep them whole
277
  if char_count < KEEP_WHOLE_THRESHOLD:
278
+ return [(text, 0, 0, 0)] if text.strip() else []
279
 
280
  # For longer documents, chunk by paragraphs
281
  return chunk_by_paragraphs(text, MAX_CHUNK_SIZE)
 
316
  return 0
317
 
318
  # Binary search for the largest offset <= pos
 
319
  offset_values = [o["offset"] for o in offsets]
320
  idx = bisect.bisect_right(offset_values, pos) - 1
321
  if idx < 0:
 
454
 
455
  print(f"\n Processing: {candidate} - {title}")
456
 
457
+ # Chunk the document (returns list of (text, page_start, page_end, char_offset))
458
  chunk_tuples = chunk_document(text, metadata)
459
  print(f" Created {len(chunk_tuples)} chunks")
460
 
 
462
  print(f" ⚠ No chunks created, skipping")
463
  continue
464
 
465
+ # Separate text from page/offset info
466
  chunks = [ct[0] for ct in chunk_tuples]
467
  page_ranges = [(ct[1], ct[2]) for ct in chunk_tuples]
468
+ char_offsets = [ct[3] for ct in chunk_tuples]
469
 
470
  # Create embeddings for all chunks
471
  embeddings = model.encode(chunks, show_progress_bar=False)
472
  print(f" Generated embeddings: {embeddings.shape}")
473
 
474
+ # Pre-compute timestamp offset list once per document
475
+ ts_offsets = metadata.get('_timestamp_offsets')
476
+ ts_offset_values = [o["offset"] for o in ts_offsets] if ts_offsets else []
477
+
478
  # Prepare metadata for each chunk
479
  chunk_metadatas = []
480
  chunk_ids = []
 
494
  print(f" chunk {i}: {topic} → {primary}"
495
  f"{' (+' + secondary_topics + ')' if secondary_topics else ''}")
496
 
497
+ # Look up timestamp for video transcripts using char_offset
 
498
  start_time = 0
499
  if ts_offsets:
500
+ idx = bisect.bisect_right(ts_offset_values, char_offsets[i]) - 1
501
+ if idx >= 0:
502
+ start_time = ts_offsets[idx]["seconds"]
503
 
504
  # Create rich metadata for each chunk
505
  chunk_meta = {