FerdinandPyCode commited on
Commit
86e1f99
·
1 Parent(s): 3d7b5ca

update pour ajouter est une étape

Browse files
Files changed (3) hide show
  1. app.py +6 -4
  2. const.py +0 -0
  3. est_une_etape.py +174 -0
app.py CHANGED
@@ -3,13 +3,15 @@ import json
3
  import logging
4
  import os
5
  import spacy
6
-
7
  from typing import List, Tuple
8
  from pydantic import BaseModel, Field
9
  from langchain.output_parsers import PydanticOutputParser
10
  from langchain.prompts import PromptTemplate
11
  from langchain.chat_models import ChatOpenAI
12
 
 
 
 
13
  # Configure logging
14
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
15
 
@@ -109,7 +111,7 @@ st.title("Analyse du texte")
109
  # Menu déroulant pour sélectionner l'analyse
110
  option = st.selectbox(
111
  "Choisissez l'analyse à effectuer :",
112
- ("Détection des fautes de style", "Détection du verbe 'permettre'")
113
  )
114
 
115
  # Champ de saisie du texte
@@ -118,10 +120,10 @@ input_text = st.text_area("Entrez votre texte ici :", height=200)
118
  # Bouton d'analyse
119
  if st.button("Lancer l'analyse"):
120
  if input_text:
121
- if option == "Détection des fautes de style":
122
  try:
123
  # Analyser le texte pour les fautes de style
124
- result = analyze_style_errors(input_text)
125
 
126
  # Afficher les résultats en JSON formaté
127
  st.subheader("Résultats de l'analyse des fautes de style")
 
3
  import logging
4
  import os
5
  import spacy
 
6
  from typing import List, Tuple
7
  from pydantic import BaseModel, Field
8
  from langchain.output_parsers import PydanticOutputParser
9
  from langchain.prompts import PromptTemplate
10
  from langchain.chat_models import ChatOpenAI
11
 
12
+ # Import the function for detecting the "est une étape" pattern
13
+ from est_une_etape import une_etape
14
+
15
  # Configure logging
16
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
17
 
 
111
  # Menu déroulant pour sélectionner l'analyse
112
  option = st.selectbox(
113
  "Choisissez l'analyse à effectuer :",
114
+ ("< Détection du pattern 'est une étape' >")# , "Détection du verbe 'permettre'"
115
  )
116
 
117
  # Champ de saisie du texte
 
120
  # Bouton d'analyse
121
  if st.button("Lancer l'analyse"):
122
  if input_text:
123
+ if option == "< Détection du pattern 'est une étape' >":
124
  try:
125
  # Analyser le texte pour les fautes de style
126
+ result = une_etape(input_text)
127
 
128
  # Afficher les résultats en JSON formaté
129
  st.subheader("Résultats de l'analyse des fautes de style")
