Forum Programmation.python Python: Detection des valeurs à renvoyer

Posté par  . Licence CC By‑SA.
Étiquettes :
-1
25
mar.
2021

Bonjour :) ,

J’ai ma fonction qui analyse le message du client, et quand mon algorithme détecte le mot "commande" suivi d’un nombre de 1 à 20, ma fonction est censée me renvoyer les deux valeurs mais en retour, ma fonction me renvoie tout ce qui à 20 (exemple même la date 2020).

J’aimerais que ma fonction me renvoie le nombre entre 1 et 20 de la "commande".

Merci

def detect_question(text,subject):
    questions = []
    intentList = ["Default Fallback Intent"]
    ai = apiai.ApiAI("--- Clef privée retirée par l'équipe du site ---")
    ########
    def req(phrase):
        request = ai.text_request()
        request.lang = 'fr'
        request.session_id = "RANDOM"
        request.query = phrase
        question = request.getresponse()
        s = json.loads(question.read().decode('utf-8'))
        try:
            intentName = s["result"]["metadata"]["intentName"]
        except:
            intentName = "Default Fallback Intent"
        return intentName
    ########
    phrases = re.split("\.|!|\?",text)
    for phrase in phrases:
        # Tests if the phrase contain characters:
        test = False
        for letter in string.ascii_letters:
            if letter in phrase:
                test = True
        if test == False:
            text = text.replace(phrase,"")
            continue # Go to next phrase
        intentName = req(phrase)
        if intentName not in intentList:
            questions.append(intentName)
            intentList.append(intentName)
    l = len(questions)
    if l == 0:
        pattern1 = r"Commande #\d{1,20} confirmée"
        pattern2 = r"Une commande #\d{1,20} est en transit"
        patterns = [pattern1,pattern2]
        default_subject = False
        for pattern in patterns:
            if re.search(pattern,subject):
                default_subject = True
                break
        if not default_subject:
            for letter in string.ascii_letters:
                if letter in subject:
                    intentName = req(subject)
                    if intentName not in intentList:
                        questions.append(intentName)
                        l += 1
                        break
    if l == 0:
        questions = ["Default Fallback Intent","none"]
    elif l == 1:
        questions.append("none")
    elif l == 3 and "thanks" in questions:
        questions.remove("thanks")
    elif l >= 3:
        for i in range(l-2):
            del questions[0]

    return questions
  • # souci de regexp

    Posté par  . Évalué à 5.

    \d{1,20}
    

    Ca ne matche pas les entiers de 1 à 20, mais une chaîne de caractères constituée de 1 à 20 chiffres ;)

    ++
    Gi)

    • [^] # Re: souci de regexp

      Posté par  (site web personnel, Mastodon) . Évalué à 3.

      bien vu ; il voulait (en regexp) du

      \d|1\d|20
      

      ou un truc du genre

      ((1|0?)\d)|20
      

      “It is seldom that liberty of any kind is lost all at once.” ― David Hume

      • [^] # Re: souci de regexp

        Posté par  . Évalué à 4.

        J'ai presque la même ;)

        ([01]?\d)|20

        Je préfère ma version, y a pas à se poser la question dur la priorité de l’opérateur ? sur |

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

        • [^] # Re: souci de regexp

          Posté par  . Évalué à 1.

          Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

      • [^] # Re: souci de regexp

        Posté par  . Évalué à 0.

        Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

    • [^] # Re: souci de regexp

      Posté par  . Évalué à 0.

      Merci :) ! Vos réponses m'ont été très utiles et ont permis de résoudre mon problème.

  • # nommage

    Posté par  . Évalué à 4. Dernière modification le 27 mars 2021 à 09:04.

    Salut,

    Dans la lignée de mon commentaire à ta question suivante, l pour un entier, c'est super pas pratique à comprendre. i à la limite, ou list_length par exemple rend le code beaucoup plus facile à comprendre, pour toi ou (surtout) les autres.

    Matricule 23415

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.