File size: 4,252 Bytes
ed45f6d
 
f7746eb
ed45f6d
f7746eb
 
 
 
 
 
 
 
ed45f6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f35e76
 
 
 
ed45f6d
 
 
 
 
 
 
 
 
 
 
1f35e76
 
 
ed45f6d
 
 
 
1f35e76
ed45f6d
 
f7746eb
 
c6cc554
1f35e76
c6cc554
ed45f6d
 
 
 
 
1f35e76
ed45f6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import streamlit as st
import json
from typing import List
from langchain.output_parsers import PydanticOutputParser
from pydantic.v1 import BaseModel, Field, validator
from langchain.prompts import PromptTemplate
from typing import List
from pydantic import BaseModel, Field, validator, ValidationError
from typing import List, Tuple
from langchain.prompts import PromptTemplate
from langchain_openai import OpenAI,ChatOpenAI


# Modèles Pydantic pour la détection de fautes de style
class StyleErrorDetection(BaseModel):
    erroneous_expression: str = Field(..., description="L'expression ou la tournure incorrecte détectée")
    correct_suggestion: str = Field(..., description="La correction ou suggestion correcte")
    occurrences: int = Field(..., description="Nombre d'occurrences de l'expression erronée")
    indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence")

    def to_dict(self):
        return {
            "erroneous_expression": self.erroneous_expression,
            "correct_suggestion": self.correct_suggestion,
            "occurrences": self.occurrences,
            "indices": self.indices
        }

class StyleErrorSummary(BaseModel):
    total_style_errors_detected: int = Field(..., description="Nombre total de fautes de style détectées")

    def to_dict(self):
        return {
            "total_style_errors_detected": self.total_style_errors_detected
        }

class StyleErrorResult(BaseModel):
    style_errors: List[StyleErrorDetection] = Field(..., description="Liste des fautes de style détectées")
    summary: StyleErrorSummary = Field(..., description="Résumé des fautes de style détectées")

    def to_dict(self):
        return {
            "style_errors": [error.to_dict() for error in self.style_errors],
            "summary": self.summary.to_dict()
        }

# Création du prompt et du modèle LLMChain pour analyser les fautes de style

output_parser = PydanticOutputParser(pydantic_object=StyleErrorResult)


prompt_template = """
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.
Cela inclut les répétitions, les tournures de phrases maladroites, et les mauvais choix de mots. 
Pour chaque erreur détectée, tu dois fournir les informations suivantes :
- L'expression ou la tournure incorrecte détectée
- La correction ou suggestion correcte
- Le nombre d'occurrences de l'expression erronée
- Les indices de début et de fin pour chaque occurrence

Le texte à analyser est le suivant :
```{text}```

Voici le formattage de la sortie :
```{output_parser}```
"""

# Utilisation de LangChain pour la détection des erreurs
def get_llm_chain():
    
    prompt = PromptTemplate(input_variables=["text"], template=prompt_template)
    # Remplacez `llm` par votre modèle de langage préféré, tel que OpenAI GPT ou autre
    # llm = None  # Remplacez ceci par votre modèle LLM
    # llm_chain = LLMChain(llm=llm, prompt=prompt, output_parser=output_parser)
    llm = ChatOpenAI(model='gpt-4o',temperature=0.5, api_key="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", verbose = True)
    llm_chain=  prompt_template | llm | output_parser
    
    return llm_chain

# Fonction pour analyser les fautes de style
def analyze_style_errors(text: str) -> dict:
    llm_chain = get_llm_chain()
    result = llm_chain.invoke({'text': text})
    return result.to_dict()

# Interface Streamlit
st.title("Détection des fautes de style")

# Champ de saisie de texte
input_text = st.text_area("Entrez votre texte ici :", height=200)

# Bouton d'analyse
if st.button("Lancer l'analyse"):
    if input_text:
        try:
            # Analyse du texte pour détecter les fautes de style
            result = analyze_style_errors(input_text)

            # Affichage des résultats en JSON formaté
            st.subheader("Résultats de l'analyse")
            st.json(result)

        except Exception as e:
            st.error(f"Une erreur s'est produite lors de l'analyse : {str(e)}")
    else:
        st.error("Veuillez entrer du texte pour lancer l'analyse.")