zetaah commited on
Commit
005caea
1 Parent(s): 0d5bf6d
Files changed (1) hide show
  1. app.py +173 -0
app.py ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+ import google.generativeai as genai
4
+ import re
5
+ import random
6
+ # --- Configuration ---
7
+
8
+ # API Key (replace with your actual key)
9
+ KEYs = ["AIzaSyBkTJsctYOkljL0tx-6Y8NwYCaSz-r0XmU" ,"AIzaSyDbzt8ZGVd3P15MMuIUh8wz1lzT5jRLWlc"]
10
+
11
+ KEY = random.choice(KEYs)
12
+ genai.configure(api_key=KEY)
13
+
14
+ # Data File Path
15
+ DATA_FILE = "data_tsa.json"
16
+
17
+ # --- Helper Functions ---
18
+
19
+ def count_word_occurrences(text, word='maroc'):
20
+ """Counts occurrences of a word, including variations (e.g., plural, feminine)."""
21
+ pattern1 = re.compile(r'\b' + re.escape(word) + r'(?:s?|aine)?\b', re.IGNORECASE)
22
+ pattern2 = re.compile(r'\b' + re.escape(word) + r'(?:s?|ain)?\b', re.IGNORECASE)
23
+ matches = pattern1.findall(text) + pattern2.findall(text)
24
+ return len(matches)
25
+
26
+ def load_and_process_data(file_path):
27
+ """Loads data from JSON, handles different formats, and prepares for display."""
28
+ with open(file_path, 'r') as f:
29
+ data_js = json.load(f)
30
+ try:
31
+ data = data_js[:100]
32
+ except:
33
+ data = data_js
34
+
35
+ # Determine data structure for counting articles
36
+ if isinstance(data, dict):
37
+ try:
38
+ num_articles = sum(len(v) for v in data.values())
39
+ except TypeError:
40
+ num_articles = len(data)
41
+ else:
42
+ num_articles = len(data)
43
+
44
+ # Limit data displayed to prevent UI overload (adjust as needed)
45
+ data_str = str(data)
46
+
47
+ return data_js,data_str, num_articles
48
+
49
+ # --- Streamlit App ---
50
+
51
+ # Title and Styling
52
+ st.set_page_config(page_title="Algeria Propaganda Analysis", page_icon="🇲🇦")
53
+ st.title("MaghrebInsights: Analyse de la Propagande Algérienne: Presse vs Maroc 🇲🇦")
54
+ st.markdown(
55
+ """
56
+ <style>
57
+ body {
58
+ font-family: 'Helvetica', sans-serif;
59
+ }
60
+ .stButton>button {
61
+ background-color: #4CAF50; /* Green */
62
+ border: none;
63
+ color: white;
64
+ padding: 10px 20px;
65
+ text-align: center;
66
+ text-decoration: none;
67
+ display: inline-block;
68
+ font-size: 16px;
69
+ margin: 4px 2px;
70
+ cursor: pointer;
71
+ }
72
+ </style>
73
+ """,
74
+ unsafe_allow_html=True,
75
+ )
76
+
77
+ # Load and display data
78
+ data_js,data_str, num_articles = load_and_process_data(DATA_FILE)
79
+ print(num_articles,data_str)
80
+ st.subheader("Extrait des Données:")
81
+ st.json(data_js)
82
+
83
+ # --- User Input Section ---
84
+
85
+ st.sidebar.header("Paramètres du Rapport")
86
+ word_to_analyze = st.sidebar.text_input("Mot-clé à analyser", value="maroc")
87
+ st.sidebar.markdown("___") # Visual separator
88
+
89
+ # Pre-calculate word occurrences
90
+ occurrences = count_word_occurrences(data_str, word_to_analyze)
91
+
92
+ # --- Report Generation ---
93
+
94
+ # Craft dynamic prompt
95
+ user_input = f"""
96
+ - Incarnez un expert marocain en analyse de propagande, de stratégie militaire et de désinformation.
97
+ - Analysez ces données extraites de la presse algérienne : {data_str}
98
+ - Nombre total d'articles analysés: {num_articles}
99
+ - Nombre d'occurrences du mot "{word_to_analyze}" dans les données : {occurrences}
100
+
101
+ ### Objectif :
102
+
103
+ Analyser les données fournies d'un point de vue politique et propagandiste afin de :
104
+
105
+ ### Tâches :
106
+
107
+ 1. **Résumé des données**:
108
+ - Fournir un résumé des données avec toutes les informations pertinentes.
109
+ - Dates, période, NOMBRE D'ARTICLES = {num_articles}
110
+ - Nombre d'occurrences du Maroc dans les données : {occurrences}
111
+
112
+ 2. **Analyse Critique**:
113
+ - Mener une analyse critique des données, en se concentrant sur les interprétations et les implications nuancées.
114
+
115
+ 3. **Analyse de la Propagande**:
116
+ - Identifier et analyser les cas de techniques de propagande telles que la désinformation, la manipulation ou les messages persuasifs dans les données.
117
+
118
+ 4. **Méthodologie**:
119
+ - Décrire les méthodes et techniques analytiques employées. Expliquer comment les aspects politiques et de propagande ont été intégrés à l'analyse.
120
+
121
+ 5. **Conclusions Clés**:
122
+ - Présenter des observations perspicaces sur les implications politiques et les éléments de propagande trouvés dans les données. Utiliser des exemples précis et des preuves pour étayer les conclusions.
123
+
124
+ 6. **Recommandations**:
125
+ - Offrir des recommandations d'experts basées sur l'analyse. Proposer des stratégies pour contrer ou atténuer les effets de la propagande si nécessaire.
126
+
127
+ 7. **Conclusion**:
128
+ - Résumer les connaissances politiques et de propagande acquises grâce à l'analyse. Discuter des implications plus larges et des conséquences potentielles.
129
+
130
+ ### Instructions pour l'IA :
131
+ - **Expertise en Politique et Propagande**:
132
+ - Analyser les données avec une compréhension approfondie de la dynamique politique et des techniques de propagande.
133
+
134
+ - **Analyse Critique**:
135
+ - Mener une analyse critique des données, en se concentrant sur les interprétations et les implications nuancées.
136
+
137
+ - **Observations fondées sur des Preuves**:
138
+ - Soutenir les conclusions avec des exemples concrets et des preuves issues des données.
139
+
140
+ - **Considérations Éthiques**:
141
+ - Tenir compte des implications éthiques liées à l'analyse politique et à la propagande.
142
+
143
+ - **Lignes Directrices de Formatage**:
144
+ - Formater le rapport de manière professionnelle, en utilisant des titres et sous-titres appropriés. Assurer la clarté et la lisibilité.
145
+ ### Références :
146
+ Veuillez vous assurer de citer chaque déclaration en utilisant les URL des données au format Markdown.
147
+ """
148
+
149
+ if st.sidebar.button("Générer le Rapport Complet"):
150
+ with st.spinner("Analyse en cours ..."):
151
+ # AI Model Configuration
152
+ generation_config = {
153
+ "temperature": 0.8, # Adjust for creativity (0.2 - more focused, 1.0 - more creative)
154
+ "top_p": 0.95, # Controls the diversity of the generated text
155
+ "top_k": 40, # Limits the next token choices to the top 'k' probabilities
156
+ "max_output_tokens": 4096, # Adjust based on expected report length
157
+ }
158
+
159
+ model = genai.GenerativeModel(
160
+ model_name="gemini-1.5-flash",
161
+ generation_config=generation_config,
162
+ )
163
+
164
+ chat_session = model.start_chat(
165
+ history=[{"role": "user", "parts": [user_input]}],
166
+ )
167
+
168
+ response = chat_session.send_message(user_input)
169
+ st.markdown(response.text)
170
+
171
+ # Footer
172
+ st.markdown("---")
173
+ st.markdown("Développé par [Ayoub Abraich](https://ayoubabraich.netlify.app/)")