from pandas import DataFrame
from src.application.config import WORD_BREAK
from src.application.image.helper import encode_image
from src.application.image.image import ImageDetector
from src.application.text.helper import replace_leading_spaces
from src.application.text.text import TextDetector
def create_ordinary_user_table(
aligned_sentences_df: DataFrame,
text: TextDetector,
image: ImageDetector,
) -> str:
"""
Creates an HTML table comparing input news with source news
for ordinary users.
Args:
aligned_sentences_df (DataFrame): Aligned sentence data.
text (TextDetector): Text comparison data.
image (ImageDetector): Image comparison data.
Returns:
A string representing the HTML table.
"""
rows = []
if image.input is not None:
rows.append(format_image_ordinary_user_row(image))
if text.input is not None:
rows.append(format_text_ordinary_user_row(aligned_sentences_df, text))
table = "\n".join(rows)
return f"""
Comparison between input news and source news:
Input news |
Forensic |
Originality |
{table}
"""
def format_text_ordinary_user_row(
aligned_sentences_df,
text,
) -> str:
"""
Formats a row for the text in the ordinary user table.
Args:
aligned_sentences_df (DataFrame): Aligned sentence data.
text (TextDetector): Text comparison data.
Returns:
A string representing the HTML table row for the text.
"""
input_sentences = ""
source_text_html = ""
urls = []
for _, row in aligned_sentences_df.iterrows():
if row["input"] is None:
continue
input_sentences += replace_leading_spaces(row["input"]) + "
"
url = row["url"]
if url not in urls:
urls.append(url)
source_text_html += f"""{url}
"""
return f"""
{input_sentences} |
{text.prediction_label[0]}
({text.prediction_score[0] * 100:.2f}%) |
{source_text_html} |
"""
def format_image_ordinary_user_row(image: ImageDetector) -> str:
"""
Formats a row for the image in the ordinary user table.
Args:
image: Image comparison data.
Returns:
A string representing the HTML table row for the image.
"""
if image.input is None:
return ""
# Put image, label, and score into html tag
if image.referent_url is not None or image.referent_url != "":
if "http" in image.input:
input_image = (
f"""{image.input}""" # noqa: E501
)
else:
base64_image = encode_image(image.input)
input_image = f"""
""" # noqa: E501
source_image_html = f"""{image.referent_url}""" # noqa: E501
else:
source_image_html = ""
return f"""
{input_image} |
{image.prediction_label} ({image.prediction_score:.2f}%) |
{source_image_html} |
"""