import os import PyPDF2 from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS from langchain.chains import RetrievalQA from langchain.document_loaders import TextLoader from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.text_splitter import RecursiveCharacterTextSplitter # Funktion zum Extrahieren von Text aus PDF def extract_text_from_pdf(pdf_path): with open(pdf_path, 'rb') as file: reader = PyPDF2.PdfReader(file) text = "" for page in reader.pages: text += page.extract_text() return text # Funktion zum Erstellen von Embeddings und Indexierung def create_embeddings_and_index(text): # Text in kleinere Teile aufteilen text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0) texts = text_splitter.split_text(text) # Embeddings erzeugen embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") # Indexierung mit FAISS db = FAISS.from_texts(texts, embeddings) return db # Funktion für die Frage-Antwort-Pipeline def answer_question(db, question): qa_chain = RetrievalQA.from_chain_type(llm=OpenAI(), retriever=db.as_retriever()) response = qa_chain.run(question) return response # Beispiel für die Nutzung def main(): # Dokument-Pfad pdf_path = 'path_to_your_pdf_document.pdf' # PDF extrahieren text = extract_text_from_pdf(pdf_path) print(f"Text aus dem Dokument extrahiert: {text[:500]}...") # Nur ersten 500 Zeichen anzeigen # Embeddings erstellen und Index erstellen db = create_embeddings_and_index(text) print("Embeddings und Index erfolgreich erstellt.") # Frage stellen question = "Was ist das Ziel dieses Dokuments?" answer = answer_question(db, question) print(f"Antwort auf die Frage '{question}': {answer}") if __name__ == "__main__": main()