FerdinandPyCode commited on
Commit
8c7c295
·
1 Parent(s): d088434

adding the remaining prompts

Browse files
app.py CHANGED
@@ -15,6 +15,13 @@ from pattern_il_existe import il_existe, il_existe_prompt_template
15
  from pattern_il_faut import il_faut, il_faut_prompt_template
16
  from pattern_vous_pouvez import vous_pouvez, vous_pouvez_prompt_template
17
  from pattern_imaginez import imaginez, imaginez_prompt_template
 
 
 
 
 
 
 
18
  # Interface Streamlit
19
  st.title("Analyse du texte")
20
 
@@ -31,6 +38,12 @@ List_prompt = {
31
  "< Détection du pattern 'il faut' >": il_faut_prompt_template(),
32
  "< Détection du pattern 'vous pouvez' >": vous_pouvez_prompt_template(),
33
  "< Détection du pattern 'imaginez' >": imaginez_prompt_template(),
 
 
 
 
 
 
34
  }
35
 
36
  # Menu déroulant pour sélectionner l'analyse
@@ -237,5 +250,107 @@ if st.button("Lancer l'analyse"):
237
  logging.error(f"Error during analysis: {e}")
238
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  else:
241
  st.error("Veuillez entrer du texte pour lancer l'analyse.")
 
15
  from pattern_il_faut import il_faut, il_faut_prompt_template
16
  from pattern_vous_pouvez import vous_pouvez, vous_pouvez_prompt_template
17
  from pattern_imaginez import imaginez, imaginez_prompt_template
18
+ from pattern_en_plus import en_plus_prompt_template, detect_en_plus
19
+ from pattern_outre import detect_outre, outre_prompt_template
20
+ from pattern_il_suffit_de import detect_il_suffit_de, il_suffit_de_prompt_template
21
+ from pattern_important_crucial import importance_prompt_template, importance_detection
22
+ from pattern_permettre import permettre_detection, permettre_prompt_template
23
+ from pattern_voici_decouvrez import detect_voici_decouvrez, voici_decouvrez_prompt_template
24
+
25
  # Interface Streamlit
26
  st.title("Analyse du texte")
27
 
 
38
  "< Détection du pattern 'il faut' >": il_faut_prompt_template(),
39
  "< Détection du pattern 'vous pouvez' >": vous_pouvez_prompt_template(),
40
  "< Détection du pattern 'imaginez' >": imaginez_prompt_template(),
41
+ "< Détection du pattern 'en plus' >": en_plus_prompt_template(),
42
+ "< Détection du pattern 'outre' >": outre_prompt_template(),
43
+ "< Détection du pattern 'il suffit de' >": il_suffit_de_prompt_template(),
44
+ "< Détection du pattern 'important crucial' >": importance_prompt_template(),
45
+ "< Détection du pattern 'permettre' >": permettre_prompt_template(),
46
+ "< Détection du pattern 'voici découvrez' >": voici_decouvrez_prompt_template(),
47
  }
48
 
49
  # Menu déroulant pour sélectionner l'analyse
 
250
  logging.error(f"Error during analysis: {e}")
251
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
252
 
253
+ elif option == "< Détection du pattern 'en plus' >":
254
+ try:
255
+ # Analyser le texte pour les fautes de style
256
+ result = detect_en_plus(input_text)
257
+
258
+ # Afficher les résultats en JSON formaté
259
+ st.subheader("Résultats de l'analyse du pattern 'en plus'")
260
+ st.json(result['result'], expanded=True)
261
+
262
+ # Afficher le prompt final
263
+ st.subheader("Prompt final envoyé au modèle")
264
+ st.write(result['prompt'])
265
+
266
+ except Exception as e:
267
+ logging.error(f"Error during analysis: {e}")
268
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
269
+
270
+ elif option == "< Détection du pattern 'outre' >":
271
+ try:
272
+ # Analyser le texte pour les fautes de style
273
+ result = detect_outre(input_text)
274
+
275
+ # Afficher les résultats en JSON formaté
276
+ st.subheader("Résultats de l'analyse du pattern 'outre'")
277
+ st.json(result['result'], expanded=True)
278
+
279
+ # Afficher le prompt final
280
+ st.subheader("Prompt final envoyé au modèle")
281
+ st.write(result['prompt'])
282
+
283
+ except Exception as e:
284
+ logging.error(f"Error during analysis: {e}")
285
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
286
+
287
+ elif option == "< Détection du pattern 'il suffit de' >":
288
+ try:
289
+ # Analyser le texte pour les fautes de style
290
+ result = detect_il_suffit_de(input_text)
291
+
292
+ # Afficher les résultats en JSON formaté
293
+ st.subheader("Résultats de l'analyse du pattern 'il suffit de'")
294
+ st.json(result['result'], expanded=True)
295
+
296
+ # Afficher le prompt final
297
+ st.subheader("Prompt final envoyé au modèle")
298
+ st.write(result['prompt'])
299
+
300
+ except Exception as e:
301
+ logging.error(f"Error during analysis: {e}")
302
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
303
+
304
+ elif option == "< Détection du pattern 'important crucial' >":
305
+ try:
306
+ # Analyser le texte pour les fautes de style
307
+ result = importance_detection(input_text)
308
+
309
+ # Afficher les résultats en JSON formaté
310
+ st.subheader("Résultats de l'analyse du pattern 'important crucial'")
311
+ st.json(result['result'], expanded=True)
312
+
313
+ # Afficher le prompt final
314
+ st.subheader("Prompt final envoyé au modèle")
315
+ st.write(result['prompt'])
316
+
317
+ except Exception as e:
318
+ logging.error(f"Error during analysis: {e}")
319
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
320
+
321
+ elif option == "< Détection du pattern 'permettre' >":
322
+ try:
323
+ # Analyser le texte pour les fautes de style
324
+ result = permettre_detection(input_text)
325
+
326
+ # Afficher les résultats en JSON formaté
327
+ st.subheader("Résultats de l'analyse du pattern 'permettre'")
328
+ st.json(result['result'], expanded=True)
329
+
330
+ # Afficher le prompt final
331
+ st.subheader("Prompt final envoyé au modèle")
332
+ st.write(result['prompt'])
333
+
334
+ except Exception as e:
335
+ logging.error(f"Error during analysis: {e}")
336
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
337
+
338
+ elif option == "< Détection du pattern 'voici découvrez' >":
339
+ try:
340
+ # Analyser le texte pour les fautes de style
341
+ result = detect_voici_decouvrez(input_text)
342
+
343
+ # Afficher les résultats en JSON formaté
344
+ st.subheader("Résultats de l'analyse du pattern 'voici découvrez'")
345
+ st.json(result['result'], expanded=True)
346
+
347
+ # Afficher le prompt final
348
+ st.subheader("Prompt final envoyé au modèle")
349
+ st.write(result['prompt'])
350
+
351
+ except Exception as e:
352
+ logging.error(f"Error during analysis: {e}")
353
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
354
+
355
  else:
