def escape_special_chars(text):
"""Escapes special characters for safe HTML display."""
text = html.escape(text) # Escapes HTML special characters like <, >, &
# text = text.replace(r"$", r"\$") # Escape the dollar sign properly
text = text.replace(" ", " ") # Preserve double spaces
return text
def infer_ranks(idx, document):
"""Infers the original and new ranks for a document."""
if getattr(document, "baseline_rank", None):
new_rank = idx
original_rank = document.baseline_rank
else:
new_rank = idx
original_rank = None
return new_rank, original_rank
def print_results_html(results):
"""Prints search results in a readable format."""
html_output = """
<style>
.results-container {
font-family: Arial, sans-serif;
background: #1e1e1e;
color: white;
padding: 20px;
border-radius: 10px;
max-width: 800px;
margin: auto;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.5);
}
.result-card {
border: 1px solid #444;
padding: 15px;
margin: 15px 0;
border-radius: 8px;
background: #2a2a2a;
transition: transform 0.2s, box-shadow 0.2s;
}
.result-card:hover {
transform: scale(1.02);
box-shadow: 0px 4px 10px rgba(255, 255, 255, 0.1);
}
.rank-container {
display: flex;
gap: 10px; /* Space between rank bubbles */
align-items: center;
margin-bottom: 10px;
}
.rank-badge {
font-weight: bold;
font-size: 16px;
padding: 6px 12px;
border-radius: 20px;
display: inline-block;
color: white;
}
.badge-blue {
background: #1E88E5;
}
.badge-green {
background: #28A745;
}
.headline {
font-size: 20px;
font-weight: bold;
color: #ffcc00;
}
.timestamp {
font-size: 14px;
color: #cccccc;
}
.relevance {
font-size: 16px;
font-weight: bold;
color: #00d1b2;
}
.text {
font-size: 16px;
line-height: 1.6;
color: #dddddd;
}
</style>
<div class='results-container'>
"""
for idx, document in enumerate(results, 1):
# Infer ranks for the document
new_rank, original_rank = infer_ranks(idx, document)
headline = escape_special_chars(document.headline.title())
timestamp = document.timestamp.strftime("%Y-%m-%d %H:%M:%S")
relevance = round(document.chunks[0].relevance, 2)
first_chunk_text = escape_special_chars(document.chunks[0].text)
html_output += """
<div class='result-card'>
"""
# Display rank badges if available
if original_rank:
html_output += f"""
<div class='rank-container'>
<div class='rank-badge badge-green'>New Rank: {new_rank}</div>
<div class='rank-badge badge-blue'>Original Rank: {original_rank}</div>
</div>
"""
else:
html_output += f"""
<div class='rank-container'>
<div class='rank-badge badge-blue'>Rank: {new_rank}</div>
</div>
"""
html_output += f"""
<div class='headline'>{headline}</div>
<div class='timestamp'><strong>Timestamp:</strong> {timestamp}</div>
<div class='relevance'><strong>📘 Relevance:</strong> {relevance}</div>
<div class='text'>{first_chunk_text}</div>
</div>
"""
html_output += "</div>"
display(HTML(html_output))