import spacy import re from transformers import pipeline import gradio as gr print("Loading models...") try: nlp = spacy.load("en_core_web_sm") print("SpaCy model loaded successfully!") except OSError as e: print(f"Error loading SpaCy model: {e}") nlp = None summarizer = pipeline("summarization", model="facebook/bart-large-cnn") print("Models loaded successfully!") def analyze_osint(text): if not text: return "Please enter some text to analyze.", [] summary = "" if len(text.split()) > 50: try: summary_result = summarizer(text, max_length=150, min_length=30, do_sample=False) summary = summary_result[0]['summary_text'] except Exception as e: summary = f"Summarization error: {str(e)}" else: summary = "Text is too short to summarize." doc = nlp(text) if nlp else None names = [] orgs = [] locations = [] if doc: names = list(set([ent.text for ent in doc.ents if ent.label_ == 'PERSON'])) orgs = list(set([ent.text for ent in doc.ents if ent.label_ == 'ORG'])) locations = list(set([ent.text for ent in doc.ents if ent.label_ == 'GPE'])) emails = list(set(re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text))) ips = list(set(re.findall(r'\b\d{1,3}(?:\.\d{1,3}){3}\b', text))) socials = list(set(re.findall(r'@(\w{4,15})\b', text))) highlighted_entities = [] def add_to_highlight(entities_list, label): for item in entities_list: highlighted_entities.append((item, label)) add_to_highlight(names, "NAME") add_to_highlight(orgs, "ORG") add_to_highlight(locations, "LOCATION") add_to_highlight(emails, "EMAIL") add_to_highlight(ips, "IP") add_to_highlight(socials, "SOCIAL") return summary, highlighted_entities iface = gr.Interface( fn=analyze_osint, inputs=gr.Textbox(lines=10, label="OSINT Text", placeholder="Paste your OSINT data here..."), outputs=[ gr.Textbox(label="Executive Summary"), gr.HighlightedText(label="Extracted Entities", color_map={ "NAME": "red", "ORG": "blue", "LOCATION": "green", "EMAIL": "orange", "IP": "purple", "SOCIAL": "teal" }) ], title="OSINT Analysis Tool", description="Enter any unstructured text to extract key entities and generate a summary.", allow_flagging="never" ) if __name__ == "__main__": print("===== Application Startup =====") iface.launch()