Spaces:
Sleeping
Sleeping
| from langchain_community.document_loaders import PyPDFLoader, DirectoryLoader | |
| # from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| from langchain_text_splitters import RecursiveCharacterTextSplitter | |
| from langchain_pinecone import PineconeVectorStore | |
| from langchain_huggingface import HuggingFaceEmbeddings | |
| from langchain_core.documents import Document | |
| from typing import List | |
| # Extract text from PDF files | |
| def load_pdf_files(data): | |
| loader = DirectoryLoader( | |
| data, | |
| glob="*.pdf", | |
| loader_cls=PyPDFLoader | |
| ) | |
| documents = loader.load() | |
| return documents | |
| # Keep only minimal metadata (source) | |
| def filter_to_minimal_docs(docs: List[Document]) -> List[Document]: | |
| """ | |
| Given a list of Document objects, return a new list | |
| containing only 'source' metadata and original page content. | |
| """ | |
| minimal_docs: List[Document] = [] | |
| for doc in docs: | |
| src = doc.metadata.get("source") | |
| minimal_docs.append( | |
| Document( | |
| page_content=doc.page_content, | |
| metadata={"source": src} | |
| ) | |
| ) | |
| return minimal_docs | |
| # Split documents into smaller chunks | |
| def text_split(minimal_docs): | |
| text_splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=500, | |
| chunk_overlap=20, | |
| ) | |
| texts_chunk = text_splitter.split_documents(minimal_docs) | |
| return texts_chunk | |
| # Download HuggingFace embedding model | |
| def download_hugging_face_embeddings(): | |
| model_name = "sentence-transformers/all-MiniLM-L6-v2" | |
| embeddings = HuggingFaceEmbeddings( | |
| model_name=model_name | |
| ) | |
| return embeddings | |