cecilemacaire's picture
Update app.py
8fd9bf8 verified
raw
history blame
2.89 kB
import gradio as gr
import pandas as pd
# Lecture du lexique
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")
# Récupération de l'ID du pictogramme depuis le lexique
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)
# Génération de contenu HTML pour afficher les pictogrammes
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;
border-radius: 5px;
margin-top: 5px;
padding: 2px;
}
img {
background-color: white;
margin: 0;
padding: 0;
border-radius: 6px;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
</style>
'''
for picto_id, lemma in ids:
if picto_id != 0: # pictogramme trouvé
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="100" height="100"/>
<figcaption>{lemma}</figcaption>
</figure>
'''
else: # pictogramme non trouvé
html_content += f'''
<figure>
<figcaption>Token "{lemma}" non trouvé dans le lexique</figcaption>
</figure>
'''
return html_content
# Fonction principale de traitement
def process_text(input_text):
tokens = input_text.strip().split() # Découper l'entrée utilisateur en 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 Application")
gr.Markdown("Saisissez une phrase pour voir les pictogrammes correspondants.")
# Zone de texte et résultats dans une colonne
with gr.Column():
input_text = gr.Textbox(label="Entrez votre texte", placeholder="Exemple : bonjour comment ça va")
output_html = gr.HTML(label="Résultats")
# Bouton pour afficher les résultats
submit_btn = gr.Button("Afficher les pictogrammes")
submit_btn.click(process_text, inputs=input_text, outputs=output_html)
# Lancer l'application
demo.launch()