FerdinandPyCode commited on
Commit
ed45f6d
·
verified ·
1 Parent(s): 13da91f

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +90 -0
app.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+ from pydantic import BaseModel, Field
4
+ from typing import List, Tuple
5
+ from langchain import LLMChain, PromptTemplate
6
+ from langchain.output_parsers import PydanticOutputParser
7
+
8
+ # Modèles Pydantic pour la détection de fautes de style
9
+ class StyleErrorDetection(BaseModel):
10
+ erroneous_expression: str = Field(..., description="L'expression ou la tournure incorrecte détectée")
11
+ correct_suggestion: str = Field(..., description="La correction ou suggestion correcte")
12
+ occurrences: int = Field(..., description="Nombre d'occurrences de l'expression erronée")
13
+ indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence")
14
+
15
+ def to_dict(self):
16
+ return {
17
+ "erroneous_expression": self.erroneous_expression,
18
+ "correct_suggestion": self.correct_suggestion,
19
+ "occurrences": self.occurrences,
20
+ "indices": self.indices
21
+ }
22
+
23
+ class StyleErrorSummary(BaseModel):
24
+ total_style_errors_detected: int = Field(..., description="Nombre total de fautes de style détectées")
25
+
26
+ def to_dict(self):
27
+ return {
28
+ "total_style_errors_detected": self.total_style_errors_detected
29
+ }
30
+
31
+ class StyleErrorResult(BaseModel):
32
+ style_errors: List[StyleErrorDetection] = Field(..., description="Liste des fautes de style détectées")
33
+ summary: StyleErrorSummary = Field(..., description="Résumé des fautes de style détectées")
34
+
35
+ def to_dict(self):
36
+ return {
37
+ "style_errors": [error.to_dict() for error in self.style_errors],
38
+ "summary": self.summary.to_dict()
39
+ }
40
+
41
+ # Création du prompt et du modèle LLMChain pour analyser les fautes de style
42
+ prompt_template = """
43
+ Tu es un détecteur de texte AI très précis. Je vais te donner un texte, et ta mission est de repérer des fautes de style.
44
+ Cela inclut les répétitions, les tournures de phrases maladroites, et les mauvais choix de mots.
45
+ Pour chaque erreur détectée, tu dois fournir les informations suivantes :
46
+ - L'expression ou la tournure incorrecte détectée
47
+ - La correction ou suggestion correcte
48
+ - Le nombre d'occurrences de l'expression erronée
49
+ - Les indices de début et de fin pour chaque occurrence
50
+
51
+ Le texte à analyser est le suivant :
52
+ ```{text}```
53
+ """
54
+
55
+ # Utilisation de LangChain pour la détection des erreurs
56
+ def get_llm_chain():
57
+ output_parser = PydanticOutputParser(pydantic_object=StyleErrorResult)
58
+ prompt = PromptTemplate(input_variables=["text"], template=prompt_template)
59
+ # Remplacez `llm` par votre modèle de langage préféré, tel que OpenAI GPT ou autre
60
+ llm = None # Remplacez ceci par votre modèle LLM
61
+ llm_chain = LLMChain(llm=llm, prompt=prompt, output_parser=output_parser)
62
+ return llm_chain
63
+
64
+ # Fonction pour analyser les fautes de style
65
+ def analyze_style_errors(text: str) -> dict:
66
+ llm_chain = get_llm_chain()
67
+ result = llm_chain.run(text=text)
68
+ return result.to_dict()
69
+
70
+ # Interface Streamlit
71
+ st.title("Détection des fautes de style")
72
+
73
+ # Champ de saisie de texte
74
+ input_text = st.text_area("Entrez votre texte ici :", height=200)
75
+
76
+ # Bouton d'analyse
77
+ if st.button("Lancer l'analyse"):
78
+ if input_text:
79
+ try:
80
+ # Analyse du texte pour détecter les fautes de style
81
+ result = analyze_style_errors(input_text)
82
+
83
+ # Affichage des résultats en JSON formaté
84
+ st.subheader("Résultats de l'analyse")
85
+ st.json(result)
86
+
87
+ except Exception as e:
88
+ st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
89
+ else:
90
+ st.error("Veuillez entrer du texte pour lancer l'analyse.")