CoolFace
Apppublic

zzeko/Document_Review

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py71 linesDownload Raw Back to root
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