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.