Spaces:
Sleeping
Sleeping
| 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""" | |
| <h5>Comparison between input news and source news:</h5> | |
| <table border="1" style="width:100%; text-align:left;"> | |
| <col style="width: 340px;"> | |
| <col style="width: 30px;"> | |
| <col style="width: 75px;"> | |
| <thead> | |
| <tr> | |
| <th>Input news</th> | |
| <th>Forensic</th> | |
| <th>Originality</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| {table} | |
| </tbody> | |
| </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"]) + "<br>" | |
| url = row["url"] | |
| if url not in urls: | |
| urls.append(url) | |
| source_text_html += f"""<a href="{url}">{url}</a><br>""" | |
| return f""" | |
| <tr> | |
| <td>{input_sentences}</td> | |
| <td>{text.prediction_label[0]}<br> | |
| ({text.prediction_score[0] * 100:.2f}%)</td> | |
| <td style="{WORD_BREAK}";>{source_text_html}</td> | |
| </tr> | |
| """ | |
| 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"""<a href="{image.input}">{image.input}</a>""" # noqa: E501 | |
| ) | |
| else: | |
| base64_image = encode_image(image.input) | |
| input_image = f"""<img src="data:image/jpeg;base64,{base64_image}" width="100" height="150">""" # noqa: E501 | |
| source_image_html = f"""<a href="{image.referent_url}">{image.referent_url}</a>""" # noqa: E501 | |
| else: | |
| source_image_html = "" | |
| return f""" | |
| <tr> | |
| <td>{input_image}</td> | |
| <td>{image.prediction_label}<br>({image.prediction_score:.2f}%)</td> | |
| <td style="{WORD_BREAK}";>{source_image_html}</td> | |
| </tr> | |
| """ | |