cecilemacaire's picture
Update app.py
46e5a15 verified
import gradio as gr
import pandas as pd
# Read the lexicon
def read_lexicon(lexicon_file):
df = pd.read_csv(lexicon_file, sep='\t')
df['keyword_no_cat'] = df['lemma'].str.split(' #').str[0].str.strip().str.replace(' ', '_')
return df
lexicon = read_lexicon("lexicon.csv")
# Get the ARASAAC pictogram ID from the lexicon
def get_id_picto_from_predicted_lemma(df_lexicon, lemma):
lemma = lemma.strip().lower()
if lemma.endswith("!"):
lemma = lemma[:-1]
id_picto = df_lexicon.loc[df_lexicon['keyword_no_cat'] == lemma, 'id_picto'].tolist()
return (id_picto[0], lemma) if id_picto else (0, lemma)
# HTML content to show the pictogram images
def generate_html(ids):
html_content = '''
<style>
figure {
display: inline-block;
text-align: center;
font-family: Arial, sans-serif;
margin: 10px;
}
figcaption {
color: black;
background-color: white;
margin-top: 5px;
padding: 2px;
}
img {
background-color: white;
margin: 0;
padding: 0;
border-radius: 6px;
}
</style>
'''
for picto_id, lemma in ids:
if picto_id != 0: # pictogram id exists
img_url = f"https://static.arasaac.org/pictograms/{picto_id}/{picto_id}_500.png"
html_content += f'''
<figure>
<img src="{img_url}" alt="{lemma}" width="180" height="180"/>
<figcaption>{lemma}</figcaption>
</figure>
'''
else: # not found pictogram
html_content += f'''
<figure>
<figcaption>"{lemma}" is not in the lexicon</figcaption>
</figure>
'''
return html_content
# Process the input of the user
def process_text(input_text):
tokens = input_text.strip().split() # cut the sequence into tokens
pictogram_ids = [get_id_picto_from_predicted_lemma(lexicon, token) for token in tokens]
return generate_html(pictogram_ids)
# Configuration de l'interface Gradio
with gr.Blocks() as demo:
gr.Markdown("# Visualize Pictograms")
input_text = gr.Textbox(label="Enter a sequence of pictogram tokens:", placeholder="Example : bonjour je appeler plan_taille")
submit_btn = gr.Button("Generate", variant="secondary")
output_html = gr.HTML(label="ARASAAC Pictograms")
submit_btn.click(process_text, inputs=input_text, outputs=output_html)
# Lancer l'application
demo.launch()