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:
{table}
Input news Forensic Originality
""" 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} """