DarkTrawl / app.py
darkbat's picture
Update app.py
632a211 verified
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()