bertrend 0.3.3__tar.gz → 0.3.4__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.3 → bertrend-0.3.4}/PKG-INFO +3 -2
- {bertrend-0.3.3 → bertrend-0.3.4}/README.md +1 -1
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/demos_utils/data_loading_component.py +76 -36
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/demos_utils/embed_documents_component.py +4 -4
- bertrend-0.3.4/bertrend/demos/demos_utils/i18n.py +95 -0
- bertrend-0.3.4/bertrend/demos/demos_utils/i18n_translations.py +140 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/demos_utils/parameters_component.py +10 -10
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/app.py +16 -9
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +34 -35
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +14 -13
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +62 -54
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +13 -13
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/demo_pages/training_page.py +24 -32
- bertrend-0.3.4/bertrend/demos/topic_analysis/i18n_translations.py +359 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/weak_signals/app.py +77 -80
- bertrend-0.3.4/bertrend/demos/weak_signals/i18n_translations.py +287 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/weak_signals/visualizations_utils.py +37 -31
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/embedding_client.py +1 -1
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/utils/data_loading.py +28 -2
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/__main__.py +3 -3
- bertrend-0.3.3/bertrend_apps/data_provider/curebot_provider.py → bertrend-0.3.4/bertrend_apps/data_provider/atom_feed_provider.py +1 -1
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +15 -8
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/old_veille_analyse.py +3 -3
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/app.py +8 -4
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/dashboard_analysis.py +10 -6
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/dashboard_common.py +6 -7
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/dashboard_signals.py +6 -4
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/feeds_config.py +7 -7
- bertrend-0.3.3/bertrend_apps/prospective_demo/i18n.py → bertrend-0.3.4/bertrend_apps/prospective_demo/i18n_translations.py +23 -68
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/process_new_data.py +20 -2
- {bertrend-0.3.3 → bertrend-0.3.4}/pyproject.toml +2 -1
- bertrend-0.3.3/bertrend/demos/demos_utils/messages.py +0 -11
- bertrend-0.3.3/bertrend/demos/topic_analysis/messages.py +0 -13
- bertrend-0.3.3/bertrend/demos/weak_signals/messages.py +0 -32
- {bertrend-0.3.3 → bertrend-0.3.4}/AUTHORS.txt +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/LICENSE.md +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/BERTopicModel.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/BERTrend.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/config/bertopic_default_config.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/config/parameters.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/config/services_default_config.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/demos_utils/icons.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/demos_utils/state_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/start_summarizer_app.sh +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/start_topic_analysis_app.sh +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/start_weak_signals_app.sh +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/summarization/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/summarization/summarizer_app.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/app_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/demos/weak_signals/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/llm_utils/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/llm_utils/newsletter.css +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/llm_utils/newsletter_features.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/llm_utils/openai_client.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/metrics/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/metrics/topic_metrics.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/authentication.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/embedding_service.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summary/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summary/abstractive_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summary/extractive_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summary/lexrank.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/services/summary/prompts.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/conftest.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_abstractive_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_bertrend.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_cache_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_chatgpt_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_config_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_data_loading.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_data_structure.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_embedding_client.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_extractive_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_installation.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_integration.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_newsletter_features.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_openai_client.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_representative_docs.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_summarizer.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_topic_description.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_topic_metrics.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_topic_model.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_trend_analysis_data_structure.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_trend_analysis_prompts.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_trend_analysis_visualizations.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_trend_analysis_weak_signals.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_utils_init.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/tests/test_visualizations.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/topic_analysis/topic_description.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/topic_analysis/visualizations.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/data_structure.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/prompts.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/visualizations.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/trend_analysis/weak_signals.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/utils/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/utils/cache_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend/utils/config_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/common/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/common/crontab_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/common/mail_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/gmail_credentials.json +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/arxiv_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/config/newsletters/rte_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/arxiv_provider.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/bing_news_provider.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/data_provider.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/google_news_provider.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/data_provider/utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/app.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/app_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/prompts.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/curebot/tabs/tab3.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/dataviz/Main_page.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/dataviz/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/dataviz/pages/1_Data_feeds.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/entity_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/spacy/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/spacy/common_factory.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/spacy/dbpedia.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/spacy/nlp.config +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/exploration/geolocalization/spacy/utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/install_feeds_and_newsletters.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/newsletters/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/newsletters/__main__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/.streamlit/secrets.toml +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/__init__.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/authentication.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/feeds_common.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/feeds_data.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/llm_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/models_info.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/perf_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/report_generation.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/report_template.html +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/report_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/start_demo.sh +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/prospective_demo/streamlit_utils.py +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/bertrend_apps/start_apps.sh +0 -0
- {bertrend-0.3.3 → bertrend-0.3.4}/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.4
|
|
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
|
|
@@ -41,6 +41,7 @@ Requires-Dist: newspaper4k (>=0.9.3.1) ; extra == "apps"
|
|
|
41
41
|
Requires-Dist: nltk (>=3.9.1)
|
|
42
42
|
Requires-Dist: numpy (<2)
|
|
43
43
|
Requires-Dist: openai (>=1.77.0)
|
|
44
|
+
Requires-Dist: openpyxl (>=3.1.5)
|
|
44
45
|
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (==1.25.0)
|
|
45
46
|
Requires-Dist: pandas (>=2.2.2)
|
|
46
47
|
Requires-Dist: plotly (>=5.24.1)
|
|
@@ -78,7 +79,7 @@ Description-Content-Type: text/markdown
|
|
|
78
79
|
[](https://github.com/rte-france/BERTrend/issues)
|
|
79
80
|
[](https://pepy.tech/project/bertrend)
|
|
80
81
|
[](https://pypi.org/project/bertrend/)
|
|
81
|
-
|
|
82
|
+

|
|
82
83
|

|
|
83
84
|
|
|
84
85
|

|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://github.com/rte-france/BERTrend/issues)
|
|
7
7
|
[](https://pepy.tech/project/bertrend)
|
|
8
8
|
[](https://pypi.org/project/bertrend/)
|
|
9
|
-
|
|
9
|
+

|
|
10
10
|

|
|
11
11
|
|
|
12
12
|

|
|
@@ -11,6 +11,10 @@ import streamlit as st
|
|
|
11
11
|
from streamlit.runtime.uploaded_file_manager import UploadedFile
|
|
12
12
|
|
|
13
13
|
from bertrend import DATA_PATH
|
|
14
|
+
from bertrend.demos.demos_utils.i18n import (
|
|
15
|
+
translate,
|
|
16
|
+
get_current_internationalization_language,
|
|
17
|
+
)
|
|
14
18
|
from bertrend.demos.demos_utils.icons import (
|
|
15
19
|
WARNING_ICON,
|
|
16
20
|
JSON_ICON,
|
|
@@ -20,7 +24,6 @@ from bertrend.demos.demos_utils.icons import (
|
|
|
20
24
|
CLIENT_STORAGE_ICON,
|
|
21
25
|
SERVER_STORAGE_ICON,
|
|
22
26
|
)
|
|
23
|
-
from bertrend.demos.demos_utils.messages import NO_DATA_AFTER_PREPROCESSING_MESSAGE
|
|
24
27
|
from bertrend.demos.demos_utils.state_utils import (
|
|
25
28
|
save_widget_state,
|
|
26
29
|
register_widget,
|
|
@@ -33,9 +36,9 @@ from bertrend.utils.data_loading import (
|
|
|
33
36
|
load_data,
|
|
34
37
|
split_data,
|
|
35
38
|
TIMESTAMP_COLUMN,
|
|
39
|
+
DataLoadingError,
|
|
36
40
|
)
|
|
37
41
|
|
|
38
|
-
NO_DATASET_WARNING = "Please select at least one dataset to proceed."
|
|
39
42
|
FORMAT_ICONS = {
|
|
40
43
|
"xlsx": XLSX_ICON,
|
|
41
44
|
"csv": CSV_ICON,
|
|
@@ -47,6 +50,7 @@ FORMAT_ICONS = {
|
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
|
|
53
|
+
@st.cache_data(ttl=60 * 60 * 24)
|
|
50
54
|
def _process_uploaded_files(
|
|
51
55
|
files: list[UploadedFile],
|
|
52
56
|
) -> list[pd.DataFrame]:
|
|
@@ -57,15 +61,25 @@ def _process_uploaded_files(
|
|
|
57
61
|
with open(tmpdir + "/" + f.name, "wb") as tmp_file:
|
|
58
62
|
tmp_file.write(f.getvalue())
|
|
59
63
|
if tmp_file is not None:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
try:
|
|
65
|
+
df = load_data(
|
|
66
|
+
Path(tmp_file.name),
|
|
67
|
+
SessionStateManager.get("language", "French"),
|
|
68
|
+
)
|
|
69
|
+
except DataLoadingError as dle:
|
|
70
|
+
st.warning(
|
|
71
|
+
translate("error_loading_file").format(
|
|
72
|
+
file_name=f.name, error=dle
|
|
73
|
+
),
|
|
74
|
+
icon=WARNING_ICON,
|
|
75
|
+
)
|
|
76
|
+
df = None
|
|
64
77
|
if df is not None:
|
|
65
78
|
dataframes.append(df)
|
|
66
79
|
return dataframes
|
|
67
80
|
|
|
68
81
|
|
|
82
|
+
@st.cache_data(ttl=60 * 60 * 24)
|
|
69
83
|
def _load_files(
|
|
70
84
|
files: list[Path],
|
|
71
85
|
) -> list[pd.DataFrame]:
|
|
@@ -73,10 +87,19 @@ def _load_files(
|
|
|
73
87
|
dfs = []
|
|
74
88
|
for selected_file in files:
|
|
75
89
|
file_path = DATA_PATH / selected_file
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
90
|
+
try:
|
|
91
|
+
df = load_data(
|
|
92
|
+
file_path,
|
|
93
|
+
SessionStateManager.get("language", "French"),
|
|
94
|
+
)
|
|
95
|
+
except DataLoadingError as dle:
|
|
96
|
+
st.warning(
|
|
97
|
+
translate("error_loading_file").format(
|
|
98
|
+
file_name=file_path.name, error=dle
|
|
99
|
+
),
|
|
100
|
+
icon=WARNING_ICON,
|
|
101
|
+
)
|
|
102
|
+
df = None
|
|
80
103
|
if df is not None:
|
|
81
104
|
dfs.append(df)
|
|
82
105
|
return dfs
|
|
@@ -85,7 +108,7 @@ def _load_files(
|
|
|
85
108
|
# TODO: if loaded data column names do not match our default values, show a popup for column data mapping
|
|
86
109
|
def display_data_loading_component():
|
|
87
110
|
"""
|
|
88
|
-
Component for a streamlit app about topic
|
|
111
|
+
Component for a streamlit app about topic modeling. It allows choosing data to load and preprocess data.
|
|
89
112
|
Preprocessing of data includes:
|
|
90
113
|
- concatenation of data from different files
|
|
91
114
|
- adding potentially missing columns to make all datasets homogeneous
|
|
@@ -100,23 +123,23 @@ def display_data_loading_component():
|
|
|
100
123
|
state variable "time_filtered_df".
|
|
101
124
|
"""
|
|
102
125
|
# Data loading section
|
|
103
|
-
st.header("
|
|
126
|
+
st.header(translate("data_loading"))
|
|
104
127
|
|
|
105
128
|
# Find files in the current directory and subdirectories
|
|
106
129
|
tab1, tab2 = st.tabs(
|
|
107
130
|
[
|
|
108
|
-
CLIENT_STORAGE_ICON + "
|
|
109
|
-
SERVER_STORAGE_ICON + "
|
|
131
|
+
CLIENT_STORAGE_ICON + " " + translate("local_data"),
|
|
132
|
+
SERVER_STORAGE_ICON + " " + translate("remote_data"),
|
|
110
133
|
]
|
|
111
134
|
)
|
|
112
135
|
compatible_extensions = FORMAT_ICONS.keys()
|
|
113
136
|
|
|
114
137
|
with tab1:
|
|
115
138
|
st.file_uploader(
|
|
116
|
-
label="
|
|
139
|
+
label=translate("select_from_local_storage"),
|
|
117
140
|
type=compatible_extensions,
|
|
118
141
|
accept_multiple_files=True,
|
|
119
|
-
help="
|
|
142
|
+
help=translate("drag_drop_help"),
|
|
120
143
|
on_change=save_widget_state,
|
|
121
144
|
key="uploaded_files",
|
|
122
145
|
)
|
|
@@ -124,7 +147,7 @@ def display_data_loading_component():
|
|
|
124
147
|
with tab2:
|
|
125
148
|
register_widget("selected_files")
|
|
126
149
|
st.multiselect(
|
|
127
|
-
label="
|
|
150
|
+
label=translate("select_from_remote_storage"),
|
|
128
151
|
options=find_compatible_files(DATA_PATH, compatible_extensions),
|
|
129
152
|
default=SessionStateManager.get("selected_files", []),
|
|
130
153
|
key="selected_files",
|
|
@@ -137,7 +160,7 @@ def display_data_loading_component():
|
|
|
137
160
|
and not SessionStateManager.get("selected_files")
|
|
138
161
|
and "initial_df" not in st.session_state
|
|
139
162
|
):
|
|
140
|
-
st.warning(
|
|
163
|
+
st.warning(translate("no_dataset_warning"), icon=WARNING_ICON)
|
|
141
164
|
st.stop()
|
|
142
165
|
|
|
143
166
|
# Load each selected file, then concatenate them
|
|
@@ -159,10 +182,10 @@ def display_data_loading_component():
|
|
|
159
182
|
|
|
160
183
|
# Save state of initial DF (before split and data selection)
|
|
161
184
|
st.session_state["initial_df"] = df.copy()
|
|
162
|
-
# If dfs is None and there is no 'initial_df' in session_state, show
|
|
185
|
+
# If dfs is None and there is no 'initial_df' in session_state, show a warning
|
|
163
186
|
elif "initial_df" not in st.session_state:
|
|
164
187
|
st.warning(
|
|
165
|
-
|
|
188
|
+
translate("no_data_after_preprocessing_message"),
|
|
166
189
|
icon=WARNING_ICON,
|
|
167
190
|
)
|
|
168
191
|
st.stop()
|
|
@@ -172,54 +195,69 @@ def display_data_loading_component():
|
|
|
172
195
|
|
|
173
196
|
# Show raw data info
|
|
174
197
|
st.write(
|
|
175
|
-
|
|
198
|
+
translate("raw_documents_count").format(
|
|
199
|
+
count=len(st.session_state["initial_df"])
|
|
200
|
+
)
|
|
176
201
|
)
|
|
177
202
|
|
|
178
203
|
# Data filtering section
|
|
179
|
-
st.header("
|
|
204
|
+
st.header(translate("data_filtering"))
|
|
180
205
|
|
|
181
206
|
# Display number input and checkbox for preprocessing options
|
|
182
207
|
col1, col2, col3 = st.columns(3)
|
|
183
208
|
with col1:
|
|
184
209
|
register_widget("min_chars")
|
|
185
210
|
st.number_input(
|
|
186
|
-
"
|
|
211
|
+
translate("minimum_characters"),
|
|
187
212
|
value=MIN_CHARS_DEFAULT,
|
|
188
213
|
min_value=0,
|
|
189
214
|
max_value=1000,
|
|
190
215
|
key="min_chars",
|
|
191
216
|
on_change=save_widget_state,
|
|
192
|
-
help="
|
|
217
|
+
help=translate("minimum_characters_help"),
|
|
193
218
|
)
|
|
194
219
|
with col2:
|
|
195
220
|
register_widget("sample_size")
|
|
196
221
|
sample_size = st.number_input(
|
|
197
|
-
"
|
|
222
|
+
translate("sample_ratio"),
|
|
198
223
|
value=SAMPLE_SIZE_DEFAULT,
|
|
199
224
|
min_value=0.0,
|
|
200
225
|
max_value=1.0,
|
|
201
226
|
key="sample_size",
|
|
202
227
|
on_change=save_widget_state,
|
|
203
|
-
help="
|
|
228
|
+
help=translate("sample_ratio_help"),
|
|
204
229
|
)
|
|
205
230
|
with col3:
|
|
206
231
|
register_widget("split_by_paragraph")
|
|
207
232
|
SessionStateManager.get_or_set("split_by_paragraph", "no")
|
|
208
233
|
st.segmented_control(
|
|
209
|
-
"
|
|
234
|
+
translate("split_by_paragraph"),
|
|
210
235
|
key="split_by_paragraph",
|
|
211
|
-
options=["
|
|
236
|
+
options=["yes", "no", "enhanced"],
|
|
212
237
|
selection_mode="single",
|
|
213
|
-
help="
|
|
214
|
-
"'Enhanced split': uses a more advanced but slower method for splitting that considers the embedding "
|
|
215
|
-
"model's maximum input length.",
|
|
238
|
+
help=translate("split_help"),
|
|
216
239
|
on_change=save_widget_state,
|
|
240
|
+
format_func=lambda x: translate("split_option_" + x),
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
if get_current_internationalization_language() == "en":
|
|
244
|
+
split_by_paragraph_param = SessionStateManager.get("split_by_paragraph")
|
|
245
|
+
else:
|
|
246
|
+
# option has been translated
|
|
247
|
+
split_by_paragraph_param = (
|
|
248
|
+
"no"
|
|
249
|
+
if SessionStateManager.get("split_by_paragraph") == "non"
|
|
250
|
+
else (
|
|
251
|
+
"enhanced"
|
|
252
|
+
if SessionStateManager.get("split_by_paragraph") == "amélioré"
|
|
253
|
+
else "yes"
|
|
254
|
+
)
|
|
217
255
|
)
|
|
218
256
|
|
|
219
257
|
df = split_data(
|
|
220
|
-
df,
|
|
221
|
-
SessionStateManager.get("min_chars"),
|
|
222
|
-
SessionStateManager.get("split_by_paragraph"),
|
|
258
|
+
df=df,
|
|
259
|
+
min_chars=SessionStateManager.get("min_chars"),
|
|
260
|
+
split_by_paragraph=SessionStateManager.get("split_by_paragraph"),
|
|
223
261
|
embedding_model_name=SessionStateManager.get("embedding_model_name"),
|
|
224
262
|
)
|
|
225
263
|
|
|
@@ -235,7 +273,7 @@ def display_data_loading_component():
|
|
|
235
273
|
)
|
|
236
274
|
register_widget("timeframe_slider")
|
|
237
275
|
start_date, end_date = st.slider(
|
|
238
|
-
"
|
|
276
|
+
translate("select_timeframe"),
|
|
239
277
|
min_value=min_date,
|
|
240
278
|
max_value=max_date,
|
|
241
279
|
value=(min_date, max_date),
|
|
@@ -257,7 +295,9 @@ def display_data_loading_component():
|
|
|
257
295
|
|
|
258
296
|
SessionStateManager.set("time_filtered_df", df_filtered)
|
|
259
297
|
st.write(
|
|
260
|
-
|
|
298
|
+
translate("filtered_documents_count").format(
|
|
299
|
+
count=len(SessionStateManager.get_dataframe("time_filtered_df"))
|
|
300
|
+
)
|
|
261
301
|
)
|
|
262
302
|
st.dataframe(
|
|
263
303
|
SessionStateManager.get_dataframe("time_filtered_df")[
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
# This file is part of BERTrend.
|
|
5
5
|
import streamlit as st
|
|
6
6
|
|
|
7
|
+
from bertrend.demos.demos_utils.i18n import translate
|
|
7
8
|
from bertrend.demos.demos_utils.icons import SUCCESS_ICON
|
|
8
|
-
from bertrend.demos.demos_utils.messages import EMBEDDINGS_CALCULATED_MESSAGE
|
|
9
9
|
from bertrend.demos.demos_utils.state_utils import SessionStateManager
|
|
10
10
|
from bertrend.services.embedding_service import EmbeddingService
|
|
11
11
|
from bertrend.utils.data_loading import TEXT_COLUMN
|
|
@@ -16,8 +16,8 @@ def display_embed_documents_component():
|
|
|
16
16
|
Common Streamlit UI component for embedding documents.
|
|
17
17
|
"""
|
|
18
18
|
# Embed documents
|
|
19
|
-
if st.button("
|
|
20
|
-
with st.spinner("
|
|
19
|
+
if st.button(translate("embed_documents")):
|
|
20
|
+
with st.spinner(translate("embedding_documents")):
|
|
21
21
|
embedding_dtype = SessionStateManager.get("embedding_dtype")
|
|
22
22
|
embedding_model_name = SessionStateManager.get("embedding_model_name")
|
|
23
23
|
if SessionStateManager.get("embedding_service_type", "remote") == "local":
|
|
@@ -49,4 +49,4 @@ def display_embed_documents_component():
|
|
|
49
49
|
|
|
50
50
|
SessionStateManager.set("data_embedded", True)
|
|
51
51
|
|
|
52
|
-
st.success(
|
|
52
|
+
st.success(translate("embeddings_calculated_message"), icon=SUCCESS_ICON)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Internationalization (i18n) module for the prospective demo application.
|
|
3
|
+
Provides functionality for translating text between French and English.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# Copyright (c) 2024, RTE (https://www.rte-france.com)
|
|
7
|
+
# See AUTHORS.txt
|
|
8
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
9
|
+
# This file is part of BERTrend.
|
|
10
|
+
|
|
11
|
+
import streamlit as st
|
|
12
|
+
from typing import Optional
|
|
13
|
+
|
|
14
|
+
from bertrend_apps.prospective_demo.i18n_translations import (
|
|
15
|
+
TRANSLATIONS as PROSPECTIVE_TRANSLATIONS,
|
|
16
|
+
)
|
|
17
|
+
from bertrend.demos.topic_analysis.i18n_translations import (
|
|
18
|
+
TRANSLATIONS as TOPIC_ANALYSIS_TRANSLATIONS,
|
|
19
|
+
)
|
|
20
|
+
from bertrend.demos.demos_utils.i18n_translations import (
|
|
21
|
+
TRANSLATIONS as DEMOS_UTILS_TRANSLATIONS,
|
|
22
|
+
)
|
|
23
|
+
from bertrend.demos.weak_signals.i18n_translations import (
|
|
24
|
+
TRANSLATIONS as WEAK_SIGNALS_TRANSLATIONS,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Merge all translations
|
|
28
|
+
TRANSLATIONS = {
|
|
29
|
+
**PROSPECTIVE_TRANSLATIONS,
|
|
30
|
+
**TOPIC_ANALYSIS_TRANSLATIONS,
|
|
31
|
+
**DEMOS_UTILS_TRANSLATIONS,
|
|
32
|
+
**WEAK_SIGNALS_TRANSLATIONS,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# Available languages
|
|
36
|
+
LANGUAGES = {"fr": "Français", "en": "English"}
|
|
37
|
+
|
|
38
|
+
# Default language
|
|
39
|
+
DEFAULT_LANGUAGE = "en"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def set_default_internationalization_language(language: str) -> None:
|
|
43
|
+
"""Set the default language for the application."""
|
|
44
|
+
global DEFAULT_LANGUAGE
|
|
45
|
+
DEFAULT_LANGUAGE = language
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_current_internationalization_language() -> str:
|
|
49
|
+
"""Get the currently selected language from the session state."""
|
|
50
|
+
if "internationalization_language" not in st.session_state:
|
|
51
|
+
st.session_state.internationalization_language = DEFAULT_LANGUAGE
|
|
52
|
+
return st.session_state.internationalization_language
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def set_internationalization_language(language: str) -> None:
|
|
56
|
+
"""Set the current language in the session state."""
|
|
57
|
+
if language in LANGUAGES:
|
|
58
|
+
st.session_state.internationalization_language = language
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def create_internationalization_language_selector() -> None:
|
|
62
|
+
"""Create a language selector widget in the sidebar."""
|
|
63
|
+
current_lang = get_current_internationalization_language()
|
|
64
|
+
selected_lang = st.sidebar.selectbox(
|
|
65
|
+
"Language / Langue",
|
|
66
|
+
options=list(LANGUAGES.keys()),
|
|
67
|
+
format_func=lambda x: LANGUAGES[x],
|
|
68
|
+
index=list(LANGUAGES.keys()).index(current_lang),
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
if selected_lang != current_lang:
|
|
72
|
+
set_internationalization_language(selected_lang)
|
|
73
|
+
st.rerun()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def translate(key: str, default: Optional[str] = None) -> str:
|
|
77
|
+
"""
|
|
78
|
+
Translate a text key to the current language.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
key: The translation key to look up
|
|
82
|
+
default: Default text to return if the key is not found
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
The translated text in the current language
|
|
86
|
+
"""
|
|
87
|
+
lang = get_current_internationalization_language()
|
|
88
|
+
|
|
89
|
+
if key in TRANSLATIONS and lang in TRANSLATIONS[key]:
|
|
90
|
+
return TRANSLATIONS[key][lang]
|
|
91
|
+
|
|
92
|
+
# If the key doesn't exist, or the language is not available for this key
|
|
93
|
+
if default:
|
|
94
|
+
return default
|
|
95
|
+
return key # Return the key itself as fallback
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Copyright (c) 2024, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
# Translation dictionaries for demos_utils
|
|
7
|
+
TRANSLATIONS = {
|
|
8
|
+
"ctrl_enter": {
|
|
9
|
+
"fr": "CTRL + Entrée pour mettre à jour",
|
|
10
|
+
"en": "CTRL + Enter to update",
|
|
11
|
+
},
|
|
12
|
+
"select_language": {"fr": "Choisir une langue", "en": "Select Language"},
|
|
13
|
+
"embedding_model": {"fr": "Modèle d'embedding", "en": "Embedding Model"},
|
|
14
|
+
"embedding_service_url": {
|
|
15
|
+
"fr": "URL du service d'embedding",
|
|
16
|
+
"en": "Embedding service URL",
|
|
17
|
+
},
|
|
18
|
+
"embedding_hyperparameters": {
|
|
19
|
+
"fr": "Paramètres d'embedding",
|
|
20
|
+
"en": "Embedding settings",
|
|
21
|
+
},
|
|
22
|
+
"embedding_service": {
|
|
23
|
+
"fr": "Service d'embedding",
|
|
24
|
+
"en": "Embedding Service",
|
|
25
|
+
},
|
|
26
|
+
"bertopic_hyperparameters": {
|
|
27
|
+
"fr": "Hyperparamètres BERTopic",
|
|
28
|
+
"en": "BERTopic Hyperparameters",
|
|
29
|
+
},
|
|
30
|
+
"bertrend_hyperparameters": {
|
|
31
|
+
"fr": "Hyperparamètres BERTrend",
|
|
32
|
+
"en": "BERTrend Hyperparameters",
|
|
33
|
+
},
|
|
34
|
+
"embeddings_calculated_message": {
|
|
35
|
+
"fr": "Embeddings calculés avec succès !",
|
|
36
|
+
"en": "Embeddings calculated successfully!",
|
|
37
|
+
},
|
|
38
|
+
"no_embeddings_warning_message": {
|
|
39
|
+
"fr": "Veuillez vectoriser les données et entraîner les modèles avant de procéder à l'analyse.",
|
|
40
|
+
"en": "Please embed data and train models before proceeding to analysis.",
|
|
41
|
+
},
|
|
42
|
+
"model_training_complete_message": {
|
|
43
|
+
"fr": "Entraînement du modèle terminé !",
|
|
44
|
+
"en": "Model training complete!",
|
|
45
|
+
},
|
|
46
|
+
"no_data_after_preprocessing_message": {
|
|
47
|
+
"fr": "Aucune donnée disponible après prétraitement. Veuillez vérifier les fichiers sélectionnés et les options de prétraitement.",
|
|
48
|
+
"en": "No data available after preprocessing. Please check the selected files and preprocessing options.",
|
|
49
|
+
},
|
|
50
|
+
"select_from_local_storage": {
|
|
51
|
+
"fr": "Selection de jeux de données à partir du stockage local (.xlsx, .csv, .json, .jsonl, .parquet)",
|
|
52
|
+
"en": "Select dataset from local storage (.xlsx, .csv, .json, .jsonl, .parquet)",
|
|
53
|
+
},
|
|
54
|
+
"select_from_remote_storage": {
|
|
55
|
+
"fr": "Selection de jeux de données sur le serveur",
|
|
56
|
+
"en": "Select one or more datasets from the server data",
|
|
57
|
+
},
|
|
58
|
+
"data_loading": {
|
|
59
|
+
"fr": "Chargement des données",
|
|
60
|
+
"en": "Data loading",
|
|
61
|
+
},
|
|
62
|
+
"local_data": {
|
|
63
|
+
"fr": "Données locales",
|
|
64
|
+
"en": "Data from local storage",
|
|
65
|
+
},
|
|
66
|
+
"remote_data": {"fr": "Données sur le serveur", "en": "Data from server"},
|
|
67
|
+
"data_filtering": {"fr": "Filtrage des données", "en": "Data filtering"},
|
|
68
|
+
"embed_documents": {
|
|
69
|
+
"fr": "Vectoriser les documents",
|
|
70
|
+
"en": "Embed Documents",
|
|
71
|
+
},
|
|
72
|
+
"embedding_documents": {
|
|
73
|
+
"fr": "Vectorisation des documents...",
|
|
74
|
+
"en": "Embedding documents...",
|
|
75
|
+
},
|
|
76
|
+
"no_dataset_warning": {
|
|
77
|
+
"fr": "Veuillez sélectionner au moins un jeu de données pour continuer.",
|
|
78
|
+
"en": "Please select at least one dataset to proceed.",
|
|
79
|
+
},
|
|
80
|
+
"error_loading_file": {
|
|
81
|
+
"fr": "Erreur lors du chargement du fichier '{file_name}': {error}",
|
|
82
|
+
"en": "Error while loading file '{file_name}': {error}",
|
|
83
|
+
},
|
|
84
|
+
"drag_drop_help": {
|
|
85
|
+
"fr": "Glissez et déposez les fichiers à utiliser comme jeu de données dans cette zone",
|
|
86
|
+
"en": "Drag and drop files to be used as dataset in this area",
|
|
87
|
+
},
|
|
88
|
+
"raw_documents_count": {
|
|
89
|
+
"fr": "Nombre de documents dans les données brutes: **{count}**",
|
|
90
|
+
"en": "Number of documents in raw data: **{count}**",
|
|
91
|
+
},
|
|
92
|
+
"minimum_characters": {
|
|
93
|
+
"fr": "Nombre minimum de caractères",
|
|
94
|
+
"en": "Minimum Characters",
|
|
95
|
+
},
|
|
96
|
+
"minimum_characters_help": {
|
|
97
|
+
"fr": "Nombre minimum de caractères que chaque document doit contenir.",
|
|
98
|
+
"en": "Minimum number of characters each document must contain.",
|
|
99
|
+
},
|
|
100
|
+
"sample_ratio": {
|
|
101
|
+
"fr": "Ratio d'échantillonnage",
|
|
102
|
+
"en": "Sample ratio",
|
|
103
|
+
},
|
|
104
|
+
"sample_ratio_help": {
|
|
105
|
+
"fr": "Fraction des données brutes à utiliser pour calculer les sujets. Échantillonne aléatoirement les documents à partir des données brutes.",
|
|
106
|
+
"en": "Fraction of raw data to use for computing topics. Randomly samples documents from raw data.",
|
|
107
|
+
},
|
|
108
|
+
"split_by_paragraphs": {
|
|
109
|
+
"fr": "Diviser le texte par paragraphes",
|
|
110
|
+
"en": "Split text by paragraphs",
|
|
111
|
+
},
|
|
112
|
+
"split_option_yes": {
|
|
113
|
+
"fr": "oui",
|
|
114
|
+
"en": "yes",
|
|
115
|
+
},
|
|
116
|
+
"split_option_no": {
|
|
117
|
+
"fr": "non",
|
|
118
|
+
"en": "no",
|
|
119
|
+
},
|
|
120
|
+
"split_option_enhanced": {
|
|
121
|
+
"fr": "amélioré",
|
|
122
|
+
"en": "enhanced",
|
|
123
|
+
},
|
|
124
|
+
"split_help": {
|
|
125
|
+
"fr": "'Pas de division': Pas de division sur les documents ; 'Division par paragraphes': Divise les documents en paragraphes ; 'Division améliorée': utilise une méthode plus avancée mais plus lente pour la division qui prend en compte la longueur d'entrée maximale du modèle d'embedding.",
|
|
126
|
+
"en": "'No split': No splitting on the documents ; 'Split by paragraphs': Split documents into paragraphs ; 'Enhanced split': uses a more advanced but slower method for splitting that considers the embedding model's maximum input length.",
|
|
127
|
+
},
|
|
128
|
+
"select_timeframe": {
|
|
129
|
+
"fr": "Sélectionner la période",
|
|
130
|
+
"en": "Select Timeframe",
|
|
131
|
+
},
|
|
132
|
+
"filtered_documents_count": {
|
|
133
|
+
"fr": "Nombre de documents dans les données filtrées: **{count}**",
|
|
134
|
+
"en": "Number of documents in filtered data: **{count}**",
|
|
135
|
+
},
|
|
136
|
+
"settings_and_controls": {
|
|
137
|
+
"fr": "Paramètres et contrôles",
|
|
138
|
+
"en": "Settings and Controls",
|
|
139
|
+
},
|
|
140
|
+
}
|
|
@@ -12,10 +12,10 @@ from bertrend import (
|
|
|
12
12
|
EMBEDDING_CONFIG,
|
|
13
13
|
load_toml_config,
|
|
14
14
|
)
|
|
15
|
+
from bertrend.demos.demos_utils.i18n import translate
|
|
15
16
|
from bertrend.demos.demos_utils.state_utils import (
|
|
16
17
|
register_widget,
|
|
17
18
|
save_widget_state,
|
|
18
|
-
SessionStateManager,
|
|
19
19
|
register_multiple_widget,
|
|
20
20
|
reset_widget_state,
|
|
21
21
|
)
|
|
@@ -32,11 +32,11 @@ from bertrend.demos.demos_utils.icons import INFO_ICON
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def display_local_embeddings():
|
|
35
|
-
"""UI settings for local embedding service"""
|
|
35
|
+
"""UI settings for the local embedding service"""
|
|
36
36
|
register_multiple_widget("language", "embedding_dtype", "embedding_model_name")
|
|
37
37
|
|
|
38
38
|
language = st.selectbox(
|
|
39
|
-
"
|
|
39
|
+
translate("select_language"),
|
|
40
40
|
LANGUAGES,
|
|
41
41
|
key="language",
|
|
42
42
|
on_change=_on_language_change,
|
|
@@ -51,7 +51,7 @@ def display_local_embeddings():
|
|
|
51
51
|
ENGLISH_EMBEDDING_MODELS if language == "English" else FRENCH_EMBEDDING_MODELS
|
|
52
52
|
)
|
|
53
53
|
st.selectbox(
|
|
54
|
-
"
|
|
54
|
+
translate("embedding_model"),
|
|
55
55
|
options=embedding_models,
|
|
56
56
|
key="embedding_model_name",
|
|
57
57
|
on_change=save_widget_state,
|
|
@@ -71,7 +71,7 @@ def display_remote_embeddings():
|
|
|
71
71
|
if "embedding_service_url" not in st.session_state:
|
|
72
72
|
st.session_state["embedding_service_url"] = EMBEDDING_CONFIG["url"]
|
|
73
73
|
st.text_input(
|
|
74
|
-
"
|
|
74
|
+
translate("embedding_service_url"),
|
|
75
75
|
key="embedding_service_url",
|
|
76
76
|
on_change=save_widget_state,
|
|
77
77
|
)
|
|
@@ -80,12 +80,12 @@ def display_remote_embeddings():
|
|
|
80
80
|
def display_embedding_hyperparameters():
|
|
81
81
|
"""UI settings for embedding hyperparameters"""
|
|
82
82
|
# Embedding model parameters
|
|
83
|
-
with st.expander("
|
|
83
|
+
with st.expander(translate("embedding_hyperparameters"), expanded=False):
|
|
84
84
|
register_widget("embedding_service_type")
|
|
85
85
|
if "embedding_service_type" not in st.session_state:
|
|
86
86
|
st.session_state["embedding_service_type"] = "remote"
|
|
87
87
|
st.segmented_control(
|
|
88
|
-
"
|
|
88
|
+
translate("embedding_service"),
|
|
89
89
|
selection_mode="single",
|
|
90
90
|
key="embedding_service_type",
|
|
91
91
|
options=["local", "remote"],
|
|
@@ -99,7 +99,7 @@ def display_embedding_hyperparameters():
|
|
|
99
99
|
|
|
100
100
|
def display_bertopic_hyperparameters():
|
|
101
101
|
# BERTopic model parameters
|
|
102
|
-
with st.expander("
|
|
102
|
+
with st.expander(translate("bertopic_hyperparameters"), expanded=False):
|
|
103
103
|
# If BERTopic config is already in session state, use it
|
|
104
104
|
if "bertopic_config" in st.session_state:
|
|
105
105
|
toml_txt = st.session_state["bertopic_config"]
|
|
@@ -126,14 +126,14 @@ def display_bertopic_hyperparameters():
|
|
|
126
126
|
|
|
127
127
|
def display_bertrend_hyperparameters():
|
|
128
128
|
"""UI settings for Bertrend hyperparameters"""
|
|
129
|
-
with st.expander("
|
|
129
|
+
with st.expander(translate("bertrend_hyperparameters"), expanded=False):
|
|
130
130
|
# Get BERTrend default configuration
|
|
131
131
|
with open(BERTREND_DEFAULT_CONFIG_PATH, "r") as f:
|
|
132
132
|
# Load default parameter the first time
|
|
133
133
|
toml_txt = f.read()
|
|
134
134
|
|
|
135
135
|
# Add code editor to edit the config file
|
|
136
|
-
st.write(INFO_ICON + " CTRL +
|
|
136
|
+
st.write(INFO_ICON + " CTRL + " + translate("ctrl_enter"))
|
|
137
137
|
config_editor = code_editor(toml_txt, lang="toml")
|
|
138
138
|
|
|
139
139
|
# If code is edited, update config
|