pmkhanh7890's picture
refactor
e58707f
raw
history blame
2.31 kB
from src.application.text.helper import (
extract_starts_ends,
filter_indices,
)
def color_text(
text: str,
colored_idx: list[dict],
highlighted_idx: list[int],
) -> str:
"""
Colors specific words in a text based on provided indices.
1. splits the text into words
2. filters the indices
3. wraps the words within the specified ranges with a coloring tag
Args:
text (str): The input text.
colored_idx (list): A list of dictionaries,
where each dictionary contains
'start' and 'end' keys representing indices of words to color.
highlighted_idx (list): A list of indices to exclude from coloring.
Returns:
str: The text with colored words.
"""
sentence = ""
words = text.split()
# Extract start and end indices from colored_idx.
starts, ends = extract_starts_ends(colored_idx)
# Filter the start and end indices to exclude highlighted_idx.
starts, ends = filter_indices(starts, ends, highlighted_idx)
previous_end = 0
for start, end in zip(starts, ends):
# Add the words before the current colored range to the sentence.
sentence += " ".join(words[previous_end:start])
# Add the colored range to the sentence.
equal_words = " ".join(words[start:end])
sentence += f" <span style='color:#00FF00;'>{equal_words}</span> "
# Update the previous end index.
previous_end = end
# Add the remaining words after the last colored range to the sentence.
sentence += " ".join(words[previous_end:])
return sentence
def format_entity_count(entity_count: int) -> str:
"""
Generates a text description based on the number of altered entities.
Args:
entity_count (int): The number of altered entities.
Returns:
str: A text description of the entity count.
- "" if entity_count is 0 or negative.
- "with 1 altered entity" if entity_count is 1.
- "with altered entities" if entity_count is greater than 1.
"""
if entity_count <= 0:
entity_count_text = ""
elif entity_count == 1:
entity_count_text = "with 1 altered entity"
else:
entity_count_text = "with altered entities"
return entity_count_text