Partage
  • Partager sur Facebook
  • Partager sur Twitter

analyse de phrase

assistent vocal

    19 mars 2018 à 17:27:35

    bonjours a tous ! (désoler par avance pour les fautes, je suis dyslexique) je développe un assistent vocal domotique sans prétention depuis quelque temps en python 3.X. pour la reconnaissance vocal j'utilise l'API de google et je lance la reconnaissance vocale a l'aide d'un mot clef grâce a snowboy. il peut allumer des lampes, le chauffage mai aussi effectuer de recherche web, des traduction, donner de définition avec la librairie Wikipedia etc. il tourne sous Raspbian sur une rpi. mon problème est le suivent :

    quand je récupère la phrase reconnue par google. je doit la traiter pour déterminer l'action a effectuer (recherche, définition etc.), cependant pour l’instant je fonctionne par mot clef avec des ligne de codes bête et méchant. le code n'est qu'un alignement de :

    if mot_clef1 in phrase or mot_clef2 in phrase and mot_clef3 in phrase :                                                                       effectuer l'action       

    cependant ce système est fastidieux a coder, et peut perforent car le temps de travaille serai très long si on devais programmer tout les phrase possible or si on met peut de mot clef dans notre condition cela peut être présidentiable pour la précision (faut positifs).

    j'aimerai donc savoirs si il y aurai un moyen plus élégant que des condition à outrance  ou/et plus préci pour analyser les phrase reconnue ?                            

    -
    Edité par MichaelLogeais 19 mars 2018 à 17:38:43

    • Partager sur Facebook
    • Partager sur Twitter
      19 mars 2018 à 18:01:27

      En considérant que ça reste sans prétention, tu peux passer par des mots clés stockés dans une base de donnée ou dans un fichier. De cette manière :

      # test.txt
      lampe	lampe, allume, lumière
      wikipedia	rechercher, definition, wikipedia
      chauffage	allume, chauffage
      from collections import defaultdict
      
      def load_data() :
          data = {}
          
          with open("./test.txt") as f :
              for line in f :
                  if line.startswith("#") : continue
                  line = line.strip().split("\t")
                  action, keywords = line
                  keywords = [keyword.strip() for keyword in keywords.split(",")]
                  data[action] = keywords
      
          return data
      
      def action(data) :
          sentence = input("Une phrase :")
      
          hits = defaultdict(int)
          for action, keywords in data.items() :
              for keyword in keywords :
                  if keyword in sentence :
                      hits[action] += 1
      
          if hits :
              max_hit = max(hits.values())
              best_hit = [action for action, hit in hits.items() if hit == max_hit]
              print ("Best hit(s) : %s" %" - ".join(best_hit))
      
          else :
              print ("No hit found")
      
      if __name__ == "__main__" :
          data = load_data()
          
          while True :
              action(data)

      Cependant c'est extrêmement basique, il suffit d'une variation minime dans la reconnaissance pour que ça ne marche plus.


      -
      Edité par Jevanni 19 mars 2018 à 18:07:26

      • Partager sur Facebook
      • Partager sur Twitter
        19 mars 2018 à 20:18:23

        merci beaucoup pour votre réponse rapide! ce n'est certes pas très flexible quant à la phrase en entrée cependant c'est déjà plus élégant, merci. sinon auriez-vous une autre idée ? Quitte à ce qu'elle soit plus compliqué.
        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2018 à 10:40:20

          Hum. J'imagine que l'étape supérieure serait de faire du machine learning, ou lorsque une phrase est entendue, un traitement est associés en fonction des réponses déjà associées avec cette ou une phrase proche de celle-ci, avec une évolution au cours de l'utilisation. Mais ça repose sur des technos pas facile à maîtriser, un nombre d'utilisateurs plus ou moins conséquent et un algorithme solide qui tient compte des variations entre deux phrases légèrement différentes mais ayant le même but. Rien de facile à priori. Peut-être que d'autres personnes auront une autre idée cependant.
          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2018 à 12:12:30

            oui, je me suis déjà intéresser au machine learning pour résoudre mon problème. j'ai fais des tests avec la librairie tensorflow (qu est au passage trop bien ! elle permet de créé des réseaux de neurones a différent niveaux d'abstraction) mai je n'est pas eu de résultat concluent, déjà j'ai du faire ma base de donner moi même donc je n'avais  que pres de 500 exemple et ensuit le 2ème problème est que j'utiliser un certain type de réseau de neurone, le perceptron et il n'est sans doute pas le plus adapté par rapport a un réseau récurent ou autre.
            • Partager sur Facebook
            • Partager sur Twitter
              20 mars 2018 à 13:09:45

              Pour le coup je n'ai que peu d'expérience dans le domaine, je laisse quelqu'un d'autre t'orienter ou t'aider !
              • Partager sur Facebook
              • Partager sur Twitter

              analyse de phrase

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown