bertrend 0.3.3__tar.gz → 0.3.5__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.
Files changed (204) hide show
  1. {bertrend-0.3.3 → bertrend-0.3.5}/PKG-INFO +7 -5
  2. {bertrend-0.3.3 → bertrend-0.3.5}/README.md +2 -2
  3. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/demos_utils/data_loading_component.py +76 -36
  4. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/demos_utils/embed_documents_component.py +4 -4
  5. bertrend-0.3.5/bertrend/demos/demos_utils/i18n.py +95 -0
  6. bertrend-0.3.5/bertrend/demos/demos_utils/i18n_translations.py +140 -0
  7. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/demos_utils/parameters_component.py +10 -10
  8. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/app.py +16 -9
  9. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +34 -35
  10. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +14 -13
  11. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +62 -54
  12. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +13 -13
  13. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/demo_pages/training_page.py +24 -32
  14. bertrend-0.3.5/bertrend/demos/topic_analysis/i18n_translations.py +359 -0
  15. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/weak_signals/app.py +77 -80
  16. bertrend-0.3.5/bertrend/demos/weak_signals/i18n_translations.py +287 -0
  17. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/weak_signals/visualizations_utils.py +37 -31
  18. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/embedding_client.py +1 -1
  19. bertrend-0.3.5/bertrend/services/embedding_server/README.md +31 -0
  20. bertrend-0.3.5/bertrend/services/embedding_server/config/default_config.toml +7 -0
  21. bertrend-0.3.5/bertrend/services/embedding_server/config/settings.py +34 -0
  22. bertrend-0.3.5/bertrend/services/embedding_server/main.py +14 -0
  23. bertrend-0.3.5/bertrend/services/embedding_server/models.py +12 -0
  24. bertrend-0.3.5/bertrend/services/embedding_server/routers/authentication.py +45 -0
  25. bertrend-0.3.5/bertrend/services/embedding_server/routers/embeddings.py +39 -0
  26. bertrend-0.3.5/bertrend/services/embedding_server/routers/info.py +29 -0
  27. bertrend-0.3.5/bertrend/services/embedding_server/security.py +368 -0
  28. bertrend-0.3.5/bertrend/services/embedding_server/start.py +26 -0
  29. bertrend-0.3.5/bertrend/services/embedding_server/status.py +30 -0
  30. bertrend-0.3.5/bertrend/services/embedding_server/stop.py +14 -0
  31. bertrend-0.3.5/bertrend/tests/test_installation.py +103 -0
  32. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/trend_analysis/data_structure.py +1 -1
  33. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/trend_analysis/prompts.py +84 -7
  34. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/trend_analysis/weak_signals.py +1 -1
  35. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/utils/data_loading.py +32 -2
  36. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/common/crontab_utils.py +28 -3
  37. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/__main__.py +3 -3
  38. bertrend-0.3.3/bertrend_apps/data_provider/curebot_provider.py → bertrend-0.3.5/bertrend_apps/data_provider/atom_feed_provider.py +1 -1
  39. bertrend-0.3.5/bertrend_apps/exploration/curebot/__init__.py +4 -0
  40. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/app_utils.py +11 -3
  41. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +15 -8
  42. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +1 -1
  43. bertrend-0.3.5/bertrend_apps/newsletters/__init__.py +4 -0
  44. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/app.py +8 -4
  45. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/dashboard_analysis.py +10 -6
  46. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/dashboard_common.py +6 -7
  47. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/dashboard_signals.py +6 -4
  48. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/feeds_config.py +66 -32
  49. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/feeds_data.py +17 -11
  50. bertrend-0.3.5/bertrend_apps/prospective_demo/i18n_translations.py +380 -0
  51. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/models_info.py +77 -54
  52. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/process_new_data.py +20 -2
  53. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/report_generation.py +25 -24
  54. {bertrend-0.3.3 → bertrend-0.3.5}/pyproject.toml +5 -3
  55. bertrend-0.3.3/bertrend/demos/demos_utils/messages.py +0 -11
  56. bertrend-0.3.3/bertrend/demos/topic_analysis/messages.py +0 -13
  57. bertrend-0.3.3/bertrend/demos/weak_signals/messages.py +0 -32
  58. bertrend-0.3.3/bertrend/tests/test_installation.py +0 -181
  59. bertrend-0.3.3/bertrend_apps/exploration/curebot/old_veille_analyse.py +0 -298
  60. bertrend-0.3.3/bertrend_apps/prospective_demo/i18n.py +0 -136
  61. {bertrend-0.3.3 → bertrend-0.3.5}/AUTHORS.txt +0 -0
  62. {bertrend-0.3.3 → bertrend-0.3.5}/LICENSE.md +0 -0
  63. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/BERTopicModel.py +0 -0
  64. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/BERTrend.py +0 -0
  65. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/__init__.py +0 -0
  66. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/config/bertopic_default_config.toml +0 -0
  67. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/config/bertrend_default_config.toml +0 -0
  68. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/config/parameters.py +0 -0
  69. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/config/services_default_config.toml +0 -0
  70. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/__init__.py +0 -0
  71. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/demos_utils/__init__.py +0 -0
  72. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/demos_utils/icons.py +0 -0
  73. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/demos_utils/state_utils.py +0 -0
  74. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/start_summarizer_app.sh +0 -0
  75. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/start_topic_analysis_app.sh +0 -0
  76. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/start_weak_signals_app.sh +0 -0
  77. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/summarization/__init__.py +0 -0
  78. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/summarization/summarizer_app.py +0 -0
  79. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/__init__.py +0 -0
  80. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/app_utils.py +0 -0
  81. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
  82. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/demos/weak_signals/__init__.py +0 -0
  83. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/llm_utils/__init__.py +0 -0
  84. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/llm_utils/newsletter.css +0 -0
  85. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/llm_utils/newsletter_features.py +0 -0
  86. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/llm_utils/openai_client.py +0 -0
  87. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/llm_utils/prompts.py +0 -0
  88. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/metrics/__init__.py +0 -0
  89. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
  90. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/metrics/topic_metrics.py +0 -0
  91. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/resources/common_ngrams.json +0 -0
  92. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/resources/stopwords-en.json +0 -0
  93. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/resources/stopwords-fr.json +0 -0
  94. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/resources/stopwords-rte.json +0 -0
  95. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/__init__.py +0 -0
  96. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/authentication.py +0 -0
  97. {bertrend-0.3.3/bertrend/services/summary → bertrend-0.3.5/bertrend/services/embedding_server}/__init__.py +0 -0
  98. {bertrend-0.3.3/bertrend/tests → bertrend-0.3.5/bertrend/services/embedding_server/routers}/__init__.py +0 -0
  99. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/embedding_service.py +0 -0
  100. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/summarizer.py +0 -0
  101. {bertrend-0.3.3/bertrend/topic_analysis → bertrend-0.3.5/bertrend/services/summary}/__init__.py +0 -0
  102. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/summary/abstractive_summarizer.py +0 -0
  103. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
  104. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/summary/extractive_summarizer.py +0 -0
  105. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/summary/lexrank.py +0 -0
  106. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/services/summary/prompts.py +0 -0
  107. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/README_integration_tests.md +0 -0
  108. {bertrend-0.3.3/bertrend/trend_analysis → bertrend-0.3.5/bertrend/tests}/__init__.py +0 -0
  109. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/conftest.py +0 -0
  110. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_abstractive_summarizer.py +0 -0
  111. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_bertrend.py +0 -0
  112. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_cache_utils.py +0 -0
  113. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_chatgpt_summarizer.py +0 -0
  114. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_config_utils.py +0 -0
  115. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_data_loading.py +0 -0
  116. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_data_structure.py +0 -0
  117. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_embedding_client.py +0 -0
  118. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_extractive_summarizer.py +0 -0
  119. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_integration.py +0 -0
  120. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_newsletter_features.py +0 -0
  121. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_openai_client.py +0 -0
  122. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_representative_docs.py +0 -0
  123. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_summarizer.py +0 -0
  124. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_temporal_metrics_embedding.py +0 -0
  125. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_topic_description.py +0 -0
  126. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_topic_metrics.py +0 -0
  127. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_topic_model.py +0 -0
  128. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_trend_analysis_data_structure.py +0 -0
  129. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_trend_analysis_prompts.py +0 -0
  130. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_trend_analysis_visualizations.py +0 -0
  131. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_trend_analysis_weak_signals.py +0 -0
  132. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_utils_init.py +0 -0
  133. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/tests/test_visualizations.py +0 -0
  134. {bertrend-0.3.3/bertrend_apps → bertrend-0.3.5/bertrend/topic_analysis}/__init__.py +0 -0
  135. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/topic_analysis/data_structure.py +0 -0
  136. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/topic_analysis/prompts.py +0 -0
  137. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/topic_analysis/representative_docs.py +0 -0
  138. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/topic_analysis/topic_description.py +0 -0
  139. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/topic_analysis/visualizations.py +0 -0
  140. {bertrend-0.3.3/bertrend_apps/common → bertrend-0.3.5/bertrend/trend_analysis}/__init__.py +0 -0
  141. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
  142. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
  143. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/trend_analysis/visualizations.py +0 -0
  144. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/utils/__init__.py +0 -0
  145. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/utils/cache_utils.py +0 -0
  146. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend/utils/config_utils.py +0 -0
  147. {bertrend-0.3.3/bertrend_apps/exploration → bertrend-0.3.5/bertrend_apps}/__init__.py +0 -0
  148. {bertrend-0.3.3/bertrend_apps/exploration/curebot → bertrend-0.3.5/bertrend_apps/common}/__init__.py +0 -0
  149. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/common/mail_utils.py +0 -0
  150. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
  151. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
  152. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
  153. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/feeds/llm_feed.toml +0 -0
  154. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
  155. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/feeds/rte_feed.toml +0 -0
  156. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/gmail_credentials.json +0 -0
  157. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
  158. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/arxiv_newsletter_from_scratch.toml +0 -0
  159. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
  160. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_scratch.toml +0 -0
  161. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
  162. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
  163. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
  164. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
  165. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/config/newsletters/rte_newsletter_from_scratch.toml +0 -0
  166. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/__init__.py +0 -0
  167. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/arxiv_provider.py +0 -0
  168. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/bing_news_provider.py +0 -0
  169. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/data_provider.py +0 -0
  170. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/google_news_provider.py +0 -0
  171. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
  172. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/data_provider/utils.py +0 -0
  173. {bertrend-0.3.3/bertrend_apps/newsletters → bertrend-0.3.5/bertrend_apps/exploration}/__init__.py +0 -0
  174. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/app.py +0 -0
  175. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/config.toml +0 -0
  176. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/prompts.py +0 -0
  177. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
  178. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
  179. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/curebot/tabs/tab3.py +0 -0
  180. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/dataviz/Main_page.py +0 -0
  181. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/dataviz/__init__.py +0 -0
  182. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/dataviz/pages/1_Data_feeds.py +0 -0
  183. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/__init__.py +0 -0
  184. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/entity_utils.py +0 -0
  185. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/spacy/__init__.py +0 -0
  186. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/spacy/common_factory.py +0 -0
  187. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/spacy/dbpedia.py +0 -0
  188. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/spacy/nlp.config +0 -0
  189. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/exploration/geolocalization/spacy/utils.py +0 -0
  190. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/install_feeds_and_newsletters.py +0 -0
  191. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/newsletters/__main__.py +0 -0
  192. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
  193. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/.streamlit/secrets.toml +0 -0
  194. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/__init__.py +0 -0
  195. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/authentication.py +0 -0
  196. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/feeds_common.py +0 -0
  197. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/llm_utils.py +0 -0
  198. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/perf_utils.py +0 -0
  199. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/report_template.html +0 -0
  200. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/report_utils.py +0 -0
  201. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/start_demo.sh +0 -0
  202. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/prospective_demo/streamlit_utils.py +0 -0
  203. {bertrend-0.3.3 → bertrend-0.3.5}/bertrend_apps/start_apps.sh +0 -0
  204. {bertrend-0.3.3 → bertrend-0.3.5}/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
