alamshoaib134 commited on
Commit
e0ab48f
Β·
1 Parent(s): e80c7af

created new tab for verse locator

Browse files
app.py CHANGED
@@ -1,8 +1,9 @@
1
  import gradio as gr
2
- from src.components.utils import load_data, load_css, get_surah_names_list
3
- from src.components.search_tab import create_search_tab
4
- from src.components.statistics_tab import create_statistics_tab
5
- from src.components.surah_tab import create_surah_tab
 
6
 
7
  def main():
8
  """
@@ -31,6 +32,9 @@ def main():
31
  search_tab = create_search_tab(quran_data)
32
  statistics_tab = create_statistics_tab(quran_data)
33
  surah_tab = create_surah_tab(quran_data, surah_names_list)
 
 
 
34
 
35
  # Launch the interface
36
  iface.launch(share=True)
 
1
  import gradio as gr
2
+ from components.utils import load_data, load_css, get_surah_names_list
3
+ from components.search_tab import create_search_tab
4
+ from components.statistics_tab import create_statistics_tab
5
+ from components.surah_tab import create_surah_tab
6
+ from components.verse_locator_tab import create_verse_locator_tab
7
 
8
  def main():
9
  """
 
32
  search_tab = create_search_tab(quran_data)
33
  statistics_tab = create_statistics_tab(quran_data)
34
  surah_tab = create_surah_tab(quran_data, surah_names_list)
35
+ surah_counts = quran_data['Surah Name'].value_counts().reset_index()
36
+ surah_counts.columns = ['Surah Name', 'Ayah Count']
37
+ verse_locator_tab = create_verse_locator_tab(quran_data, surah_names_list, surah_counts)
38
 
39
  # Launch the interface
40
  iface.launch(share=True)
src/components/verse_locator_tab.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+
4
+ def load_verse(surah_number, verse_number, quran_data, surah_counts):
5
+ """
6
+ Load a specific verse from a Surah.
7
+
8
+ Args:
9
+ surah_number (int): The Surah number.
10
+ verse_number (int): The verse number.
11
+ quran_data (pd.DataFrame): The Quran dataset.
12
+
13
+ Returns:
14
+ str: The verse text or an error message if the verse is not found.
15
+ """
16
+ surah_data = quran_data[quran_data['Surah'] == surah_number].reset_index(drop=True)
17
+ surah_data.index += 1
18
+ max_verse_number = surah_counts[surah_counts['Surah Name'] == surah_data['Surah Name'].iloc[0]]['Ayah Count'].values[0]
19
+ try:
20
+ if verse_number <= max_verse_number:
21
+ return surah_data.loc[verse_number, 'Text']
22
+ else:
23
+ return f"Verse number {verse_number} not found in Surah {surah_number}. Maximum verse number is {max_verse_number}."
24
+ except KeyError:
25
+ return f"Verse number {verse_number} not found in Surah {surah_number}."
26
+
27
+ def create_verse_locator_tab(quran_data, surah_names_list, surah_counts):
28
+ """
29
+ Create the Verse Locator tab interface with input and display components.
30
+
31
+ Args:
32
+ quran_data (pd.DataFrame): The Quran dataset.
33
+ surah_names_list (list): List of formatted Surah names.
34
+
35
+ Returns:
36
+ gr.Tab: The configured Verse Locator tab.
37
+ """
38
+ with gr.Tab("Verse Locator") as tab:
39
+ gr.Markdown("# Verse Locator")
40
+ gr.Markdown("""
41
+ <div class='tab-description'>
42
+ Welcome to the Verse Locator! This tool allows you to:
43
+ - Select a Surah from the dropdown menu
44
+ - Enter a verse number to view the specific verse
45
+ - Ensure fault tolerance for invalid verse numbers
46
+ </div>
47
+ """)
48
+
49
+ surah_name_with_number = gr.Dropdown(
50
+ label="Select a Surah",
51
+ choices=surah_names_list,
52
+ info="Choose a Surah to view its verses"
53
+ )
54
+
55
+ verse_number_input = gr.Number(
56
+ label="Enter Verse Number",
57
+ value=1,
58
+ precision=0,
59
+ elem_classes="verse-number-input"
60
+ )
61
+
62
+ verse_output = gr.Textbox(
63
+ label="Verse",
64
+ lines=5,
65
+ visible=False,
66
+ elem_classes="verse-output"
67
+ )
68
+
69
+ def update_verse_output(surah_name, verse_number):
70
+ surah_number = int(surah_name.split('.')[0])
71
+ verse_text = load_verse(surah_number, int(verse_number), quran_data, surah_counts)
72
+ return gr.update(visible=True, value=verse_text)
73
+
74
+ verse_number_input.submit(
75
+ update_verse_output,
76
+ inputs=[surah_name_with_number, verse_number_input],
77
+ outputs=[verse_output]
78
+ )
79
+
80
+ return tab
src/gradio_app.py CHANGED
@@ -3,6 +3,7 @@ from components.utils import load_data, load_css, get_surah_names_list
3
  from components.search_tab import create_search_tab
4
  from components.statistics_tab import create_statistics_tab
5
  from components.surah_tab import create_surah_tab
 
6
 
7
  def main():
8
  """
@@ -31,6 +32,9 @@ def main():
31
  search_tab = create_search_tab(quran_data)
32
  statistics_tab = create_statistics_tab(quran_data)
33
  surah_tab = create_surah_tab(quran_data, surah_names_list)
 
 
 
34
 
35
  # Launch the interface
36
  iface.launch(share=True)
 
3
  from components.search_tab import create_search_tab
4
  from components.statistics_tab import create_statistics_tab
5
  from components.surah_tab import create_surah_tab
6
+ from components.verse_locator_tab import create_verse_locator_tab
7
 
8
  def main():
9
  """
 
32
  search_tab = create_search_tab(quran_data)
33
  statistics_tab = create_statistics_tab(quran_data)
34
  surah_tab = create_surah_tab(quran_data, surah_names_list)
35
+ surah_counts = quran_data['Surah Name'].value_counts().reset_index()
36
+ surah_counts.columns = ['Surah Name', 'Ayah Count']
37
+ verse_locator_tab = create_verse_locator_tab(quran_data, surah_names_list, surah_counts)
38
 
39
  # Launch the interface
40
  iface.launch(share=True)