const.py ADDED
File without changes
est_une_etape.py ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
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
+
15
+ class PatternDetail(BaseModel):
16
+ pattern: str = Field(..., description="Mot ou expression détectée.")
17
+ adjectif: str = Field(..., description="Adjectif associé à l'expression détectée.")
18
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")
19
+ sentence: str = Field(..., description="Phrase complète où l'expression apparaît.")
20
+ alternative_suggestions: AlternativeSuggestion = Field(..., description="Deux suggestions de reformulation.")
21
+
22
+ def to_dict(self):
23
+ return {
24
+ "pattern": self.pattern,
25
+ "adjectif": self.adjectif,
26
+ "indices": self.indices,
27
+ "sentence": self.sentence,
28
+ "alternative_suggestions": {
29
+ "suggestion_1": self.alternative_suggestions.suggestion_1,
30
+ "suggestion_2": self.alternative_suggestions.suggestion_2,
31
+ }
32
+ }
33
+
34
+
35
+ class Summary(BaseModel):
36
+ total_patterns_detected: int = Field(..., description="Nombre total de patterns détectés.")
37
+ alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")
38
+ occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")
39
+
40
+ def to_dict(self):
41
+ return {
42
+ "total_patterns_detected": self.total_patterns_detected,
43
+ "alternative_suggestions_provided": self.alternative_suggestions_provided,
44
+ "occurrences": self.occurrences
45
+ }
46
+
47
+
48
+ class DetectionResult(BaseModel):
49
+ patterns: List[PatternDetail] = Field(..., description="Liste des patterns détectés avec détails.")
50
+ summary: Summary = Field(..., description="Résumé de la détection.")
51
+
52
+ def to_dict(self):
53
+ return {
54
+ "patterns": [pattern.to_dict() for pattern in self.patterns],
55
+ "summary": self.summary.to_dict()
56
+ }
57
+
58
+
59
+ # Fonction pour générer un output parser
60
+ def generate_output_parser(response: str) -> dict:
61
+ try:
62
+ parsed_response = json.loads(response)
63
+ detection_result = DetectionResult(
64
+ patterns=[PatternDetail(
65
+ pattern=item["pattern"],
66
+ adjectif=item["adjectif"],
67
+ indices=item["indices"],
68
+ sentence=item["sentence"],
69
+ alternative_suggestions=AlternativeSuggestion(
70
+ suggestion_1=item["alternative_suggestions"][0],
71
+ suggestion_2=item["alternative_suggestions"][1]
72
+ )
73
+ ) for item in parsed_response["patterns"]],
74
+ summary=Summary(
75
+ total_patterns_detected=parsed_response["summary"]["total_patterns_detected"],
76
+ alternative_suggestions_provided=parsed_response["summary"]["alternative_suggestions_provided"],
77
+ occurrences=parsed_response["summary"]["occurrences"]
78
+ )
79
+ )
80
+ return detection_result.to_dict()
81
+ except Exception as e:
82
+ return {"error": f"Failed to parse response: {str(e)}"}
83
+
84
+
85
+
86
+ def une_etape(text):
87
+ # Créer le template avec la variable text intégrée directement
88
+ prompt_template = """
89
+ Analyser le texte suivant et identifier toutes les phrases où une expression similaire à "est une étape" est utilisée,
90
+ y compris des variantes comme "est une étape", "constitue une étape", "représente une étape", "marque une étape",
91
+ "signifie une étape", "symbolise une étape", etc.
92
+
93
+ Recherche particulièrement ces expressions lorsqu'elles sont associées à des adjectifs exprimant l'importance
94
+ (par exemple, "important", "essentiel", "crucial", "primordial", "fondamental", "indispensable", "déterminant",
95
+ "vital", "majeur", "clé", "nécessaire", "stratégique", "significatif", etc.), que l'adjectif se trouve avant ou après le mot "étape".
96
+
97
+ Pour chaque occurrence trouvée, veuillez :
98
+
99
+ - Citer la phrase complète où l'expression apparaît.
100
+ - Indiquer l'expression exacte utilisée dans le texte.
101
+ - Mentionner l'adjectif d'importance associé.
102
+ - Proposer deux reformulations de la phrase pour changer l'expression détectée et l'adjectif associé,
103
+ sans employer d'expression équivalente.
104
+ - Assurez-vous de respecter les règles suivantes :
105
+ 1. Les expressions comme "crucial", "essentiel", "important", "fondamental" doivent être utilisées une seule fois
106
+ dans l'introduction (premier paragraphe).
107
+ 2. Évitez l'usage de mots comme "il existe", "il faut", "cependant", "de plus", "en revanche", "toutefois" en début de phrase.
108
+ 3. N'utilisez pas "joue un rôle", "il est", ou "est une étape" avec des adjectifs tels qu'"important", "essentiel", etc.
109
+
110
+ Le format de sortie doit être un JSON structuré avec les éléments suivants pour chaque pattern détecté :
111
+
112
+ - "pattern": "mot ou expression détectée",
113
+ - "adjectif": "adjectif associé",
114
+ - "indices": [[index de début, index de fin pour chaque occurrence]],
115
+ - "sentence": "phrase où l'expression est utilisée",
116
+ - "alternative_suggestions": ["suggestion 1", "suggestion 2"]
117
+
118
+ Si aucun pattern n'est trouvé, retournez un JSON avec :
119
+
120
+ - "pattern0": "",
121
+ - "occurrences": 0,
122
+
123
+ Ajoutez également un résumé à la fin :
124
+
125
+ - "total_patterns_detected": nombre total de patterns détectés,
126
+ - "alternative_suggestions_provided": nombre de suggestions données
127
+ - "occurrences": nombre d'occurrences.
128
+
129
+ Voici le texte à analyser :
130
+ ```{text}```
131
+
132
+ \n{format_instruction}
133
+ """
134
+
135
+ output_parser = PydanticOutputParser(pydantic_object=DetectionResult)
136
+
137
+ # Créer le prompt avec le texte intégré
138
+ # prompt = PromptTemplate(template=template, input_variables=["text"])
139
+
140
+ gen_prompt_template = PromptTemplate(
141
+ input_variables=["text"],
142
+ template=prompt_template,
143
+ partial_variables={'format_instruction': output_parser.get_format_instructions()}
144
+ )
145
+
146
+ # Créer une instance du modèle de langage
147
+ llm = ChatOpenAI(model='gpt-4o',temperature=0.5, api_key="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")
148
+
149
+ # Exécuter la chaîne avec le LLM
150
+ llm_chain = gen_prompt_template | llm | output_parser # LLMChain(prompt=prompt, llm=llm, verbose=True)
151
+
152
+ # Appel du modèle avec le texte fourni
153
+ result_dict = llm_chain.invoke({"text": text}).to_dict()
154
+
155
+ # Parsing de la réponse JSON
156
+
157
+ json_result = json.dumps(result_dict, indent=8, ensure_ascii= False)
158
+
159
+ # Retourne les suggestions ou les erreurs de parsing
160
+ return json_result
161
+
162
+
163
+ # # Exemple d'utilisation avec le texte à analyser
164
+ # textea = """
165
+ # Dans le développement personnel, chaque progrès est une étape cruciale vers une meilleure version de soi-même.
166
+ # De plus, sur le chemin de la réussite professionnelle, l'acquisition de nouvelles compétences constitue une étape incontournable.
167
+ # Dans la vie de toute organisation, la prise de décisions stratégiques représente une étape déterminante pour son avenir.
168
+ # Chaque crise surmontée marque une étape importante dans le renforcement de la résilience,
169
+ # tandis que le franchissement d'un obstacle majeur signifie une étape de transition vers de nouveaux horizons.
170
+ # Enfin, la signature d'un contrat décisif symbolise une étape clé dans la réalisation des objectifs à long terme.
171
+ # """
172
+
173
+ # # Appel de la fonction et affichage du résultat
174
+ # print(une_etape(textea))