Spaces:
Runtime error
Runtime error
import gradio as gr | |
import re | |
from pypdf import PdfReader | |
from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline | |
def remove_references(text): | |
text = re.sub(r'\[\d+\]', '', text) ##[ref] | |
text = re.sub(r'\[https?://[^\[\]]+\s[^\[\]]+\]', '', text) ##hyperlink with text | |
text = re.sub(r'\[https?://[^\[\]]+\]', '', text) ##just the hyperlink | |
# text = html.unescape(text) | |
text = re.sub(r'\s+', ' ', text).strip() ##clear out the white spaces | |
return text | |
# def extract_text_from_pdf(file_path): | |
# text = "" | |
# pdf_reader = PdfReader(file_path) | |
# for page in pdf_reader.pages: | |
# text += page.extract_text() + "\n" | |
# return text | |
import fitz # PyMuPDF | |
def extract_text_from_pdf(file_path): | |
text = "" | |
pdf_document = fitz.open(file_path) | |
for page_num in range(pdf_document.page_count): | |
page = pdf_document[page_num] | |
text += page.get_text("text") + "\n" | |
pdf_document.close() | |
return text | |
def extract_text_from_txt(file_path): | |
text = "" | |
with open(file_path, "r", encoding='utf-8') as txt_file: | |
text = txt_file.read() | |
return text | |
def extract_text_from_doc(file_path): | |
text - "" | |
doc = docx.Document(file_path) | |
for texts in doc.paragraphs: | |
text+= texts.text + "\n" | |
return texts | |
def model(model_name): | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForQuestionAnswering.from_pretrained(model_name,return_dict = False) | |
model_pipeline = pipeline4 | |
"question-answering", | |
model = model, | |
tokenizer = tokenizer | |
) | |
return model_pipeline | |
model_name = "timpal0l/mdeberta-v3-base-squad2" | |
pipe = model(model_name) | |
def qa_result( context, question, file, pipe = pipe): | |
if file is not None: | |
allowed_types = [".pdf", ".txt", ".doc"] | |
extension = "." + file.name.split(".")[-1].lower() | |
if not extension in allowed_types: | |
text = "Խնդրում եմ ներբեռնել .pdf, .txt, կամ .doc տիպի ֆայլեր։" | |
else: | |
if extension is allowed_types[0]: | |
context = extract_text_from_pdf(file.name) | |
elif extension is allowed_types[1]: | |
context = extract_text_from_txt(file.name) | |
else: | |
context = extract_text_from_doc(file.name) | |
result = pipe(question=question, context=context) | |
answered = result['answer'] | |
text = remove_references(answered) | |
elif file is None and len(context) == 0 and len(question) == 0: | |
text = "Որպեսզի ես կարողանամ քեզ օգնել, ինձ պիտի տրամադրես համապատասխան տեքստն կամ ֆայլն ու հարցերը։" | |
else: | |
if len(context) == 0 and len(question) == 0: | |
text = "Որպեսզի ես կարողանամ քեզ օգնել, ինձ պիտի տրամադրես համապատասխան տեքստն ու հարցերը։" | |
elif len(context) == 0: | |
text = "Ես չեմ կարողանա քեզ օգնել եթե ինձ չտրամադրես տեքստը" | |
elif len(context) == 0: | |
text = "Ես չեմ կարողանա քեզ օգնել եթե ինձ չտաս հարցդ" | |
else: | |
result = pipe(question=question, context=context) | |
answered = result['answer'] | |
text = remove_references(answered) | |
text = text.replace('(', '', 1) | |
text = text.replace(',', '', len(text)-1) | |
return text.capitalize() | |
theme = gr.themes.Soft().set( | |
body_background_fill='*background_fill_secondary', | |
body_text_color_subdued='*body_text_color', | |
body_text_color_subdued_dark='*chatbot_code_background_color' | |
) | |
app = gr.Interface( | |
fn=qa_result, | |
btn=gr.UploadButton("📁"), | |
inputs=['textbox', 'text', gr.inputs.File()], | |
outputs='textbox', | |
title='Ողջու՛յն։ Ես քո արհեստական բանականությամբ օգնականն եմ', | |
theme=theme, | |
description='Տու՛ր ինձ տեքստ, ու տեքստին վերաբերող հարցեր, ու ես կօգնեմ քեզ պատասխանել հարցերին' | |
) | |
app.launch(inline=False) |