import streamlit as st import spacy from transformers import pipeline from PIL import Image nlp = spacy.load("./models/en_core_web_sm") st.title("SpaGAN Demo") st.write("Enter a text, and the system will highlight the geo-entities within it.") # Define a color map and descriptions for different entity types COLOR_MAP = { 'FAC': ('red', 'Facilities (e.g., buildings, airports)'), 'ORG': ('blue', 'Organizations (e.g., companies, institutions)'), 'LOC': ('purple', 'Locations (e.g., mountain ranges, water bodies)'), 'GPE': ('green', 'Geopolitical Entities (e.g., countries, cities)') } # Display the color key with descriptions st.write("**Color Key:**") for label, (color, description) in COLOR_MAP.items(): st.markdown(f"- **{label}**: {color} - {description}", unsafe_allow_html=True) # Text input user_input = st.text_area("Input Text", height=200) # Process the text when the button is clicked if st.button("Highlight Geo-Entities"): if user_input.strip(): # Process the text using spaCy doc = nlp(user_input) # Generate highlighted text with different colors for each entity type highlighted_text = "" last_pos = 0 for ent in doc.ents: color = COLOR_MAP.get(ent.label_, ('black', ''))[0] # Default to black if label not in map # Add text before the entity highlighted_text += user_input[last_pos:ent.start_char] # Add the highlighted entity text highlighted_text += f"{ent.text}" # Update the position last_pos = ent.end_char # Add any remaining text after the last entity highlighted_text += user_input[last_pos:] # Display the highlighted text with HTML support st.markdown(highlighted_text, unsafe_allow_html=True) else: st.error("Please enter some text.")