Al-Quran / src /al_quran_gradio.py
alamshoaib134's picture
major updates on al-quran
1d969fa
import pandas as pd
import re
import gradio as gr
from collections import defaultdict
# Load the dataset
quran_english_with_surah = pd.read_csv('/Users/salam9/Desktop/quran/en.yusufali.csv')
surah_names = pd.read_csv('/Users/salam9/Desktop/quran/surah_names_english.csv', names=['Surah', 'Surah Name'])
surah_names["Surah Name"] = surah_names["Surah Name"].str[1:]
quran_english_with_surah = quran_english_with_surah.merge(surah_names, on='Surah')
quran_english_with_surah.index = pd.RangeIndex(start=1, stop=len(quran_english_with_surah) + 1)
# Create the inverted index
def create_inverted_index(dataframe):
inverted_index = defaultdict(list)
for index, row in dataframe.iterrows():
words = row['Text'].split()
for word in words:
word = re.sub(r'\W+', '', word).lower()
if word:
inverted_index[word].append((row['Surah'], row['Ayah']))
return inverted_index
inverted_index = create_inverted_index(quran_english_with_surah)
# Define the search function
def search_quran(keyword):
results = []
if keyword.lower() not in inverted_index:
return f"No occurrences found for '{keyword}'"
verse_ids = inverted_index[keyword.lower()]
for verse_id in verse_ids:
surah_num, verse_num = verse_id
verse_data = quran_english_with_surah[(quran_english_with_surah['Surah'] == surah_num) &
(quran_english_with_surah['Ayah'] == verse_num)]
surah_name = verse_data['Surah Name'].iloc[0]
verse_text = verse_data['Text'].iloc[0]
highlighted_text = re.sub(f"(?i)({keyword})", r'<mark style="background-color: yellow; color: black;">\1</mark>', verse_text)
results.append(f"<div style='padding: 10px; border-bottom: 1px solid #ccc;'>"
f"<strong>Surah:</strong> {surah_name}<br>"
f"<strong>Reference:</strong> {surah_num}:{verse_num}<br>"
f"<strong>Occurrences in verse:</strong> {verse_text.lower().count(keyword.lower())}<br>"
f"<strong>Text:</strong> {highlighted_text}</div>")
return '<div style="max-height: 500px; overflow-y: auto; width: 100%; font-size: 18px;">' + ''.join(results) + '</div>'
# Create the Gradio interface with a modern theme
css = """
body {
font-family: 'Arial', sans-serif;
background-color: #f4f4f9;
color: #333;
margin: 0;
padding: 0;
}
.gradio-container {
max-width: 100%;
margin: 0 auto;
padding: 20px;
}
.gradio-input, .gradio-output {
width: 100%;
}
.gradio-title {
font-size: 2em;
font-weight: bold;
margin-bottom: 20px;
}
.gradio-description {
font-size: 1.2em;
margin-bottom: 20px;
}
"""
iface = gr.Interface(
fn=search_quran,
inputs=gr.Textbox(label="Enter a keyword"),
outputs=gr.HTML(label="Search Results"),
title='Quran Keyword Search',
description='Enter a keyword to search in the Quran',
css=css
)
iface.launch(share=True)