Spaces:
Runtime error
Runtime error
File size: 5,068 Bytes
64c0a70 163cb0f 7885b8a 8dd5245 96086b6 dd76f94 8dd5245 163cb0f 1844fcc 163cb0f cd60fbf ce8e249 cd07ca3 cd60fbf cd07ca3 a332ad5 622bf47 c7bc26e 622bf47 6bd0993 622bf47 6bd0993 d9c2c2b 6bd0993 622bf47 6bd0993 1844fcc 6bd0993 1844fcc e815c6a 64c0a70 1844fcc cd60fbf 64c0a70 6a25e07 e7fb126 c306811 e7fb126 c8dd179 6a25e07 1844fcc 1d61a83 095bb35 6a25e07 e7fb126 6a25e07 1844fcc 64c0a70 f330131 cde1476 cb7ece1 ebebc14 f330131 536b8f8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import gradio as gr
import re
from pypdf import PdfReader
from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline
import docx
import concurrent.futures
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 txt_file.read()
# return text
# def extract_text_from_doc(file_path):
# doc = docx.Document(file_path)
# fullText = []
# for para in doc.paragraphs:
# fullText.append(para.text)
# return '\n'.join(fullText)
def extract_text_from_paragraph(para):
return para.text
def extract_text_from_doc(file_path):
doc = docx.Document(file_path)
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(executor.map(extract_text_from_paragraph, doc.paragraphs))
return '\n'.join(results)
def model(model_name):
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForQuestionAnswering.from_pretrained(model_name,return_dict = False)
model_pipeline = pipeline("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", ".docx"]
extension = "." + file.name.split(".")[-1].lower()
if not extension in allowed_types:
text = "Խնդրում եմ ներբեռնել .pdf, .txt, կամ .docx ֆայլեր"
else:
if len(question) == 0:
text = "Ես չեմ կարողանալ քեզ օգնել եթե ինձ չտաս հարցը"
else:
if extension == allowed_types[0]:
context = extract_text_from_pdf(file.name)
elif extension == 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)
else:
# if file is None and len(context) == 0 and len(question) == 0:
# text = "Որպեսզի ես կարողանամ քեզ օգնել, դու պետք է տրամադրես տեքստ կամ ֆայլը, և հարցեր"
# elif len(context) == 0:
# text = "Ես չեմ կարողանամ քեզ օգնել եթե դու չտրամադրես տեքստը"
# elif len(question) == 0:
# text = "Ես չեմ կարողանամ քեզ օգնել եթե դու չտաս հարցը"
if len(context) == 0:
if len(question) == 0:
text = "Որպեսզի ես կարողանամ քեզ օգնել, դու պետք է տրամադրես տեքստ կամ ֆայլը, և հարցեր"
else:
text = "Ես չեմ կարողանամ քեզ օգնել եթե դու չտրամադրես տեքստը"
elif len(question) == 0:
text = "Ես չեմ կարողանամ քեզ օգնել եթե դու չտաս հարցը"
else:
result = pipe(question=question, context=context)
answered = result['answer']
text = remove_references(answered)
text = text.replace('(', '', 1)
text = text.rstrip(',')
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) |