3
+ Version: 0.3.5
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
@@ -11,6 +11,7 @@ Maintainer-email: jerome.picault@rte-france.com
11
11
  Requires-Python: >=3.12,<4.0
12
12
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
13
13
  Provides-Extra: apps
14
+ Requires-Dist: PyJWT (>=2.10.1)
14
15
  Requires-Dist: Pyqtree (==1.0.0)
15
16
  Requires-Dist: arxiv (>=2.2.0) ; extra == "apps"
16
17
  Requires-Dist: bertopic (==0.16.2)
@@ -41,13 +42,14 @@ Requires-Dist: newspaper4k (>=0.9.3.1) ; extra == "apps"
41
42
  Requires-Dist: nltk (>=3.9.1)
42
43
  Requires-Dist: numpy (<2)
43
44
  Requires-Dist: openai (>=1.77.0)
45
+ Requires-Dist: openpyxl (>=3.1.5)
44
46
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (==1.25.0)
45
47
  Requires-Dist: pandas (>=2.2.2)
46
48
  Requires-Dist: plotly (>=5.24.1)
47
49
  Requires-Dist: plotly-resampler (>=0.10.0)
48
50
  Requires-Dist: pygooglenews (>=0.1.3) ; extra == "apps"
49
51
  Requires-Dist: pylabeladjust (==0.1.13)
