Spaces:
Runtime error
Runtime error
import random | |
import spacy | |
import requests | |
from bs4 import BeautifulSoup | |
import re | |
import spacy | |
import language_tool_python | |
import streamlit as st | |
from gradio_client import client | |
# Initialize LanguageTool | |
tool = language_tool_python.LanguageToolPublicAPI('en-US') | |
# Helper function to check grammar and sense | |
def grammar_sense(sentence): | |
sense = tool.correct(sentence) | |
grammar = "Correct Grammar" if not tool.check(sentence) else "Incorrect Grammar" | |
return "Make Sense" if "Not" not in sense and grammar == "Correct Grammar" else "Not Make Sense" | |
# Web scraping and text cleaning | |
Quiz_Gen = st.form("Quiz Generation") | |
res = Quiz_Gen.text_input("What topic do you want to get quizzed on?") | |
Quiz_Gen.form_submit_button("Submit") | |
entity = res | |
prefix = "https://wiki.kidzsearch.com/wiki/" | |
page = requests.get(f'{prefix}{entity}') | |
res = BeautifulSoup(page.content, 'html.parser') | |
text = [i.get_text() for i in res.find_all('p')] | |
cleaned_text = ' '.join(text) | |
cleaned_text = re.sub(r'[^a-zA-Z0-9.,]', ' ', cleaned_text) | |
paragraphs = [p.strip() for p in re.split(r'\n', cleaned_text) if p.strip()] | |
# Process text using SpaCy | |
nlp = spacy.load("en_core_web_sm") | |
doc = nlp(cleaned_text) | |
sentences = [sent.text for sent in doc.sents] | |
# Combine sentences into paragraphs | |
paragraphs = [f"{sentences[i]} {sentences[i + 1]}" if i + 1 < len(sentences) else sentences[i] for i in range(0, len(sentences), 2)] | |
class SubjectiveTest: | |
def __init__(self, data, noOfQues): | |
self.summary = data | |
self.noOfQues = noOfQues | |
self.nlp = spacy.load("en_core_web_sm") | |
def adjust_question_pattern(self, entity_label, topic_placeholder=True): | |
question_patterns = { | |
"PERSON": ["Who is {entity}?", "Tell me about {entity}", "Explain {entity}", "What do you know about {entity}"], | |
"ORG": ["What is {entity}?", "Tell me about {entity}", "Explain {entity}", "What do you know about {entity}"], | |
"GPE": ["Tell me about {entity}", "Explain {entity}", "What do you know about {entity}", "Describe {entity}", "Where is {entity}"], | |
"MONEY": ["How much is {entity}?", "Tell me the value of {entity}", "Explain the amount of {entity}"], | |
"DATE": ["Why was {entity} important?", "Explain what happened on {entity}"], | |
# Add more entity-label to question-pattern mappings as needed | |
} | |
if topic_placeholder: | |
for key in question_patterns: | |
question_patterns[key] = [pattern + " {topic}" for pattern in question_patterns[key]] | |
return question_patterns.get(entity_label, ["Explain {entity} {topic}"]) | |
def generate_test(self, topic=None): | |
doc = self.nlp(self.summary) | |
question_answer_dict = dict() | |
for sentence in doc.sents: | |
for ent in sentence.ents: | |
entity_label = ent.label_ | |
entity_text = ent.text | |
question_patterns = self.adjust_question_pattern(entity_label, topic is not None) | |
for pattern in question_patterns: | |
question = pattern.format(entity=entity_text, topic=topic) | |
if entity_label in question_answer_dict: | |
question_answer_dict[entity_label].append(question) | |
else: | |
question_answer_dict[entity_label] = [question] | |
questions = [] | |
for entity_label, entity_questions in question_answer_dict.items(): | |
entity_questions = entity_questions[:self.noOfQues] | |
questions.extend(entity_questions) | |
return questions | |
# Example usage | |
data = ' '.join(paragraphs) | |
noOfQues = 5 | |
subjective_generator = SubjectiveTest(data, noOfQues) | |
question_list = subjective_generator.generate_test("") | |
questions = [] | |
Quiz = st.form("Quiz") | |
for i, question in enumerate(question_list): | |
if "Explain" not in question and len(tool.check(question)) == 0 and grammar_sense(question) == "Make Sense": | |
questions.append(f"Question: {question}") | |
scores = [] | |
client = Client("https://billbojangeles2000-zephyr-7b-alpha-chatbot-karki.hf.space/") | |
for i in questions: | |
res = Quiz.text_input(i) | |
result = client.predict( | |
f'What would you rate this answer to the question :"{i}" as a percentage? Here is the answer: {res}. Make sure to write your answer as "Score" and then write your score of the response.', # Fixed formatting issue | |
0.9, | |
256, | |
0.9, | |
1.2, | |
api_name="/chat" | |
) | |
print(result) | |
pattern = r'(\d+)%' | |
match = re.search(pattern, result) | |
if match: | |
score = match.group(1) | |
scores.append(f'{int(score)}') | |
else: | |
scores.append(f'N/A') | |
Quiz_Gen.form_submit_button("Submit") | |
x = 0 | |
new_scores = [] | |
for i in scores: | |
if i == 'N/A': | |
scores.pop(x) | |
scores.append(85) | |
x = x+1 | |
else: | |
x = x+1 | |
def calculate_average(numbers): | |
if not numbers: | |
return 0 # Return 0 for an empty list to avoid division by zero. | |
total = sum(numbers) | |
average = total / len(numbers) | |
return average | |
st.write(f'Your average score is {calculate_average(scores)}') | |