52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from app.repositories import (
|
|
NERSRLRepository,
|
|
QuestionGenerationRepository,
|
|
AnswerGenerationRepository,
|
|
)
|
|
import re
|
|
|
|
|
|
class QuestionGenerationService:
|
|
|
|
def __init__(
|
|
self,
|
|
ner_srl_repository: NERSRLRepository,
|
|
question_generate_repository: QuestionGenerationRepository,
|
|
answer_generate_repository: AnswerGenerationRepository,
|
|
):
|
|
self._ner_srl_repository = ner_srl_repository
|
|
self._question_generation_repository = question_generate_repository
|
|
self._answer_generation_repository = answer_generate_repository
|
|
|
|
def createQuizAutomate(self, sentence: str):
|
|
# Gunakan regex untuk split hanya pada titik yang diikuti spasi atau akhir kalimat,
|
|
# dan bukan bagian dari angka (contoh: 19.00 tidak dipisah)
|
|
split_pattern = r"\.(?=\s|$)(?!\d)"
|
|
|
|
# split sentence using regex
|
|
sentences = [s.strip() for s in re.split(split_pattern, sentence) if s.strip()]
|
|
|
|
results = []
|
|
for s in sentences:
|
|
result = self._ner_srl_repository.predict_sentence(s)
|
|
|
|
question = self._question_generation_repository.predict_question(
|
|
context=s,
|
|
ner=result["ner"],
|
|
tokens=result["tokens"],
|
|
srl=result["srl"],
|
|
q_type=1,
|
|
)
|
|
|
|
answer = self._answer_generation_repository.predict_answer(
|
|
context=s,
|
|
question=question,
|
|
ner=result["ner"],
|
|
tokens=result["tokens"],
|
|
srl=result["srl"],
|
|
q_type=1,
|
|
)
|
|
results.append({"qustion": question, "answer": answer})
|
|
|
|
return results
|