AlserFurma commited on
Commit
aafa290
·
verified ·
1 Parent(s): c5f3eef

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -26
app.py CHANGED
@@ -53,38 +53,59 @@ except Exception as e:
53
  # =========================
54
  def generate_quiz(text: str):
55
  """
56
- Генерирует один вопрос и два варианта ответа (correct, wrong) на русском языке.
 
57
  """
58
- prompt = (
59
- "Сгенерируй один учебный вопрос по этому тексту и два варианта ответа (правильный и неправильный). "
60
- "Верни в формате: Вопрос: ... Ответ1: ... Ответ2: ... Текст: " + text
61
- )
62
  try:
63
- out = qa_model(prompt, max_length=256)[0]["generated_text"]
64
- import re
65
- match = re.search(
66
- r"Вопрос\s*[:\-]\s*(.*?)\s*Ответ1\s*[:\-]\s*(.*?)\s*Ответ2\s*[:\-]\s*(.*)", out, re.DOTALL | re.IGNORECASE
67
- )
68
- if not match:
69
- lines = [l.strip() for l in out.splitlines() if l.strip()]
70
- if len(lines) >= 3:
71
- question, correct, wrong = lines[:3]
 
 
 
 
 
 
 
 
 
 
 
 
72
  else:
73
- parts = out.split(".")
74
- question = parts[0] if len(parts) > 0 else "Вопрос"
75
- correct = parts[1] if len(parts) > 1 else "Вариант 1"
76
- wrong = parts[2] if len(parts) > 2 else "Вариант 2"
 
 
 
 
 
 
 
 
 
 
 
77
  else:
78
- question, correct, wrong = match.groups()
79
-
80
- question = question.strip()
81
- correct = correct.strip()
82
- wrong = wrong.strip()
83
- options = [correct, wrong]
84
  random.shuffle(options)
85
- return question, options, correct
 
 
86
  except Exception as e:
87
- raise ValueError(f"Ошибка генерации вопроса:\n{str(e)}")
88
 
89
 
90
  def synthesize_audio(text_ru: str):
 
53
  # =========================
54
  def generate_quiz(text: str):
55
  """
56
+ Генерирует один вопрос и два варианта ответа на основе текста.
57
+ Использует простой алгоритм выбора предложений из текста.
58
  """
 
 
 
 
59
  try:
60
+ # Разбиваем текст на предложения
61
+ sentences = [s.strip() for s in text.replace("!", ".").replace("?", ".").split(".") if s.strip()]
62
+
63
+ if len(sentences) < 1:
64
+ raise ValueError("Текст слишком короткий, не смог найти предложения")
65
+
66
+ # Выбираем случайное предложение для вопроса
67
+ question_sentence = random.choice(sentences)
68
+
69
+ # Разбиваем предложение на слова
70
+ words = question_sentence.split()
71
+
72
+ if len(words) <= 3:
73
+ # Если предложение слишком короткое
74
+ correct_answer = question_sentence
75
+ question = f"Что сказано в этом предложении?"
76
+ else:
77
+ # Формируем вопрос
78
+ first_word = words[0].lower()
79
+ if first_word in ["кто", "что", "где", "когда", "почему", "как", "сколько"]:
80
+ question = question_sentence + "?"
81
  else:
82
+ question = "Что сказано в тексте?"
83
+
84
+ # Правильный ответ первые несколько слов предложения
85
+ correct_answer = " ".join(words[:6]) + ("..." if len(words) > 6 else "")
86
+
87
+ # Генерируем неправильный вариант
88
+ if len(sentences) > 1:
89
+ # Берём другое предложение из текста
90
+ wrong_options = [s for s in sentences if s != question_sentence]
91
+ if wrong_options:
92
+ wrong_sentence = random.choice(wrong_options)
93
+ wrong_words = wrong_sentence.split()
94
+ wrong_answer = " ".join(wrong_words[:6]) + ("..." if len(wrong_words) > 6 else "")
95
+ else:
96
+ wrong_answer = "Это не упоминается в тексте"
97
  else:
98
+ # Если только одно предложение — придумываем очевидную ложь
99
+ wrong_answer = "Это совершенно другая информация"
100
+
101
+ # Перемешиваем варианты
102
+ options = [correct_answer, wrong_answer]
 
103
  random.shuffle(options)
104
+
105
+ return question, options, correct_answer
106
+
107
  except Exception as e:
108
+ raise ValueError(f"Ошибка генерации вопроса: {str(e)}")
109
 
110
 
111
  def synthesize_audio(text_ru: str):