50
- Requires-Dist: pytest (>=8.3.3)
52
+ Requires-Dist: pytest (>=8.4.0)
51
53
  Requires-Dist: requests (>=2.32.3)
52
54
  Requires-Dist: scikit-learn (>=1.5.2)
53
55
  Requires-Dist: scipy (==1.12)
@@ -55,7 +57,7 @@ Requires-Dist: seaborn (>=0.13.2)
55
57
  Requires-Dist: sentence-transformers (==3.0.1)
56
58
  Requires-Dist: sentencepiece (>=0.2.0)
57
59
  Requires-Dist: starlette (>=0.46.2)
58
- Requires-Dist: streamlit (>=1.45.0)
60
+ Requires-Dist: streamlit (>=1.45.1)
59
61
  Requires-Dist: streamlit-code-editor (>=0.1.22)
60
62
  Requires-Dist: thefuzz (>=0.22.1)
61
63
  Requires-Dist: tiktoken (>=0.8.0)
@@ -78,7 +80,7 @@ Description-Content-Type: text/markdown
78
80
  [![issues - BERTrend](https://img.shields.io/github/issues/rte-france/BERTrend)](https://github.com/rte-france/BERTrend/issues)
79
81
  [![Downloads](https://pepy.tech/badge/bertrend)](https://pepy.tech/project/bertrend)
80
82
  [![PyPi_Version](https://img.shields.io/pypi/v/bertrend.svg)](https://pypi.org/project/bertrend/)
81
- [![PyPi_Compat](https://img.shields.io/pypi/pyversions/bertrend.svg)](https://pypi.org/project/bertrend/)
83
+ ![Static Badge](https://img.shields.io/badge/python-%3E%3D3.12-blue)
82
84
  ![GitHub License](https://img.shields.io/github/license/rte-france/BERTrend)
83
85
 
84
86
  ![BERTrend pipeline](./BERTrend_overview.png)
@@ -258,7 +260,7 @@ We recommend using a remote embedding service (this is now the default config) a
258
260
 
259
261
  The change of configuration can be done in: [services_default_config.toml](bertrend/config/services_default_config.toml).
260
262
 
261
- An example of a very simple implementation to deploy a separate embedding service can be found here: https://github.com/rte-france/wattelse/tree/main/wattelse/api/embedding. (this implementation is compatible with our code)
263
+ An example of a very simple implementation to deploy a separate embedding service can be found here: `bertrend/services/embedding_server`
262
264
 
263
265
 
264
266
  ![parameters](docs/images/parameters.png)
@@ -6,7 +6,7 @@
6
6
  [![issues - BERTrend](https://img.shields.io/github/issues/rte-france/BERTrend)](https://github.com/rte-france/BERTrend/issues)
7
7
  [![Downloads](https://pepy.tech/badge/bertrend)](https://pepy.tech/project/bertrend)
8
8
  [![PyPi_Version](https://img.shields.io/pypi/v/bertrend.svg)](https://pypi.org/project/bertrend/)
9
- [![PyPi_Compat](https://img.shields.io/pypi/pyversions/bertrend.svg)](https://pypi.org/project/bertrend/)
9
+ ![Static Badge](https://img.shields.io/badge/python-%3E%3D3.12-blue)
10
10
  ![GitHub License](https://img.shields.io/github/license/rte-france/BERTrend)
11
11
 
12
12
  ![BERTrend pipeline](./BERTrend_overview.png)
@@ -186,7 +186,7 @@ We recommend using a remote embedding service (this is now the default config) a
186
186
 
187
187
  The change of configuration can be done in: [services_default_config.toml](bertrend/config/services_default_config.toml).
188
188
 
189
- An example of a very simple implementation to deploy a separate embedding service can be found here: https://github.com/rte-france/wattelse/tree/main/wattelse/api/embedding. (this implementation is compatible with our code)
189
+ An example of a very simple implementation to deploy a separate embedding service can be found here: `bertrend/services/embedding_server`
190
190
 
191
191
 
192
192
  ![parameters](docs/images/parameters.png)
@@ -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
- df = load_data(
61
- Path(tmp_file.name),
62
- SessionStateManager.get("language", "French"),
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
- df = load_data(
77
- file_path,
78
- SessionStateManager.get("language", "French"),
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 modelling. It allows to choose data to load and preprocess data.
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("Data loading")
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 + " Data from local storage",
109
- SERVER_STORAGE_ICON + " Data from server data",
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="Select dataset from local storage (.xlsx, .csv, .json, .jsonl, .parquet)",
139
+ label=translate("select_from_local_storage"),
117
140
  type=compatible_extensions,
118
141
  accept_multiple_files=True,
119
- help="Drag and drop files to be used as dataset in this area",
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="Select one or more datasets from the server data",
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(NO_DATASET_WARNING, icon=WARNING_ICON)
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 warining
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
- NO_DATA_AFTER_PREPROCESSING_MESSAGE,
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
- f"Number of documents in raw data: **{len(st.session_state['initial_df'])}**"
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("Data filtering")
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
- "Minimum Characters",
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="Minimum number of characters each document must contain.",
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
- "Sample ratio",
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="Fraction of raw data to use for computing topics. Randomly samples documents from raw data.",
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
- "Split text by paragraphs",
234
+ translate("split_by_paragraph"),
210
235
  key="split_by_paragraph",
211
- options=["no", "yes", "enhanced"],
236
+ options=["yes", "no", "enhanced"],
212
237
  selection_mode="single",
213
- help="'No split': No splitting on the documents ; 'Split by paragraphs': Split documents into paragraphs ; "
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
- "Select Timeframe",
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
- f"Number of documents in filtered data: **{len(SessionStateManager.get_dataframe('time_filtered_df'))}**"
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("Embed Documents"):
20
- with st.spinner("Embedding documents..."):
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(EMBEDDINGS_CALCULATED_MESSAGE, icon=SUCCESS_ICON)
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
+ }