File size: 4,275 Bytes
64c0a70
163cb0f
7885b8a
8dd5245
 
 
163cb0f
1844fcc
 
 
 
 
163cb0f
 
 
cd60fbf
 
 
 
 
 
 
 
 
ce8e249
cd07ca3
cd60fbf
 
 
 
 
cd07ca3
a332ad5
622bf47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1844fcc
 
 
 
622bf47
1844fcc
 
 
 
64c0a70
1844fcc
cd60fbf
 
 
64c0a70
d7777dc
5686e63
622bf47
38e8419
5411bee
622bf47
3ef1c4c
622bf47
 
 
 
 
 
 
3ef1c4c
 
 
565f1e3
cde1476
565f1e3
 
1844fcc
6db4296
1844fcc
6db4296
 
 
 
1844fcc
 
 
 
 
 
5686e63
1844fcc
64c0a70
 
 
 
 
 
f330131
 
 
 
cde1476
cb7ece1
 
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
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)