|
import gradio as gr |
|
import pyarabic.araby as araby |
|
import numpy as np |
|
import pandas as pd |
|
import os |
|
from datasets import load_dataset |
|
from datasets import Features |
|
from datasets import Value |
|
from datasets import Dataset |
|
import matplotlib.pyplot as plt |
|
|
|
css = """ |
|
.table-wrap { |
|
min-height: 200px; |
|
max-height: 200px; |
|
} |
|
""" |
|
|
|
Secret_token = os.getenv('HF_Token') |
|
|
|
edge_info = load_dataset('FDSRashid/hadith_info',token = Secret_token, data_files = 'isnad_info.csv', split = 'train').to_pandas() |
|
|
|
lst = ['Rawi ID', |
|
'Gender', |
|
'Official Name', |
|
'Famous Name', |
|
'Title Name', |
|
'Kunya', |
|
'Laqab', |
|
'Occupation', |
|
'Wasf', |
|
'Madhhab', |
|
'Nasab', |
|
'Narrator Rank', |
|
'Generation', |
|
'Birth Date', |
|
'Death Date', |
|
'Age', |
|
'Place of Stay', |
|
'Place of Death', |
|
'Mawla Relation', |
|
'Famous Relatives', |
|
'Number of Narrations', |
|
'Avg. Death Date', |
|
'Whole Number Death'] |
|
|
|
dct = {} |
|
for itrm in lst: |
|
dct[itrm] = Value('string') |
|
dct['Rawi ID'] = Value('int32') |
|
features = Features(dct) |
|
|
|
narrator_bios = load_dataset("FDSRashid/hadith_info", data_files = 'Teacher_Bios.csv', token = Secret_token,features=features ) |
|
narrator_bios = narrator_bios['train'].to_pandas() |
|
narrator_bios.loc[49845, 'Narrator Rank'] = 'ุฑุณูู ุงููู' |
|
narrator_bios.loc[49845, 'Number of Narrations'] = 0 |
|
narrator_bios['Number of Narrations'] = narrator_bios['Number of Narrations'].astype(int) |
|
narrator_bios.loc[49845, 'Number of Narrations'] = 22000 |
|
narrator_bios['Generation'] = narrator_bios['Generation'].replace([None], [-1]) |
|
narrator_bios['Generation'] = narrator_bios['Generation'].astype(int) |
|
|
|
|
|
def get_node_info(node): |
|
node_info = narrator_bios[narrator_bios['Rawi ID'] == int(node)] |
|
|
|
student_narrations = node_info['Number of Narrations'].iloc[0] if not node_info.empty else 1 |
|
student_gen = node_info['Generation'].iloc[0] if not node_info.empty else -1 |
|
student_rank = node_info['Narrator Rank'].iloc[0] if not node_info.empty else 'ููุงู' |
|
node_name = node_info['Famous Name'].iloc[0] if not node_info.empty else 'ููุงู' |
|
return node_info,student_narrations,student_gen, student_rank, node_name |
|
|
|
def network_narrator(narrator_id): |
|
edge_narrator = edge_info[(edge_info['Source'] == str(narrator_id)) | (edge_info['Destination'] == str(narrator_id))] |
|
edge_full = edge_narrator[['Taraf Count', 'Hadith Count', 'Isnad Count', 'Source', 'Book Count', 'Destination']] |
|
edge_full['Teacher'] = edge_full['Source'].apply(lambda x: get_node_info(x)[-1] ) |
|
edge_full['Student'] = edge_full['Destination'].apply(lambda x: get_node_info(x)[-1] ) |
|
return edge_full.rename(columns = {'Taraf Count': 'Tarafs', 'Hadith Count':'Hadiths', 'Isnad Count':'Isnads', 'Book Count':'Books'}) |
|
|
|
def narrator_retriever(name): |
|
if 'ALL' in name or 'all' in name: |
|
return narrator_bios |
|
else: |
|
full_names = name.replace(', ', '|').replace(',', '|') |
|
return narrator_bios[(narrator_bios['Official Name'].apply(lambda x: araby.strip_diacritics(x)).str.contains(araby.strip_diacritics(name), regex=True)) | (narrator_bios['Famous Name'].apply(lambda x: araby.strip_diacritics(x)).str.contains(araby.strip_diacritics(name), regex=True)) | (narrator_bios['Rawi ID'].astype(str).isin(full_names.split('|'))) | (narrator_bios['Kunya'].apply(lambda x: araby.strip_diacritics(x)).str.contains(araby.strip_diacritics(name), regex=True)) | ((narrator_bios['Laqab'].apply(lambda x: araby.strip_diacritics(x)).str.contains(araby.strip_diacritics(name), regex=True)))] |
|
|
|
|
|
with gr.Blocks(css=css) as demo: |
|
gr.Markdown("Search Narrators using this tool or Retrieve Transmissions involving Narrator") |
|
with gr.Tab("Search Narrator"): |
|
text_input = gr.Textbox() |
|
text_output = gr.DataFrame() |
|
text_button = gr.Button("Search") |
|
text_button.click(narrator_retriever, inputs=text_input, outputs=text_output) |
|
|
|
with gr.Tab("View Network"): |
|
image_input = gr.Number() |
|
image_button = gr.Button("Retrieve!") |
|
image_button.click(network_narrator, inputs=[image_input], outputs=[gr.DataFrame(wrap=True)]) |
|
|
|
|
|
|
|
|
|
demo.launch() |
|
|
|
|