martina3435's picture
Update generate_embeddings.py
e2c7d31 verified
Raw
History Blame Contribute Delete
1.64 kB
import os
import time
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader
folder_path = "documents"
def load_pdfs(folder_path):
docs = []
for filename in os.listdir(folder_path):
if filename.endswith(".pdf"):
print(f"Processing: {filename}")
loader = PyPDFLoader(os.path.join(folder_path, filename))
pages = loader.load()
for page in pages:
page.metadata["source"] = filename
docs.extend(pages)
print(f"Total documents loaded: {len(docs)}")
return docs
def split_documents(docs):
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = text_splitter.split_documents(docs)
print(f"Total chunks: {len(chunks)}")
return chunks
def create_vectorstore(docs):
embedding = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
print("Creating vector DB...")
start = time.time()
vector_db = Chroma.from_documents(
docs,
embedding,
persist_directory="./chroma_db"
)
vector_db.persist()
print(f"Done in {time.time() - start} sec")
return vector_db
def main():
docs = load_pdfs(folder_path)
chunks = split_documents(docs)
vector_db = create_vectorstore(chunks)
print(f"Stored documents: {vector_db._collection.count()}")
if __name__ == "__main__":
main()