pmelnechuk commited on
Commit
658c529
·
verified ·
1 Parent(s): d1ed8a8

Update src/preprocess.py

Browse files
Files changed (1) hide show
  1. src/preprocess.py +73 -76
src/preprocess.py CHANGED
@@ -1,76 +1,73 @@
1
- from langchain_community.document_loaders import PyMuPDFLoader
2
- from langchain.text_splitter import RecursiveCharacterTextSplitter
3
- import re
4
-
5
- class Loader:
6
- """Clase encargada de la carga desde PDFs,
7
- admite PDFs con texto seleccionable unicamente. Realiza
8
- carga y devuelve lista de chunks de texto.
9
- """
10
- def __init__(self, path: str):
11
- self.path = path
12
-
13
- def load_docs(self,pag:slice=None):
14
- """Carga el PDF y devuelve lista de chunks de texto.
15
- """
16
- loader=PyMuPDFLoader(self.path)
17
- docs=loader.load()
18
- if pag:
19
- docs=docs[pag]
20
- return [doc.page_content for doc in docs]
21
- @staticmethod
22
-
23
- def limpiar_texto(self,texto: str) -> str:
24
- """
25
- Limpia el texto eliminando caracteres basura y normalizando espacios y saltos de línea.
26
- Esta función está diseñada para preprocesar libros u otros documentos largos,
27
- facilitando su uso en aplicaciones de Retrieval Augmented Generation (RAG).
28
-
29
- Args:
30
- texto (str): El texto original a limpiar.
31
-
32
- Returns:
33
- str: El texto limpio.
34
- """
35
- # 1. Eliminar saltos de línea, tabulaciones y otros caracteres de control
36
- texto = re.sub(r'[\r\n\t]+', ' ', texto)
37
-
38
- # 2. Eliminar caracteres no imprimibles (códigos de control)
39
- texto = re.sub(r'[\x00-\x1F\x7F]', '', texto)
40
-
41
- # 3. Sustituir múltiples espacios por uno solo
42
- texto = re.sub(r'\s+', ' ', texto)
43
-
44
- # 4. Eliminar caracteres que no sean letras, dígitos o signos de puntuación comunes
45
- # Se conservan letras con acentos y caracteres propios del español.
46
- texto = re.sub(r'[^\w\s.,;:¡!¿?\-áéíóúÁÉÍÓÚñÑ]', '', texto)
47
-
48
- # 5. Eliminar espacios al inicio y al final
49
- texto = texto.strip()
50
-
51
- return texto
52
-
53
- @staticmethod
54
-
55
- def splitter(self,texto,chunk_size,chunk_overlap):
56
- """
57
- Divide el texto en chunks
58
-
59
- Args:
60
- chunk_size (int): Largo del chunk.
61
- chunk_overlap (int): Sobreposicion de chunks
62
- texto (list): lista de textos a procesar
63
-
64
- Returns:
65
- list: Los textos limpios.
66
- """
67
- splitter=RecursiveCharacterTextSplitter(
68
- chunk_size=chunk_size,
69
- chunk_overlap=chunk_overlap,
70
- length_function=len,
71
- separators=["\n\n","\n"," ",""]
72
- )
73
- chunks=splitter.create_documents(texto)
74
-
75
- return chunks
76
-
 
1
+ from langchain_community.document_loaders import PyMuPDFLoader
2
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
3
+ import re
4
+
5
+ class Loader:
6
+ """Clase encargada de la carga desde PDFs,
7
+ admite PDFs con texto seleccionable unicamente. Realiza
8
+ carga y devuelve lista de chunks de texto.
9
+ """
10
+ def __init__(self, path: str):
11
+ self.path = path
12
+
13
+ def load_docs(self, pag: slice = None):
14
+ """Carga el PDF y devuelve lista de chunks de texto."""
15
+ loader = PyMuPDFLoader(self.path)
16
+ docs = loader.load()
17
+ if pag:
18
+ docs = docs[pag]
19
+ return [doc.page_content for doc in docs]
20
+
21
+ @staticmethod
22
+ def limpiar_texto(texto: str) -> str:
23
+ """
24
+ Limpia el texto eliminando caracteres basura y normalizando espacios y saltos de línea.
25
+ Esta función está diseñada para preprocesar libros u otros documentos largos,
26
+ facilitando su uso en aplicaciones de Retrieval Augmented Generation (RAG).
27
+
28
+ Args:
29
+ texto (str): El texto original a limpiar.
30
+
31
+ Returns:
32
+ str: El texto limpio.
33
+ """
34
+ # 1. Eliminar saltos de línea, tabulaciones y otros caracteres de control
35
+ texto = re.sub(r'[\r\n\t]+', ' ', texto)
36
+
37
+ # 2. Eliminar caracteres no imprimibles (códigos de control)
38
+ texto = re.sub(r'[\x00-\x1F\x7F]', '', texto)
39
+
40
+ # 3. Sustituir múltiples espacios por uno solo
41
+ texto = re.sub(r'\s+', ' ', texto)
42
+
43
+ # 4. Eliminar caracteres que no sean letras, dígitos o signos de puntuación comunes
44
+ # Se conservan letras con acentos y caracteres propios del español.
45
+ texto = re.sub(r'[^\w\s.,;:¡!¿?\-áéíóúÁÉÍÓÚñÑ]', '', texto)
46
+
47
+ # 5. Eliminar espacios al inicio y al final
48
+ texto = texto.strip()
49
+
50
+ return texto
51
+
52
+ @staticmethod
53
+ def splitter(texto, chunk_size, chunk_overlap):
54
+ """
55
+ Divide el texto en chunks
56
+
57
+ Args:
58
+ chunk_size (int): Largo del chunk.
59
+ chunk_overlap (int): Sobreposición de chunks.
60
+ texto (list): lista de textos a procesar.
61
+
62
+ Returns:
63
+ list: Los textos en chunks.
64
+ """
65
+ splitter = RecursiveCharacterTextSplitter(
66
+ chunk_size=chunk_size,
67
+ chunk_overlap=chunk_overlap,
68
+ length_function=len,
69
+ separators=["\n\n", "\n", " ", ""]
70
+ )
71
+ chunks = splitter.create_documents(texto)
72
+
73
+ return chunks