Spaces:
Runtime error
Runtime error
| from typing import Dict, List, Tuple, Union | |
| import streamlit as st | |
| from annotated_text import annotated_text | |
| from analyzer import NewsAnalyzer | |
| def run() -> None: | |
| analyzer = NewsAnalyzer( | |
| category_model_name="elozano/news-category", | |
| fake_model_name="elozano/news-fake", | |
| clickbait_model_name="elozano/news-clickbait", | |
| ner_model_name="dslim/bert-base-NER", | |
| ) | |
| st.title("📰 News Analyzer") | |
| headline = st.text_input("Headline:") | |
| content = st.text_input("Content:") | |
| if headline == "": | |
| st.error("Please, provide a headline.") | |
| else: | |
| if content == "": | |
| st.warning( | |
| "Please, provide both headline and content to achieve better results." | |
| ) | |
| button = st.button("Analyze") | |
| if button: | |
| predictions = analyzer(headline=headline, content=content) | |
| col1, _, col2 = st.columns([2, 1, 5]) | |
| with col1: | |
| st.subheader("Analysis:") | |
| category_prediction = predictions["category"] | |
| st.markdown( | |
| f"{category_prediction['emoji']} **Category**: {category_prediction['label']}" | |
| ) | |
| clickbait_prediction = predictions["clickbait"] | |
| st.markdown( | |
| f"{clickbait_prediction['emoji']} **Clickbait**: {'Yes' if clickbait_prediction['label'] == 'Clickbait' else 'No'}" | |
| ) | |
| fake_prediction = predictions["fake"] | |
| st.markdown( | |
| f"{fake_prediction['emoji']} **Fake**: {'Yes' if fake_prediction['label'] == 'Fake' else 'No'}" | |
| ) | |
| with col2: | |
| st.subheader("Headline:") | |
| annotated_text( | |
| *parse_entities(headline, predictions["ner"]["headline"]) | |
| ) | |
| st.subheader("Content:") | |
| if content: | |
| annotated_text( | |
| *parse_entities(content, predictions["ner"]["content"]) | |
| ) | |
| else: | |
| st.error("Content not provided.") | |
| def parse_entities( | |
| text: str, entities: Dict[str, Union[str, int]] | |
| ) -> List[Union[str, Tuple[str, str]]]: | |
| start = 0 | |
| parsed_text = [] | |
| for entity in entities: | |
| parsed_text.append(text[start : entity["start"]]) | |
| parsed_text.append((entity["word"], entity["entity_group"])) | |
| start = entity["end"] | |
| parsed_text.append(text[start:]) | |
| return parsed_text | |
| if __name__ == "__main__": | |
| run() | |