Wplotnikow commited on
Commit
4fda0fb
·
verified ·
1 Parent(s): ce601dc

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import glob
3
+ from docx import Document
4
+ from sklearn.feature_extraction.text import TfidfVectorizer
5
+ from sklearn.metrics.pairwise import cosine_similarity
6
+
7
+ # ---- Распознаёт первый docx в папке (поддерживает любые методички) ----
8
+ def extract_paragraphs():
9
+ docx_list = glob.glob("*.docx")
10
+ if not docx_list:
11
+ return ["Файл .docx с материалами не найден!"]
12
+ doc = Document(docx_list[0])
13
+ return [p.text.strip() for p in doc.paragraphs if p.text.strip()]
14
+
15
+ paragraphs = extract_paragraphs()
16
+ vectorizer = TfidfVectorizer().fit(paragraphs)
17
+ paragraph_matrix = vectorizer.transform(paragraphs)
18
+
19
+ def search_faq(question):
20
+ if not question.strip():
21
+ return "Пожалуйста, введите вопрос."
22
+ user_vec = vectorizer.transform([question])
23
+ sims = cosine_similarity(user_vec, paragraph_matrix)
24
+ idx = sims.argmax()
25
+ score = sims[idx]
26
+ if score < 0.12:
27
+ return "Не найдено подходящего ответа. Попробуйте переформулировать вопрос, либо обратитесь к преподавателю."
28
+ return paragraphs[idx]
29
+
30
+ EXAMPLES = [
31
+ "Какие требования к объему магистерской диссертации?",
32
+ "Как оформить список литературы?",
33
+ "Какие сроки сдачи и защиты ВКР?",
34
+ "Что должно быть во введении?",
35
+ "Какой процент оригинальности требуется?"
36
+ ]
37
+
38
+ with gr.Blocks() as demo:
39
+ gr.Markdown(
40
+ """
41
+ # Чат-бот по ВКР на базе ваших материалов
42
+ Задайте вопрос о правилах, требованиях и оформлении работы — найдите нужную информацию в своем методическом документе!
43
+ """
44
+ )
45
+ question = gr.Textbox(label="Ваш вопрос", lines=2)
46
+ ask_btn = gr.Button("Получить ответ")
47
+ answer = gr.Textbox(label="Ответ", lines=8, interactive=False)
48
+ ask_btn.click(search_faq, question, answer)
49
+ question.submit(search_faq, question, answer)
50
+ gr.Markdown("#### Примеры вопросов:")
51
+ gr.Examples(EXAMPLES, inputs=question)
52
+
53
+ gr.Markdown("""
54
+ ---
55
+ ### Контакты (заполните по своей кафедре/руководителю)
56
+ Преподаватель: ___________________
57
+ Email: ___________________________
58
+ Кафедра/Программа: ____________________
59
+ """)
60
+
61
+ demo.launch()