bertrend 0.3.7__tar.gz → 0.3.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bertrend-0.3.7 → bertrend-0.3.8}/PKG-INFO +2 -2
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/config/bertopic_default_config.toml +1 -1
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/data_loading_component.py +46 -11
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/i18n_translations.py +12 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +15 -19
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +15 -8
- bertrend-0.3.8/bertrend/llm_utils/newsletter.css +145 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/llm_utils/newsletter_features.py +148 -104
- bertrend-0.3.8/bertrend/llm_utils/newsletter_model.py +44 -0
- bertrend-0.3.8/bertrend/llm_utils/newsletter_outlook_template.html +179 -0
- bertrend-0.3.8/bertrend/llm_utils/newsletter_template.html +106 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_integration.py +2 -2
- bertrend-0.3.8/bertrend/tests/test_newsletter_features.py +625 -0
- bertrend-0.3.8/bertrend/tests/test_newsletter_model.py +423 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/utils/data_loading.py +26 -18
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/tabs/tab3.py +4 -2
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/newsletters/__main__.py +12 -5
- {bertrend-0.3.7 → bertrend-0.3.8}/pyproject.toml +2 -2
- bertrend-0.3.7/bertrend/llm_utils/newsletter.css +0 -131
- bertrend-0.3.7/bertrend/tests/test_newsletter_features.py +0 -354
- {bertrend-0.3.7 → bertrend-0.3.8}/AUTHORS.txt +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/LICENSE.md +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/README.md +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/BERTopicModel.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/BERTrend.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/config/parameters.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/config/services_default_config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/i18n.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/icons.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/parameters_component.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/demos_utils/state_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/start_summarizer_app.sh +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/start_topic_analysis_app.sh +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/start_weak_signals_app.sh +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/summarization/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/summarization/summarizer_app.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/.streamlit/config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/app.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/app_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/training_page.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/i18n_translations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/weak_signals/.streamlit/config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/weak_signals/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/weak_signals/app.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/weak_signals/visualizations_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/llm_utils/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/llm_utils/openai_client.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/metrics/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/metrics/topic_metrics.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/authentication.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_client.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/README.md +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/config/default_config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/config/settings.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/main.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/models.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/routers/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/routers/authentication.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/routers/embeddings.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/routers/info.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/security.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/start.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/status.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_server/stop.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/embedding_service.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summary/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summary/abstractive_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summary/extractive_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summary/lexrank.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/services/summary/prompts.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/conftest.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_abstractive_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_bertrend.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_cache_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_chatgpt_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_config_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_data_loading.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_data_structure.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_embedding_client.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_extractive_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_installation.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_openai_client.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_representative_docs.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_summarizer.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_topic_description.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_topic_metrics.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_topic_model.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_trend_analysis_data_structure.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_trend_analysis_prompts.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_trend_analysis_visualizations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_trend_analysis_weak_signals.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_utils_init.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/tests/test_visualizations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/topic_analysis/topic_description.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/topic_analysis/visualizations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/data_structure.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/prompts.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/visualizations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/trend_analysis/weak_signals.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/utils/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/utils/cache_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend/utils/config_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/common/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/common/crontab_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/common/mail_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/gmail_credentials.json +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/arxiv_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/config/newsletters/rte_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/__main__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/arxiv_provider.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/atom_feed_provider.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/bing_news_provider.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/data_provider.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/google_news_provider.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/data_provider/utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/.streamlit/config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/app.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/app_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/prompts.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/dataviz/Main_page.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/dataviz/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/dataviz/pages/1_Data_feeds.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/entity_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/spacy/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/spacy/common_factory.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/spacy/dbpedia.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/spacy/nlp.config +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/exploration/geolocalization/spacy/utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/install_feeds_and_newsletters.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/newsletters/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/.streamlit/secrets.toml +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/__init__.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/app.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/authentication.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/dashboard_analysis.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/dashboard_common.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/dashboard_signals.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/feeds_common.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/feeds_config.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/feeds_data.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/i18n_translations.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/llm_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/models_info.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/perf_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/process_new_data.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/report_generation.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/report_template.html +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/report_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/start_demo.sh +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/prospective_demo/streamlit_utils.py +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/start_apps.sh +0 -0
- {bertrend-0.3.7 → bertrend-0.3.8}/bertrend_apps/stop_apps.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: bertrend
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: BERTrend analyses topic evolution over time using state-of-the-art transformer models: topic modelling and LLM
|
|
5
5
|
License: LICENSE.md
|
|
6
6
|
Keywords: topics,BERTopic,transformers,weak signals,LLM
|
|
@@ -57,7 +57,7 @@ Requires-Dist: seaborn (>=0.13.2)
|
|
|
57
57
|
Requires-Dist: sentence-transformers (==3.0.1)
|
|
58
58
|
Requires-Dist: sentencepiece (>=0.2.0)
|
|
59
59
|
Requires-Dist: starlette (>=0.46.2)
|
|
60
|
-
Requires-Dist: streamlit (>=1.
|
|
60
|
+
Requires-Dist: streamlit (>=1.46)
|
|
61
61
|
Requires-Dist: streamlit-code-editor (>=0.1.22)
|
|
62
62
|
Requires-Dist: thefuzz (>=0.22.1)
|
|
63
63
|
Requires-Dist: tiktoken (>=0.8.0)
|
|
@@ -37,6 +37,9 @@ from bertrend.utils.data_loading import (
|
|
|
37
37
|
split_data,
|
|
38
38
|
TIMESTAMP_COLUMN,
|
|
39
39
|
DataLoadingError,
|
|
40
|
+
_file_to_pd,
|
|
41
|
+
_clean_data,
|
|
42
|
+
_check_data,
|
|
40
43
|
)
|
|
41
44
|
|
|
42
45
|
FORMAT_ICONS = {
|
|
@@ -50,7 +53,31 @@ FORMAT_ICONS = {
|
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
|
|
53
|
-
@st.
|
|
56
|
+
@st.dialog(translate("column_selection"))
|
|
57
|
+
def _select_alternative_columns(df: pd.DataFrame, message: str = ""):
|
|
58
|
+
st.warning(message, icon=WARNING_ICON),
|
|
59
|
+
if TEXT_COLUMN not in df.columns:
|
|
60
|
+
text_column = st.selectbox(
|
|
61
|
+
label=translate("text_column_selection"), options=df.columns
|
|
62
|
+
)
|
|
63
|
+
else:
|
|
64
|
+
text_column = None
|
|
65
|
+
if TIMESTAMP_COLUMN not in df.columns:
|
|
66
|
+
timestamp_column = st.selectbox(
|
|
67
|
+
label=translate("timestamp_column_selection"), options=df.columns
|
|
68
|
+
)
|
|
69
|
+
else:
|
|
70
|
+
timestamp_column = None
|
|
71
|
+
if st.button("Submit"):
|
|
72
|
+
if text_column:
|
|
73
|
+
df[TEXT_COLUMN] = df[text_column]
|
|
74
|
+
if timestamp_column:
|
|
75
|
+
df[TIMESTAMP_COLUMN] = df[timestamp_column]
|
|
76
|
+
st.session_state["modified_df"] = df
|
|
77
|
+
st.rerun()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# @st.cache_data(ttl=60 * 60 * 24)
|
|
54
81
|
def _process_uploaded_files(
|
|
55
82
|
files: list[UploadedFile],
|
|
56
83
|
) -> list[pd.DataFrame]:
|
|
@@ -61,20 +88,23 @@ def _process_uploaded_files(
|
|
|
61
88
|
with open(tmpdir + "/" + f.name, "wb") as tmp_file:
|
|
62
89
|
tmp_file.write(f.getvalue())
|
|
63
90
|
if tmp_file is not None:
|
|
91
|
+
if "modified_df" in st.session_state:
|
|
92
|
+
df = st.session_state["modified_df"]
|
|
93
|
+
st.session_state.pop("modified_df")
|
|
94
|
+
else:
|
|
95
|
+
df = _file_to_pd(Path(tmp_file.name))
|
|
64
96
|
try:
|
|
65
|
-
df
|
|
66
|
-
Path(tmp_file.name),
|
|
67
|
-
SessionStateManager.get("language", "French"),
|
|
68
|
-
)
|
|
97
|
+
_check_data(df, Path(tmp_file.name))
|
|
69
98
|
except DataLoadingError as dle:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
file_name=f.name, error=dle
|
|
73
|
-
),
|
|
74
|
-
icon=WARNING_ICON,
|
|
99
|
+
message = translate("error_loading_file").format(
|
|
100
|
+
file_name=f.name, error=dle
|
|
75
101
|
)
|
|
102
|
+
if "modified_df" in st.session_state:
|
|
103
|
+
st.session_state.pop("modified_df")
|
|
104
|
+
_select_alternative_columns(df, message)
|
|
76
105
|
df = None
|
|
77
106
|
if df is not None:
|
|
107
|
+
df = _clean_data(df, SessionStateManager.get("language", "French"))
|
|
78
108
|
dataframes.append(df)
|
|
79
109
|
return dataframes
|
|
80
110
|
|
|
@@ -99,7 +129,12 @@ def _load_files(
|
|
|
99
129
|
),
|
|
100
130
|
icon=WARNING_ICON,
|
|
101
131
|
)
|
|
102
|
-
df
|
|
132
|
+
_select_alternative_columns(df)
|
|
133
|
+
df = (
|
|
134
|
+
st.session_state["modified_df"]
|
|
135
|
+
if "modified_df" in st.session_state
|
|
136
|
+
else None
|
|
137
|
+
)
|
|
103
138
|
if df is not None:
|
|
104
139
|
dfs.append(df)
|
|
105
140
|
return dfs
|
|
@@ -137,4 +137,16 @@ TRANSLATIONS = {
|
|
|
137
137
|
"fr": "Paramètres et contrôles",
|
|
138
138
|
"en": "Settings and Controls",
|
|
139
139
|
},
|
|
140
|
+
"column_selection": {
|
|
141
|
+
"fr": "Sélection des colonnes",
|
|
142
|
+
"en": "Column Selection",
|
|
143
|
+
},
|
|
144
|
+
"text_column_selection": {
|
|
145
|
+
"fr": "Sélection de la colonne contenant le texte",
|
|
146
|
+
"en": "Select Column Containing Text",
|
|
147
|
+
},
|
|
148
|
+
"timestamp_column_selection": {
|
|
149
|
+
"fr": "Sélection de la colonne contenant l'horodatage",
|
|
150
|
+
"en": "Select Column Containing Timestamp",
|
|
151
|
+
},
|
|
140
152
|
}
|
{bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py
RENAMED
|
@@ -282,27 +282,23 @@ def create_topic_documents(
|
|
|
282
282
|
return folder_name, documents
|
|
283
283
|
|
|
284
284
|
|
|
285
|
+
@st.cache_data
|
|
285
286
|
def _display_topic_description(filtered_df: pd.DataFrame):
|
|
286
287
|
"""Display a human-readable description of the selected topic using a LLM."""
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
filtered_df,
|
|
302
|
-
language_code=language_code,
|
|
303
|
-
)
|
|
304
|
-
with st.container(border=True):
|
|
305
|
-
st.markdown(f"### {gpt_description.title}\n{gpt_description.description}")
|
|
288
|
+
with st.spinner(translate("generating_description")):
|
|
289
|
+
language_code = (
|
|
290
|
+
"fr"
|
|
291
|
+
if SessionStateManager.get("internationalization_language") == "fr"
|
|
292
|
+
else "en"
|
|
293
|
+
)
|
|
294
|
+
gpt_description = generate_topic_description(
|
|
295
|
+
st.session_state["topic_model"],
|
|
296
|
+
st.session_state["selected_topic_number"],
|
|
297
|
+
filtered_df,
|
|
298
|
+
language_code=language_code,
|
|
299
|
+
)
|
|
300
|
+
with st.container(border=True):
|
|
301
|
+
st.markdown(f"### {gpt_description.title}\n{gpt_description.description}")
|
|
306
302
|
|
|
307
303
|
|
|
308
304
|
def main():
|
{bertrend-0.3.7 → bertrend-0.3.8}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py
RENAMED
|
@@ -6,6 +6,7 @@ import inspect
|
|
|
6
6
|
|
|
7
7
|
import pandas as pd
|
|
8
8
|
import streamlit as st
|
|
9
|
+
import streamlit.components.v1 as components
|
|
9
10
|
from pathlib import Path
|
|
10
11
|
|
|
11
12
|
from bertrend.demos.demos_utils.i18n import translate
|
|
@@ -16,13 +17,17 @@ from bertrend.demos.demos_utils.state_utils import (
|
|
|
16
17
|
register_multiple_widget,
|
|
17
18
|
SessionStateManager,
|
|
18
19
|
)
|
|
20
|
+
from bertrend.llm_utils.newsletter_model import Newsletter
|
|
19
21
|
from bertrend.services.summary.abstractive_summarizer import AbstractiveSummarizer
|
|
20
22
|
from bertrend.services.summary.chatgpt_summarizer import GPTSummarizer
|
|
21
23
|
from bertrend.services.summary.extractive_summarizer import (
|
|
22
24
|
ExtractiveSummarizer,
|
|
23
25
|
EnhancedExtractiveSummarizer,
|
|
24
26
|
)
|
|
25
|
-
from bertrend.llm_utils.newsletter_features import
|
|
27
|
+
from bertrend.llm_utils.newsletter_features import (
|
|
28
|
+
generate_newsletter,
|
|
29
|
+
render_newsletter_html,
|
|
30
|
+
)
|
|
26
31
|
|
|
27
32
|
|
|
28
33
|
# Define summarizer options
|
|
@@ -34,9 +39,7 @@ SUMMARIZER_OPTIONS_MAPPER = {
|
|
|
34
39
|
}
|
|
35
40
|
|
|
36
41
|
|
|
37
|
-
def generate_newsletter_wrapper(
|
|
38
|
-
df: pd.DataFrame, df_split: pd.DataFrame
|
|
39
|
-
) -> tuple[str, str, str]:
|
|
42
|
+
def generate_newsletter_wrapper(df: pd.DataFrame, df_split: pd.DataFrame) -> Newsletter:
|
|
40
43
|
"""Wrapper function to generate newsletter based on user settings."""
|
|
41
44
|
top_n_topics = (
|
|
42
45
|
None
|
|
@@ -172,10 +175,14 @@ def main():
|
|
|
172
175
|
|
|
173
176
|
# Display generated newsletters
|
|
174
177
|
if "newsletters" in st.session_state:
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
st.session_state["newsletters"]
|
|
178
|
-
Path(inspect.getfile(generate_newsletter)).parent
|
|
178
|
+
components.html(
|
|
179
|
+
render_newsletter_html(
|
|
180
|
+
st.session_state["newsletters"],
|
|
181
|
+
html_template=Path(inspect.getfile(generate_newsletter)).parent
|
|
182
|
+
/ "newsletter_template.html",
|
|
183
|
+
custom_css=Path(inspect.getfile(generate_newsletter)).parent
|
|
184
|
+
/ "newsletter.css",
|
|
185
|
+
language=SessionStateManager.get("internationalization_language"),
|
|
179
186
|
),
|
|
180
187
|
height=800,
|
|
181
188
|
scrolling=True,
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024, RTE (https://www.rte-france.com)
|
|
3
|
+
* See AUTHORS.txt
|
|
4
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
5
|
+
* This file is part of BERTrend.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* General Body Styles */
|
|
9
|
+
body {
|
|
10
|
+
font-family: Arial, sans-serif;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
background-color: #f4f4f9;
|
|
14
|
+
color: #333;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.container {
|
|
18
|
+
max-width: 800px;
|
|
19
|
+
margin: 0 auto;
|
|
20
|
+
padding: 20px;
|
|
21
|
+
background-color: #fff;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
h1 {
|
|
25
|
+
font-size: 32px;
|
|
26
|
+
color: #333;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.period {
|
|
30
|
+
font-size: 18px;
|
|
31
|
+
color: #555;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Topic Styles */
|
|
35
|
+
.topic {
|
|
36
|
+
margin-top: 30px;
|
|
37
|
+
padding-left: 20px; /* Added padding to make room for the colored bar */
|
|
38
|
+
border-left: 10px solid transparent; /* Default to transparent */
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Topic Types - Adjusted to apply colors to the entire topic */
|
|
42
|
+
.topic.strong {
|
|
43
|
+
border-left-color: #4caf50; /* Green for strong */
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.topic.weak {
|
|
47
|
+
border-left-color: #ff9800; /* Orange for weak */
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.topic.noise {
|
|
51
|
+
border-left-color: #9e9e9e; /* Grey for noise */
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
h2 {
|
|
55
|
+
font-size: 24px;
|
|
56
|
+
color: #c50000;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.summary {
|
|
60
|
+
margin: 10px 0;
|
|
61
|
+
font-size: 16px;
|
|
62
|
+
color: #666;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Article Styles */
|
|
66
|
+
.articles {
|
|
67
|
+
margin-top: 15px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.article {
|
|
71
|
+
margin-bottom: 15px;
|
|
72
|
+
padding: 10px;
|
|
73
|
+
background-color: #f9f9f9;
|
|
74
|
+
border-left: none; /* Removed the vertical bar for articles */
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.article h3 {
|
|
78
|
+
font-size: 18px;
|
|
79
|
+
color: #2a2a2a;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* Styling for the Article Title Link */
|
|
83
|
+
.article a {
|
|
84
|
+
text-decoration: none; /* Remove default underline */
|
|
85
|
+
color: #0066cc; /* Blue color for the link */
|
|
86
|
+
font-weight: bold; /* Make the link title bold */
|
|
87
|
+
transition: all 0.3s ease; /* Smooth transition for hover effect */
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Hover Effect */
|
|
91
|
+
.article a:hover {
|
|
92
|
+
color: #005bb5; /* Darker blue on hover */
|
|
93
|
+
text-decoration: underline; /* Underline on hover for better visual feedback */
|
|
94
|
+
border-bottom: 2px solid #005bb5; /* Optional: Add a border for emphasis */
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Date and Source Inline */
|
|
98
|
+
.timestamp {
|
|
99
|
+
display: flex;
|
|
100
|
+
align-items: center;
|
|
101
|
+
font-size: 14px;
|
|
102
|
+
color: grey;
|
|
103
|
+
margin-bottom: 10px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.timestamp .separator {
|
|
107
|
+
margin: 0 5px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.date {
|
|
111
|
+
font-weight: bold;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.source {
|
|
115
|
+
font-style: italic;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Hashtags */
|
|
119
|
+
.hashtags {
|
|
120
|
+
margin-top: 7px;
|
|
121
|
+
}
|
|
122
|
+
.hashtags span {
|
|
123
|
+
display: inline-block;
|
|
124
|
+
margin-right: 8px;
|
|
125
|
+
padding: 2px 8px;
|
|
126
|
+
background: #e8eefa;
|
|
127
|
+
color: #205296;
|
|
128
|
+
border-radius: 6px;
|
|
129
|
+
font-size: 12px;
|
|
130
|
+
font-weight: 500;
|
|
131
|
+
letter-spacing: 0.2px;
|
|
132
|
+
margin-bottom: 2px;
|
|
133
|
+
transition: background 0.16s;
|
|
134
|
+
}
|
|
135
|
+
.hashtags span:hover {
|
|
136
|
+
background: #bfd6f6;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* Footer Styles */
|
|
140
|
+
.footer {
|
|
141
|
+
margin-top: 40px;
|
|
142
|
+
text-align: center;
|
|
143
|
+
font-size: 12px;
|
|
144
|
+
color: #aaa;
|
|
145
|
+
}
|