Spaces:
Sleeping
Sleeping
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() | |