FerdinandPyCode commited on
Commit
d088434
·
1 Parent(s): 0c53943

pattern imaginez

Browse files
Files changed (2) hide show
  1. app.py +19 -1
  2. pattern_imaginez.py +129 -0
app.py CHANGED
@@ -14,7 +14,7 @@ from pattern_look import look, look_prompt_template
14
  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
-
18
  # Interface Streamlit
19
  st.title("Analyse du texte")
20
 
@@ -30,6 +30,7 @@ List_prompt = {
30
  "< Détection du pattern 'il existe' >": il_existe_prompt_template(),
31
  "< Détection du pattern 'il faut' >": il_faut_prompt_template(),
32
  "< Détection du pattern 'vous pouvez' >": vous_pouvez_prompt_template(),
 
33
  }
34
 
35
  # Menu déroulant pour sélectionner l'analyse
@@ -219,5 +220,22 @@ if st.button("Lancer l'analyse"):
219
  logging.error(f"Error during analysis: {e}")
220
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
221
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  else:
223
  st.error("Veuillez entrer du texte pour lancer l'analyse.")
 
14
  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
 
 
30
  "< Détection du pattern 'il existe' >": il_existe_prompt_template(),
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
 
220
  logging.error(f"Error during analysis: {e}")
221
  st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
222
 
223
+ elif option == "< Détection du pattern 'imaginez' >":
224
+ try:
225
+ # Analyser le texte pour les fautes de style
226
+ result = imaginez(input_text)
227
+
228
+ # Afficher les résultats en JSON formaté
229
+ st.subheader("Résultats de l'analyse du pattern 'imaginez'")
230
+ st.json(result['result'], expanded=True)
231
+
232
+ # Afficher le prompt final
233
+ st.subheader("Prompt final envoyé au modèle")
234
+ st.write(result['prompt'])
235
+
236
+ except Exception as e:
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.")
pattern_imaginez.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from langchain.prompts import PromptTemplate
3
+ from langchain.chains import LLMChain
4
+ from pydantic import BaseModel, Field
5
+ from typing import List, Tuple
6
+ from langchain.chat_models import ChatOpenAI
7
+ from langchain.output_parsers import PydanticOutputParser
8
+
9
+ # Modèles Pydantic pour structurer la réponse
10
+ class AlternativeSuggestion(BaseModel):
11
+ suggestion_1: str = Field(..., description="Première suggestion de reformulation.")
12
+ suggestion_2: str = Field(..., description="Deuxième suggestion de reformulation.")
13
+
14
+ class PatternDetail(BaseModel):
15
+ pattern: str = Field(..., description="Mot ou expression détectée.")
16
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")
17
+ sentence: str = Field(..., description="Phrase complète où l'expression apparaît.")
18
+ alternative_suggestions: AlternativeSuggestion = Field(..., description="Deux suggestions de reformulation.")
19
+
20
+ def to_dict(self):
21
+ return {
22
+ "pattern": self.pattern,
23
+ "indices": self.indices,
24
+ "sentence": self.sentence,
25
+ "alternative_suggestions": {
26
+ "suggestion_1": self.alternative_suggestions.suggestion_1,
27
+ "suggestion_2": self.alternative_suggestions.suggestion_2,
28
+ }
29
+ }
30
+
31
+ class Summary(BaseModel):
32
+ total_patterns_detected: int = Field(..., description="Nombre total de patterns détectés.")
33
+ alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")
34
+ occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")
35
+
36
+ def to_dict(self):
37
+ return {
38
+ "total_patterns_detected": self.total_patterns_detected,
39
+ "alternative_suggestions_provided": self.alternative_suggestions_provided,
40
+ "occurrences": self.occurrences
41
+ }
42
+
43
+ class DetectionResult(BaseModel):
44
+ patterns: List[PatternDetail] = Field(..., description="Liste des patterns détectés avec détails.")
45
+ summary: Summary = Field(..., description="Résumé de la détection.")
46
+
47
+ def to_dict(self):
48
+ return {
49
+ "patterns": [pattern.to_dict() for pattern in self.patterns],
50
+ "summary": self.summary.to_dict()
51
+ }
52
+
53
+ # Fonction pour générer le prompt template
54
+ def imaginez_prompt_template():
55
+ return """
56
+ Analyser le texte suivant et détecter toutes les occurrences de l'expression "Imaginez" et ses variantes telles que :
57
+
58
+ "Visualisez", "Envisagez", "Concevez", "Supposez", "Pensez à", "Représentez-vous", "Imaginez-vous"
59
+
60
+ Pour chaque occurrence trouvée, veuillez :
61
+
62
+ - Citer la phrase complète où l'expression apparaît.
63
+ - Indiquer l'expression exacte utilisée dans le texte.
64
+ - Expliquer pourquoi ces expressions peuvent alourdir ou rendre l'introduction trop familière, directe ou directive.
65
+ - Proposer deux reformulations plus simples, fluides et naturelles pour rendre la phrase plus concise ou directe,
66
+ en évitant d'utiliser l'expression "Imaginez" ou ses variantes. Assurez-vous que la reformulation conserve le sens original
67
+ tout en étant plus formelle et professionnelle.
68
+
69
+ Assurez-vous également de respecter les règles suivantes :
70
+ 1. Les expressions comme "crucial", "essentiel", "important", "fondamental" ne doivent pas être utilisées plus d'une fois dans l'introduction.
71
+ 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.
72
+ 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.
73
+ 4. "En plus" ne doit pas être utilisé seul en début de phrase.
74
+
75
+ Le format de sortie doit être un JSON structuré avec les éléments suivants pour chaque pattern détecté :
76
+
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
+ - "alternative_suggestions": ["suggestion 1", "suggestion 2"]
81
+
82
+ Si aucun pattern n'est trouvé, retournez un JSON avec :
83
+ - "pattern0": "",
84
+ - "occurrences": 0,
85
+
86
+ À la fin, ajoutez un résumé avec :
87
+ - "total_patterns_detected": nombre total de patterns détectés,
88
+ - "alternative_suggestions_provided": nombre de suggestions données,
89
+ - "occurrences": nombre d'occurrences.
90
+
91
+ Voici le texte à analyser :
92
+ ```{text}```
93
+
94
+ \n{format_instruction}
95
+ """
96
+
97
+ def imaginez(text):
98
+ # Créer le template avec la variable text intégrée directement
99
+ prompt_template = imaginez_prompt_template()
100
+
101
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
102
+
103
+ # Créer le prompt avec le texte intégré
104
+ gen_prompt_template = PromptTemplate(
105
+ input_variables=["text"],
106
+ template=prompt_template,
107
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
108
+ )
109
+
110
+ # Créer une instance du modèle de langage
111
+ llm = ChatOpenAI(model='gpt-4o', temperature=0.5, api_key="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")
112
+
113
+ # Exécuter la chaîne avec le LLM
114
+ llm_chain = gen_prompt_template | llm | output_parser
115
+
116
+ # Appel du modèle avec le texte fourni
117
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
118
+
119
+ # Parsing de la réponse JSON
120
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)
121
+
122
+ # Générer le prompt final
123
+ final_prompt = gen_prompt_template.format(text=text)
124
+
125
+ # Retourne les suggestions ou les erreurs de parsing
126
+ return {
127
+ "result": json_result,
128
+ "prompt": final_prompt
129
+ }