Spaces:
Runtime error
Runtime error
Create app.py
Browse files
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.")
|