Spaces:
Running
Running
from transformers import pipeline | |
import gradio as gr | |
# Load pre-trained pipelines | |
try: | |
summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6") | |
ner = pipeline("ner", model="Davlan/bert-base-multilingual-cased-ner-hrl", aggregation_strategy="simple") | |
except Exception as e: | |
summarizer = None | |
ner = None | |
print("Error loading models:", e) | |
# Nigerian law reference (basic keyword-to-punishment mapping) | |
crime_punishment_map = { | |
"theft": {"law": "Criminal Code Act, Section 390", "punishment": "Up to 3 years imprisonment"}, | |
"armed robbery": {"law": "Robbery and Firearms Act, Section 1", "punishment": "Death penalty or life imprisonment"}, | |
"internet fraud": {"law": "Cybercrime Act, 2015", "punishment": "Minimum of 7 years imprisonment"}, | |
"rape": {"law": "Criminal Law of Lagos State, Section 260", "punishment": "Life imprisonment"}, | |
"murder": {"law": "Criminal Code Act, Section 319", "punishment": "Death penalty"}, | |
"assault": {"law": "Criminal Code Act, Section 351", "punishment": "1 year imprisonment"} | |
} | |
def classify_crime(text): | |
text = text.lower() | |
for crime in crime_punishment_map: | |
if crime in text: | |
return crime, crime_punishment_map[crime] | |
return "unknown", { | |
"law": "N/A", | |
"punishment": "No specific punishment found. Manual review required." | |
} | |
# Main analysis function with full error handling | |
def analyze_text(text): | |
try: | |
if not text.strip(): | |
return "No text provided.", [], {"Crime Type": "N/A", "Applicable Law": "N/A", "Recommended Punishment": "N/A"} | |
summary = summarizer(text, max_length=80, min_length=30, do_sample=False)[0].get("summary_text", "Summary failed.") | |
entities = ner(text) | |
crime_type, law_info = classify_crime(text) | |
return summary, entities, { | |
"Crime Type": crime_type.title() if crime_type != "unknown" else "Unknown", | |
"Applicable Law": law_info["law"], | |
"Recommended Punishment": law_info["punishment"] | |
} | |
except Exception as e: | |
return f"⚠️ An error occurred: {str(e)}", [], { | |
"Crime Type": "Error", | |
"Applicable Law": "Error", | |
"Recommended Punishment": "Error" | |
} | |
# Launch app | |
gr.Interface( | |
fn=analyze_text, | |
inputs=gr.Textbox(lines=12, label="Paste Criminal Case Text"), | |
outputs=[ | |
gr.Textbox(label="Summary"), | |
gr.JSON(label="Extracted Entities"), | |
gr.JSON(label="Legal Analysis / Recommended Punishment") | |
], | |
title="JusticeAI - Legal Case Analyzer", | |
description="Paste any criminal case report. This AI will summarize it, extract important entities, and recommend the legal punishment based on Nigerian law." | |
).launch() |