zzeko/Document_Review
0
1import streamlit as st2import PyPDF23from transformers import AutoTokenizer, AutoModelForSeq2SeqLM4from langchain.embeddings import HuggingFaceEmbeddings5from langchain.vectorstores import FAISS6 7# Initialize the LLM8model_name = "facebook/bart-large-cnn" # Use a generative model for summarization9tokenizer = AutoTokenizer.from_pretrained(model_name)10model = AutoModelForSeq2SeqLM.from_pretrained(model_name)11 12# Function to read PDF and extract text13def extract_text_from_pdf(pdf_file, max_pages=3): # Limit to max_pages14 pdf_reader = PyPDF2.PdfReader(pdf_file)15 text = ""16 for i, page in enumerate(pdf_reader.pages):17 if i >= max_pages:18 break19 extracted_text = page.extract_text() or ""20 text += extracted_text21 return text22 23# Function to create embeddings and index documents24def create_vector_database(documents):25 embeddings = HuggingFaceEmbeddings(model_name="distilbert-base-uncased")26 vector_store = FAISS.from_texts(documents, embeddings)27 return vector_store28 29# Function to generate differences using a generative model30def generate_differences(texts, query):31 concatenated_texts = "\n\n".join(texts)32 input_text = f"{query}\n\nCar Specifications:\n{concatenated_texts}"33 34 inputs = tokenizer(input_text, return_tensors="pt", truncation=True, max_length=1024, padding="max_length")35 outputs = model.generate(**inputs, max_length=200)36 summary = tokenizer.decode(outputs[0], skip_special_tokens=True)37 38 return summary39 40# Streamlit UI41st.title("Document Review System")42uploaded_files = st.file_uploader("Upload PDF documents", type=["pdf"], accept_multiple_files=True)43 44if uploaded_files:45 documents = []46 for uploaded_file in uploaded_files:47 text = extract_text_from_pdf(uploaded_file)48 if text: # Only append if text is extracted49 documents.append(text)50 51 if st.button("Create Vector Database"):52 if documents:53 vector_store = create_vector_database(documents)54 st.success("Vector database created successfully!")55 else:56 st.error("No text extracted from uploaded documents.")57 58 query = st.text_input("Enter your query (e.g., 'what are the differences between the two car models'):")59 if query and 'vector_store' in locals():60 results = vector_store.similarity_search(query)61 62 if results: # Check if results are found63 st.write("Generating differences based on your query...")64 # Extract the texts from results for comparison65 result_texts = [result.page_content for result in results]66 differences = generate_differences(result_texts, query)67 st.write("Differences:")68 st.write(differences)69 else:70 st.write("No matching documents found.")71 