356
  st.error("Veuillez entrer du texte pour lancer l'analyse.")
pattern_en_plus.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.output_parsers import PydanticOutputParser
3
+ from pydantic import BaseModel, Field
4
+ from typing import List
5
+ import json
6
+ from langchain.chat_models import ChatOpenAI
7
+
8
+
9
+ # Modèle de sortie pour la détection de l'expression "en plus" en début de phrase
10
+ class ReformulationDetail(BaseModel):
11
+ original: str = Field(..., description="Phrase originale contenant 'en plus' en début de phrase.")
12
+ explanation: str = Field(..., description="Explication sur pourquoi l'expression 'en plus' est mal placée en début de phrase.")
13
+ reformulation_1: str = Field(..., description="Reformulation de la phrase avec 'en plus' déplacé.")
14
+ reformulation_2: str = Field(..., description="Seconde reformulation de la phrase.")
15
+ reformulation_3: str = Field(..., description="Troisième reformulation de la phrase.")
16
+
17
+ def to_dict(self):
18
+ return {
19
+ "original": self.original,
20
+ "explanation": self.explanation,
21
+ "reformulation_1": self.reformulation_1,
22
+ "reformulation_2": self.reformulation_2,
23
+ "reformulation_3": self.reformulation_3
24
+ }
25
+
26
+ class Summary(BaseModel):
27
+ total_occurrences: int = Field(..., description="Nombre total d'occurrences de 'en plus' détectées.")
28
+ reformulations_provided: int = Field(..., description="Nombre de reformulations fournies.")
29
+
30
+ def to_dict(self):
31
+ return {
32
+ "total_occurrences": self.total_occurrences,
33
+ "reformulations_provided": self.reformulations_provided
34
+ }
35
+
36
+ class DetectionResult(BaseModel):
37
+ reformulations: List[ReformulationDetail] = Field(..., description="Liste des reformulations proposées.")
38
+ summary: Summary = Field(..., description="Résumé de la détection.")
39
+
40
+ def to_dict(self):
41
+ return {
42
+ "reformulations": [reformulation.to_dict() for reformulation in self.reformulations],
43
+ "summary": self.summary.to_dict()
44
+ }
45
+
46
+ # Création du template pour la détection de l'utilisation de "en plus" en début de phrase
47
+ def en_plus_prompt_template():
48
+ return """
49
+ Vous êtes un éditeur de texte IA extrêmement rigoureux. Votre tâche est d'analyser **précisément** le texte fourni pour détecter **toutes les occurrences** de l'expression **"en plus"** utilisée **en début de phrase**, sans "de".
50
+
51
+ Pour chaque phrase trouvée, vous devez impérativement :
52
+
53
+ 1. **Citer exactement** la phrase originale contenant "en plus".
54
+ 2. **Expliquer brièvement et clairement** pourquoi "en plus" est mal placé en début de phrase et préciser qu'il doit être reformulé au cœur de la phrase.
55
+ 3. **Proposer trois alternatives plus correctes**, telles que "de plus", "en outre", "par ailleurs", "aussi", mais **placées au milieu de la phrase**.
56
+ 4. **Assurer** que chaque reformulation est **fluide**, **naturelle** et que l'alternative n'est pas placée au début ou à la fin de la phrase.
57
+
58
+ **Consignes supplémentaires :**
59
+
60
+ - **Ne pas ajouter** d'informations ou de commentaires non demandés.
61
+ - Présenter les résultats de manière **claire**, **structurée** et en respectant le format indiqué.
62
+ - **Ne pas analyser** ou modifier d'autres parties du texte que les phrases contenant "en plus" en début de phrase.
63
+
64
+ ### Format attendu pour chaque occurrence :
65
+
66
+ - **Original** : "[Phrase originale]"
67
+ - **Explication** : "[Explication concise]"
68
+ - **Reformulation 1** : "[Reformulation ici]"
69
+ - **Reformulation 2** : "[Reformulation ici]"
70
+ - **Reformulation 3** : "[Reformulation ici]"
71
+
72
+ Le texte à analyser est le suivant :
73
+ ```{text}```
74
+
75
+ {format_instruction}
76
+ """
77
+
78
+ def detect_en_plus(text):
79
+ # Création du modèle de sortie avec Pydantic
80
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
81
+
82
+ # Génération du prompt à partir du modèle
83
+ gen_prompt_template = PromptTemplate(
84
+ input_variables=["text"],
85
+ template=en_plus_prompt_template(),
86
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
87
+ )
88
+
89
+ # Création du modèle de langage (avec LLM)
90
+ llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="sk-your-api-key")
91
+
92
+ # Chaîne de traitement du prompt avec le modèle et le parseur
93
+ llm_chain = gen_prompt_template | llm | output_parser
94
+
95
+ # Appel du modèle avec le texte fourni
96
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
97
+
98
+ # Conversion du résultat en JSON
99
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
100
+
101
+ # Génération du prompt final
102
+ final_prompt = gen_prompt_template.format(text=text)
103
+
104
+ # Retour des résultats
105
+ return {
106
+ "result": json_result,
107
+ "prompt": final_prompt
108
+ }
pattern_il_suffit_de.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.output_parsers import PydanticOutputParser
3
+ from pydantic import BaseModel, Field
4
+ from typing import List
5
+ import json
6
+ from langchain.chat_models import ChatOpenAI
7
+
8
+
9
+ # Modèle de sortie pour la détection de l'expression "il suffit de"
10
+ class ReformulationDetail(BaseModel):
11
+ original: str = Field(..., description="Phrase originale contenant 'il suffit de'.")
12
+ explanation: str = Field(..., description="Explication sur pourquoi l'expression 'il suffit de' est inadaptée.")
13
+ reformulation_1: str = Field(..., description="Première reformulation de la phrase.")
14
+ reformulation_2: str = Field(..., description="Seconde reformulation de la phrase.")
15
+ reformulation_3: str = Field(..., description="Troisième reformulation de la phrase.")
16
+
17
+ def to_dict(self):
18
+ return {
19
+ "original": self.original,
20
+ "explanation": self.explanation,
21
+ "reformulation_1": self.reformulation_1,
22
+ "reformulation_2": self.reformulation_2,
23
+ "reformulation_3": self.reformulation_3
24
+ }
25
+
26
+ class Summary(BaseModel):
27
+ total_occurrences: int = Field(..., description="Nombre total d'occurrences de 'il suffit de' détectées.")
28
+ reformulations_provided: int = Field(..., description="Nombre de reformulations fournies.")
29
+
30
+ def to_dict(self):
31
+ return {
32
+ "total_occurrences": self.total_occurrences,
33
+ "reformulations_provided": self.reformulations_provided
34
+ }
35
+
36
+ class DetectionResult(BaseModel):
37
+ reformulations: List[ReformulationDetail] = Field(..., description="Liste des reformulations proposées.")
38
+ summary: Summary = Field(..., description="Résumé de la détection.")
39
+
40
+ def to_dict(self):
41
+ return {
42
+ "reformulations": [reformulation.to_dict() for reformulation in self.reformulations],
43
+ "summary": self.summary.to_dict()
44
+ }
45
+
46
+ # Génération du prompt pour la détection de "il suffit de"
47
+ def il_suffit_de_prompt_template():
48
+ return """
49
+ Veuillez analyser le texte ci-dessous pour détecter toutes les occurrences de l'expression "il suffit de".
50
+
51
+ Pour chaque phrase trouvée :
52
+
53
+ 1. **Citez exactement** la phrase originale contenant "il suffit de".
54
+ 2. **Expliquez** pourquoi l'expression "il suffit de" est inadaptée dans un contexte professionnel ou formel, et pourquoi elle simplifie à l'excès ou n'indique pas assez d'importance.
55
+ 3. **Proposez trois reformulations** de la phrase, sans utiliser des expressions qui soulignent l'importance (comme "il est nécessaire de", "il est important de", etc.). Utilisez des formulations à l'impératif pour rendre les instructions plus directes, précises, et professionnelles.
56
+ 4. **Assurez-vous** que chaque reformulation est naturelle, fluide et conserve le sens original sans insister sur l'importance de l'action.
57
+
58
+ **Format attendu pour chaque occurrence** :
59
+
60
+ - **Original** : "[Phrase originale]"
61
+ - **Explication** : "[Explication concise sur l'inadéquation de 'il suffit de']"
62
+ - **Reformulation 1** : "[Première reformulation]"
63
+ - **Reformulation 2** : "[Seconde reformulation]"
64
+ - **Reformulation 3** : "[Troisième reformulation]"
65
+
66
+ Le texte à analyser est le suivant :
67
+ ```{text}```
68
+
69
+ {format_instruction}
70
+ """
71
+
72
+ def detect_il_suffit_de(text):
73
+ # Création du modèle de sortie avec Pydantic
74
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
75
+
76
+ # Génération du prompt à partir du modèle
77
+ gen_prompt_template = PromptTemplate(
78
+ input_variables=["text"],
79
+ template=il_suffit_de_prompt_template(),
80
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
81
+ )
82
+
83
+ # Création du modèle de langage (avec LLM)
84
+ llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="sk-your-api-key")
85
+
86
+ # Chaîne de traitement du prompt avec le modèle et le parseur
87
+ llm_chain = gen_prompt_template | llm | output_parser
88
+
89
+ # Appel du modèle avec le texte fourni
90
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
91
+
92
+ # Conversion du résultat en JSON
93
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
94
+
95
+ # Génération du prompt final
96
+ final_prompt = gen_prompt_template.format(text=text)
97
+
98
+ # Retour des résultats
99
+ return {
100
+ "result": json_result,
101
+ "prompt": final_prompt
102
+ }
pattern_important_crucial.py ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.output_parsers import PydanticOutputParser
3
+ from pydantic import BaseModel, Field
4
+ from typing import List, Tuple
5
+ import json
6
+ from langchain.chat_models import ChatOpenAI
7
+
8
+ # Modèle de sortie pour la détection des expressions exprimant l'importance, la nécessité, ou l'urgence
9
+ class ImportanceDetection(BaseModel):
10
+ pattern: str = Field(..., description="Mot ou expression détectée exprimant l'importance, la nécessité ou l'urgence.")
11
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")
12
+ sentence: str = Field(..., description="Phrase complète où l'expression apparaît.")
13
+ meaning: str = Field(..., description="Sens exprimé par l'expression.")
14
+ alternative_suggestions: List[str] = Field(..., description="Suggestions alternatives pour reformuler la phrase.")
15
+
16
+ def to_dict(self):
17
+ return {
18
+ "pattern": self.pattern,
19
+ "indices": self.indices,
20
+ "sentence": self.sentence,
21
+ "meaning": self.meaning,
22
+ "alternative_suggestions": self.alternative_suggestions
23
+ }
24
+
25
+ class Summary(BaseModel):
26
+ total_patterns_detected: int = Field(..., description="Nombre total de patterns détectés.")
27
+ alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")
28
+ occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")
29
+
30
+ def to_dict(self):
31
+ return {
32
+ "total_patterns_detected": self.total_patterns_detected,
33
+ "alternative_suggestions_provided": self.alternative_suggestions_provided,
34
+ "occurrences": self.occurrences
35
+ }
36
+
37
+ class DetectionResult(BaseModel):
38
+ patterns: List[ImportanceDetection] = Field(..., description="Liste des mots ou expressions détectés.")
39
+ summary: Summary = Field(..., description="Résumé de la détection.")
40
+
41
+ def to_dict(self):
42
+ return {
43
+ "patterns": [pattern.to_dict() for pattern in self.patterns],
44
+ "summary": self.summary.to_dict()
45
+ }
46
+
47
+ # Création du template pour la détection des expressions d'importance, de nécessité ou d'urgence
48
+ def importance_prompt_template():
49
+ return """
50
+ Vous êtes un détecteur de texte IA extrêmement rigoureux. Votre tâche consiste à analyser le texte suivant et à identifier **toutes** les occurrences de mots, expressions, ou locutions exprimant **l'importance**, **la nécessité**, **l'urgence**, ou **le caractère indispensable** d'un élément.
51
+
52
+ Vous devez inclure :
53
+
54
+ 1. **Adjectifs** (tels que) : "crucial", "essentiel", "important", "fondamental", "primordial", "indispensable", "nécessaire", "vital", "pivotal", "majeur", "clé", "significatif", "déterminant", "incontournable", "impératif", "obligatoire", "capital", "prépondérant", "stratégique", "marquant", "décisif", "inévitable", "urgent", etc.
55
+
56
+ 2. **Adverbes** (tels que) : "essentiellement", "crucialement", "fondamentalement", "nécessairement", "impérativement", "urgemment", etc.
57
+
58
+ 3. **Locutions et expressions** (telles que) : "de la plus haute importance", "d'une importance capitale", "de première nécessité", "il est urgent de", "il est vital que", "à ne pas négliger", "absolument nécessaire", "infiniment précieux", etc.
59
+
60
+ 4. **Variations grammaticales** : toutes les formes grammaticales, incluant le féminin, masculin, singulier, pluriel, et les variations de temps, doivent être prises en compte.
61
+
62
+ Pour chaque occurrence trouvée, veuillez :
63
+ - Citer la phrase complète où l'expression apparaît.
64
+ - Indiquer l'expression exacte utilisée dans le texte.
65
+ - Expliquer pourquoi ces expressions peuvent alourdir ou rendre l'introduction trop familière, directe ou directive.
66
+ - Proposer deux reformulations plus simples, fluides et naturelles pour rendre la phrase plus concise ou directe,
67
+ en évitant d'utiliser l'expression ou ses variantes. Assurez-vous que la reformulation conserve le sens original
68
+ tout en étant plus formelle et professionnelle.
69
+
70
+ Assurez-vous également de respecter les règles suivantes :
71
+ 1. Les expressions comme "crucial", "essentiel", "important", "fondamental" ne doivent pas être utilisées plus d'une fois dans l'introduction.
72
+ 2. Les expressions comme "il existe", "il faut", "cependant", "de plus", "en revanche", "néanmoins", "toutefois" ne doivent pas être utilisées en début de phrase.
73
+ 3. Les expressions comme "joue un rôle", "il est", ou "est une étape" ne doivent pas être associées à des adjectifs tels qu'"important", "essentiel", etc.
74
+ 4. "En plus" ne doit pas être utilisé seul en début de phrase.
75
+
76
+ **Format de sortie requis :**
77
+ - "pattern": "mot ou expression détectée",
78
+ - "indices": [[index de début, index de fin pour chaque occurrence]],
79
+ - "sentence": "phrase où l'expression est utilisée",
80
+ - "meaning": "Sens exprimé",
81
+ - "alternative_suggestions": ["suggestion 1", "suggestion 2"]
82
+
83
+ Si aucun pattern n'est trouvé, retournez un JSON avec :
84
+ - "pattern0": "",
85
+ - "occurrences": 0,
86
+
87
+ À la fin, ajoutez un résumé avec :
88
+ - "total_patterns_detected": nombre total de patterns détectés,
89
+ - "alternative_suggestions_provided": nombre de suggestions données,
90
+ - "occurrences": nombre d'occurrences.
91
+
92
+ Le texte à analyser est :
93
+ ```{text}```
94
+
95
+ {format_instruction}
96
+ """
97
+
98
+ def importance_detection(text):
99
+ # Création du modèle de sortie avec Pydantic
100
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
101
+
102
+ # Génération du prompt à partir du modèle
103
+ gen_prompt_template = PromptTemplate(
104
+ input_variables=["text"],
105
+ template=importance_prompt_template(),
106
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
107
+ )
108
+
109
+ # Création du modèle de langage (avec LLM)
110
+ llm = ChatOpenAI(model='gpt-4o', temperature=0.5, api_key="sk-your-api-key")
111
+
112
+ # Chaîne de traitement du prompt avec le modèle et le parseur
113
+ llm_chain = gen_prompt_template | llm | output_parser
114
+
115
+ # Appel du modèle avec le texte fourni
116
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
117
+
118
+ # Conversion du résultat en JSON
119
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
120
+
121
+ # Génération du prompt final
122
+ final_prompt = gen_prompt_template.format(text=text)
123
+
124
+ # Retour des résultats
125
+ return {
126
+ "result": json_result,
127
+ "prompt": final_prompt
128
+ }
pattern_outre.py ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.output_parsers import PydanticOutputParser
3
+ from langchain.chat_models import ChatOpenAI
4
+ from pydantic import BaseModel, Field
5
+ from typing import List, Tuple
6
+ import json
7
+
8
+ # Modèle de sortie pour la détection de l'utilisation incorrecte de "Outre"
9
+ class OutreDetection(BaseModel):
10
+ pattern: str = Field(..., description="Mot ou expression détectée, ici 'Outre'.")
11
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")
12
+ sentence: str = Field(..., description="Phrase complète où 'Outre' est utilisé.")
13
+ explanation: str = Field(..., description="Explication de pourquoi l'utilisation de 'Outre' est incorrecte.")
14
+ alternative_suggestions: List[str] = Field(..., description="Suggestions alternatives pour reformuler la phrase.")
15
+
16
+ def to_dict(self):
17
+ return {
18
+ "pattern": self.pattern,
19
+ "indices": self.indices,
20
+ "sentence": self.sentence,
21
+ "explanation": self.explanation,
22
+ "alternative_suggestions": self.alternative_suggestions
23
+ }
24
+
25
+ class Summary(BaseModel):
26
+ total_patterns_detected: int = Field(..., description="Nombre total de patterns détectés.")
27
+ alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")
28
+ occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")
29
+
30
+ def to_dict(self):
31
+ return {
32
+ "total_patterns_detected": self.total_patterns_detected,
33
+ "alternative_suggestions_provided": self.alternative_suggestions_provided,
34
+ "occurrences": self.occurrences
35
+ }
36
+
37
+ class DetectionResult(BaseModel):
38
+ patterns: List[OutreDetection] = Field(..., description="Liste des occurrences incorrectes de 'Outre'.")
39
+ summary: Summary = Field(..., description="Résumé de la détection.")
40
+
41
+ def to_dict(self):
42
+ return {
43
+ "patterns": [pattern.to_dict() for pattern in self.patterns],
44
+ "summary": self.summary.to_dict()
45
+ }
46
+
47
+ # Création du template pour la détection de l'utilisation incorrecte de "Outre"
48
+ def outre_prompt_template():
49
+ return """
50
+ Veuillez analyser le texte suivant pour détecter les phrases où "Outre" est utilisé en début de phrase, sans être suivi d'un complément approprié.
51
+
52
+ Pour chaque phrase trouvée :
53
+
54
+ - Citez la phrase originale contenant "Outre" en début de phrase.
55
+ - Expliquez pourquoi l'utilisation de "Outre" est incorrecte et précisez qu'il s'agit d'une préposition qui doit être suivie d'un complément.
56
+ - Proposez une correction en remplaçant "Outre" par "En outre" ou en réécrivant la phrase de manière correcte.
57
+ - Assurez-vous que la phrase reformulée soit naturelle, fluide et correcte.
58
+
59
+ Voici l'explication à afficher : "Outre" est une préposition en français qui signifie "en plus de" ou "en dehors de", et doit être suivie d'un complément. Par exemple :
60
+
61
+ - Correct : "Outre ses compétences en gestion, il est également un excellent communicateur."
62
+ - Incorrect : "Outre, il est également un excellent communicateur."
63
+
64
+ Par contre, "En outre" est une locution adverbiale qui signifie "de plus" ou "en plus", et elle est correctement utilisée pour introduire une nouvelle idée ou information, souvent au début d'une phrase. Exemple :
65
+
66
+ - Correct : "En outre, il a une grande expérience dans ce domaine."
67
+
68
+ En résumé :
69
+ - "Outre" est une préposition et doit être suivi d'un complément.
70
+ - "En outre" est une locution adverbiale et peut être utilisée seule au début d'une phrase pour introduire une nouvelle idée.
71
+
72
+ Analysez le texte ci-dessous et détectez toutes les occurrences de "cela signifie que".
73
+
74
+ Pour chaque phrase :
75
+
76
+ - Citez la phrase originale.
77
+ - Supprimez "cela signifie que" et proposez une reformulation concise et élégante qui maintient le sens de la phrase.
78
+ - Assurez-vous que la phrase reformulée soit naturelle, fluide et correcte.
79
+
80
+ Le format de sortie doit être un JSON structuré avec les éléments suivants pour chaque pattern détecté :
81
+
82
+ - "pattern": "mot ou expression détectée",
83
+ - "indices": [[index de début, index de fin pour chaque occurrence]],
84
+ - "sentence": "phrase où l'expression est utilisée",
85
+ - "explanation": "explication de pourquoi l'expression est incorrecte",
86
+ - "alternative_suggestions": ["suggestion 1", "suggestion 2"]
87
+
88
+ Si aucun pattern n'est trouvé, retournez un JSON avec :
89
+ - "pattern0": "",
90
+ - "occurrences": 0,
91
+
92
+ À la fin, ajoutez un résumé avec :
93
+ - "total_patterns_detected": nombre total de patterns détectés,
94
+ - "alternative_suggestions_provided": nombre de suggestions données,
95
+ - "occurrences": nombre d'occurrences.
96
+
97
+ Le texte à analyser est :
98
+ ```{text}```
99
+
100
+ {format_instruction}
101
+ """
102
+
103
+ def detect_outre(text):
104
+ # Création du modèle de sortie avec Pydantic
105
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
106
+
107
+ # Génération du prompt à partir du modèle
108
+ gen_prompt_template = PromptTemplate(
109
+ input_variables=["text"],
110
+ template=outre_prompt_template(),
111
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
112
+ )
113
+
114
+ # Création du modèle de langage (avec LLM)
115
+ llm = ChatOpenAI(model='gpt-4o', temperature=0.5, api_key="sk-your-api-key")
116
+
117
+ # Chaîne de traitement du prompt avec le modèle et le parseur
118
+ llm_chain = gen_prompt_template | llm | output_parser
119
+
120
+ # Appel du modèle avec le texte fourni
121
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
122
+
123
+ # Conversion du résultat en JSON
124
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
125
+
126
+ # Génération du prompt final
127
+ final_prompt = gen_prompt_template.format(text=text)
128
+
129
+ # Retour des résultats
130
+ return {
131
+ "result": json_result,
132
+ "prompt": final_prompt
133
+ }
pattern_permettre.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.output_parsers import PydanticOutputParser
3
+ from pydantic import BaseModel, Field
4
+ from typing import List, Tuple
5
+ from langchain.chat_models import ChatOpenAI
6
+ import json
7
+
8
+ # Modèle de sortie (adapté pour la détection des formes du verbe "permettre" avec reformulations)
9
+ class PermettreDetection(BaseModel):
10
+ pattern: str = Field(..., description="Forme verbale du verbe 'permettre' détectée.")
11
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")
12
+ sentence: str = Field(..., description="Phrase complète où l'expression apparaît.")
13
+ alternative_suggestions: List[str] = Field(..., description="Suggestions alternatives pour la reformulation de la phrase.")
14
+
15
+ def to_dict(self):
16
+ return {
17
+ "pattern": self.pattern,
18
+ "indices": self.indices,
19
+ "sentence": self.sentence,
20
+ "alternative_suggestions": self.alternative_suggestions
21
+ }
22
+
23
+ class Summary(BaseModel):
24
+ total_patterns_detected: int = Field(..., description="Nombre total de formes du verbe 'permettre' détectées.")
25
+ alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")
26
+ occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")
27
+
28
+ def to_dict(self):
29
+ return {
30
+ "total_patterns_detected": self.total_patterns_detected,
31
+ "alternative_suggestions_provided": self.alternative_suggestions_provided,
32
+ "occurrences": self.occurrences
33
+ }
34
+
35
+ class DetectionResult(BaseModel):
36
+ patterns: List[PermettreDetection] = Field(..., description="Liste des formes verbales détectées.")
37
+ summary: Summary = Field(..., description="Résumé de la détection.")
38
+
39
+ def to_dict(self):
40
+ return {
41
+ "patterns": [pattern.to_dict() for pattern in self.patterns],
42
+ "summary": self.summary.to_dict()
43
+ }
44
+
45
+ # Création du template pour la détection avec reformulations
46
+ def permettre_prompt_template():
47
+ return """
48
+ Tu es un détecteur de texte AI très performant et précis. Ta mission est la suivante :
49
+
50
+ - **Objectif :** Identifier toutes les formes conjuguées du verbe **"permettre"** dans le texte ci-dessous (ex : **"permet"**, **"permettra"**, **"permis"** en tant que verbe, etc.).
51
+
52
+ - **Exclusions :** Ignore les cas où **"permis"** est utilisé comme **nom commun** (ex : **"permis de conduire"**, **"permis de construire"**, etc.).
53
+
54
+ **Instructions supplémentaires :**
55
+ - Analyse grammaticale : identifie les mots dont le **lemme** est **"permettre"**.
56
+ - Ne pas considérer **"permis"** comme nom commun, mais bien comme verbe uniquement.
57
+ - Couvre toutes les formes verbales, y compris les participes passés, infinitifs, et les temps futurs, présents, etc.
58
+ - Ne pas dupliquer les détections des mêmes formes verbales.
59
+
60
+ Pour chaque occurrence trouvée, veuillez :
61
+ - Citer la phrase complète où l'expression apparaît.
62
+ - Indiquer l'expression exacte utilisée dans le texte.
63
+ - Expliquer pourquoi ces expressions peuvent alourdir ou rendre l'introduction trop familière, directe ou directive.
64
+ - Proposer deux reformulations plus simples, fluides et naturelles pour rendre la phrase plus concise ou directe,
65
+ en évitant d'utiliser l'expression "permettre" ou ses variantes. Assurez-vous que la reformulation conserve le sens original
66
+ tout en étant plus formelle et professionnelle.
67
+
68
+ Assurez-vous également de respecter les règles suivantes :
69
+ 1. Les expressions comme "crucial", "essentiel", "important", "fondamental" ne doivent pas être utilisées plus d'une fois dans l'introduction.
70
+ 2. Les expressions comme "il existe", "il faut", "cependant", "de plus", "en revanche", "néanmoins", "toutefois" ne doivent pas être utilisées en début de phrase.
71
+ 3. Les expressions comme "joue un rôle", "il est", ou "est une étape" ne doivent pas être associées à des adjectifs tels qu'"important", "essentiel", etc.
72
+ 4. "En plus" ne doit pas être utilisé seul en début de phrase.
73
+
74
+ **Format de sortie requis :**
75
+ - "pattern": "mot ou expression détectée",
76
+ - "indices": [[index de début, index de fin pour chaque occurrence]],
77
+ - "sentence": "phrase où l'expression est utilisée",
78
+ - "alternative_suggestions": ["suggestion 1", "suggestion 2"]
79
+
80
+ Si aucun pattern n'est trouvé, retournez un JSON avec :
81
+ - "pattern0": "",
82
+ - "occurrences": 0,
83
+
84
+ À la fin, ajoutez un résumé avec :
85
+ - "total_patterns_detected": nombre total de patterns détectés,
86
+ - "alternative_suggestions_provided": nombre de suggestions données,
87
+ - "occurrences": nombre d'occurrences.
88
+
89
+ Le texte à analyser est le suivant :
90
+ ```{text}```
91
+
92
+ \n{format_instruction}
93
+ """
94
+
95
+ def permettre_detection(text):
96
+ # Création du modèle de sortie avec Pydantic
97
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
98
+
99
+ # Génération du prompt à partir du modèle
100
+ gen_prompt_template = PromptTemplate(
101
+ input_variables=["text"],
102
+ template=permettre_prompt_template(),
103
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
104
+ )
105
+
106
+ # Création du modèle de langage (avec LLM)
107
+ llm = ChatOpenAI(model='gpt-4o', temperature=0.5, api_key="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")
108
+
109
+ # Chaîne de traitement du prompt avec le modèle et le parseur
110
+ llm_chain = gen_prompt_template | llm | output_parser
111
+
112
+ # Appel du modèle avec le texte fourni
113
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
114
+
115
+ # Conversion du résultat en JSON
116
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
117
+
118
+ # Génération du prompt final
119
+ final_prompt = gen_prompt_template.format(text=text)
120
+
121
+ # Retour des résultats
122
+ return {
123
+ "result": json_result,
124
+ "prompt": final_prompt
125
+ }
pattern_voici_decouvrez.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.prompts import PromptTemplate
2
+ from langchain.output_parsers import PydanticOutputParser
3
+ from pydantic import BaseModel, Field
4
+ from typing import List, Tuple
5
+ import json
6
+ from langchain.chat_models import ChatOpenAI
7
+
8
+
9
+ # Modèle de sortie pour la détection des expressions "VOICI" et "DÉCOUVREZ"
10
+ class ReformulationDetail(BaseModel):
11
+ original: str = Field(..., description="Phrase originale contenant 'VOICI' ou 'DÉCOUVREZ'.")
12
+ explanation: str = Field(..., description="Explication sur pourquoi l'expression alourdit la phrase.")
13
+ reformulation_1: str = Field(..., description="Reformulation basée sur l'approche Anticipation/Intrigue.")
14
+ reformulation_2: str = Field(..., description="Reformulation basée sur l'approche Conversationnel.")
15
+ reformulation_3: str = Field(..., description="Reformulation basée sur l'approche Accompagnement doux.")
16
+
17
+ def to_dict(self):
18
+ return {
19
+ "original": self.original,
20
+ "explanation": self.explanation,
21
+ "reformulation_1": self.reformulation_1,
22
+ "reformulation_2": self.reformulation_2,
23
+ "reformulation_3": self.reformulation_3,
24
+ }
25
+
26
+ class Summary(BaseModel):
27
+ total_occurrences: int = Field(..., description="Nombre total d'occurrences de 'VOICI' et 'DÉCOUVREZ'.")
28
+ reformulations_provided: int = Field(..., description="Nombre de reformulations proposées.")
29
+
30
+ def to_dict(self):
31
+ return {
32
+ "total_occurrences": self.total_occurrences,
33
+ "reformulations_provided": self.reformulations_provided,
34
+ }
35
+
36
+ class DetectionResult(BaseModel):
37
+ reformulations: List[ReformulationDetail] = Field(..., description="Liste des reformulations proposées pour chaque occurrence.")
38
+ summary: Summary = Field(..., description="Résumé de la détection.")
39
+
40
+ def to_dict(self):
41
+ return {
42
+ "reformulations": [reformulation.to_dict() for reformulation in self.reformulations],
43
+ "summary": self.summary.to_dict()
44
+ }
45
+
46
+ # Création du template pour la détection de l'utilisation de "VOICI" et "DÉCOUVREZ" à la fin d'une introduction
47
+ def voici_decouvrez_prompt_template():
48
+ return """
49
+ Tu es un éditeur de texte IA extrêmement performant et rigoureux. Ta tâche est d'analyser **précisément** le texte fourni pour détecter **toutes les occurrences** des expressions **"VOICI"** et **"DÉCOUVREZ"** situées **à la fin d'une introduction**.
50
+ L'introduction , c'est le premier paragraphe.
51
+ Pour chaque occurrence identifiée, tu dois obligatoirement :
52
+
53
+ 1. **Citer exactement** la phrase originale contenant "VOICI" ou "DÉCOUVREZ".
54
+ 2. **Expliquer brièvement et clairement** pourquoi l'utilisation de ce terme peut alourdir ou rendre la transition vers le contenu moins fluide.
55
+ 3. **Proposer trois reformulations distinctes**, selon les approches suivantes :
56
+ - **Anticipation/Intrigue** : Créer de l'attente ou de l'intrigue pour susciter l'intérêt du lecteur.
57
+ - **Conversationnel** : Formuler la phrase de manière plus engageante et naturelle.
58
+ - **Accompagnement doux** : Offrir une transition progressive et moins directive vers le contenu.
59
+
60
+ ### Format attendu pour chaque occurrence :
61
+
62
+ - **Original** : "[Phrase originale]"
63
+ - **Explication** : "[Explication concise]"
64
+ - **Reformulation 1 (Anticipation/Intrigue)** : "[Reformulation ici]"
65
+ - **Reformulation 2 (Conversationnel)** : "[Reformulation ici]"
66
+ - **Reformulation 3 (Accompagnement doux)** : "[Reformulation ici]"
67
+
68
+ Le texte à analyser est le suivant :
69
+ ```{text}```
70
+ Le format de la sortie doit être en JSON.
71
+ ```{format_instruction}```
72
+ """
73
+
74
+ def detect_voici_decouvrez(text):
75
+ # Création du modèle de sortie avec Pydantic
76
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
77
+
78
+ # Génération du prompt à partir du modèle
79
+ gen_prompt_template = PromptTemplate(
80
+ input_variables=["text"],
81
+ template=voici_decouvrez_prompt_template(),
82
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
83
+ )
84
+
85
+ # Création du modèle de langage (avec LLM)
86
+ llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="sk-your-api-key")
87
+
88
+ # Chaîne de traitement du prompt avec le modèle et le parseur
89
+ llm_chain = gen_prompt_template | llm | output_parser
90
+
91
+ # Appel du modèle avec le texte fourni
92
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
93
+
94
+ # Conversion du résultat en JSON
95
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
96
+
97
+ # Génération du prompt final
98
+ final_prompt = gen_prompt_template.format(text=text)
99
+
100
+ # Retour des résultats
101
+ return {
102
+ "result": json_result,
103
+ "prompt": final_prompt
104
+ }