# ui/format.py
from string import Template
class ResultFormatter:
@staticmethod
def format_entity_list(entities, entity_type):
items = entities.get(entity_type, [])
if not items:
return '
None detected'
return ''.join(f'{item}' for item in items)
@staticmethod
def format_entity_relationships(relationships):
if not relationships:
return ''
items = []
for rel in relationships:
# Use correct SQL column names
item = f"""
{rel['source_text']} →
{rel['relationship_type'].replace('_to_', ' to ')} →
{rel['target_text']}
Confidence: {int(rel['confidence'] * 100)}%
"""
items.append(item)
return ''.join(items)
@staticmethod
def format_related_events(events):
if not events:
return ''
items = []
for event in events:
shared = f" | Shared Entities: {event['shared_entities']}" if event.get('shared_entities') else ''
item = f"""
{event['text']}
{event['timestamp']} |
Confidence: {int(event['confidence'] * 100)}%{shared}
"""
items.append(item)
return ''.join(items)
@staticmethod
def format_results(analysis_result):
if "error" in analysis_result:
return f"Error: {analysis_result['error']}
"
# Load template
with open('templates/results.html', 'r') as f:
template = Template(f.read())
# Prepare template variables
confidence = analysis_result['confidence']
confidence_class = "confidence-high" if confidence >= 0.6 else "confidence-low"
return template.substitute(
confidence_class=confidence_class,
confidence_score=int(confidence * 100),
verification_warning=ResultFormatter._verification_warning(analysis_result),
people_list=ResultFormatter.format_entity_list(analysis_result['entities'], 'people'),
org_list=ResultFormatter.format_entity_list(analysis_result['entities'], 'organizations'),
location_list=ResultFormatter.format_entity_list(analysis_result['entities'], 'locations'),
temporal_list=ResultFormatter.format_entity_list(analysis_result['entities'], 'temporal'),
hashtag_list=ResultFormatter.format_entity_list(analysis_result['entities'], 'hashtags'),
entity_relationships=ResultFormatter.format_entity_relationships(analysis_result.get('entity_relationships')),
validation_success=ResultFormatter._validation_success(analysis_result),
related_events=ResultFormatter.format_related_events(analysis_result.get('related_events')),
base_confidence=int(confidence * 70),
entity_boost=int((confidence - 0.7 if confidence > 0.7 else 0) * 100),
types_detected=len([t for t in ['people', 'organizations', 'locations', 'temporal', 'hashtags']
if analysis_result['entities'].get(t)]),
total_entities=sum(len(e) for e in analysis_result['entities'].values() if isinstance(e, list)),
direct_relationships=len(analysis_result.get('entity_relationships', [])),
related_event_count=len(analysis_result.get('related_events', []))
)
@staticmethod
def _verification_warning(result):
if not result["verification_needed"]:
return ''
return '''
⚠ Verification Required: Low confidence score detected. Please verify the extracted information.
'''
@staticmethod
def _validation_success(result):
if result["verification_needed"]:
return ''
return '''
✅ Event Validated: The extracted information meets confidence thresholds.
'''