Partage
  • Partager sur Facebook
  • Partager sur Twitter

Séparateur de phrase, parser un texte avec NLTK

Sujet résolu
    16 juillet 2019 à 12:06:08

    Bonjour, je souhaite séparer un texte en phrase. J'ai donc utiliser la fonction suivante : 

    texte = "Bonjour ! ça va ? $Oui$ J'ai un problème ! "
    nltk.sent_tokenize(texte)


    Ce code renvoie donc bien : 

    ['Bonjour !', 'ça va ?', "$Oui$ J'ai un problème !"]

    Cependant "nltk.sent_tokenize" ne sépare que les phrases par les signes de ponctuation ".", "!" et "?".

    Moi je voudrais aussi qu'il sépare les phrases avec le séparateur "$".

    Je n'ai pas réussi à trouver de solution sur Internet donc si quelqu'un pouvait m'aider ça serait gentil.

    Je vous remercie de vos réponses !

    -
    Edité par Minh-QuanTran1 16 juillet 2019 à 12:06:57

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2019 à 18:32:30

      Bonjour

      Soit tu utilises les expressions régulière :  

      import re
      
      texte = "Bonjour ! ça va ? $Oui$ J'ai un problème ! "
      
      re.split('!?\$', texte)

      Soit avec nltk (a vérifier car je n'ai pas testé) :

      language_punkt_vars = nltk.tokenize.punkt.PunktLanguageVars
      language_punkt_vars.sent_end_chars=('.','!','?','\$')

      -
      Edité par mika83 16 juillet 2019 à 18:44:07

      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2019 à 11:25:11

        Merci pour ta réponse Mika83 ! 

        J'ai essayé les 2 techniques que tu m'as proposé mais il y a toujours un problème : 

        Pour les expressions régulière, voici mon code : 

        import re
         
        texte = "Hello. Bonjour. $ça va$ $Oui$ J'ai un problème ! $ test $"
        a = re.split('.!?\$', texte)


        Qui me renvoie ça : 

        ['Hello. Bonjour.', 'ça v', '', 'Ou', " J'ai un problème !", ' test', '']

        ça sépare bien les phrases en fonction du signe "$" mais pas en fonction des autres signes de ponctuation mis en paramètre. 

        De plus je sais pas pourquoi dans le résultat, il renvoie des espaces vide : ''  .

        Concernant nltk, j'ai lu la doc mais je n'ai pas compris où il fallait que je rentre en paramètre mon texte dans le code que tu m'as montré.

        J'ai essayé de rajouter ça : 

        trainer = nltk.tokenize.punkt.PunktTrainer(texte, language_punkt_vars)
        params = trainer.get_params()
        sbd = nltk.tokenize.punkt.PunktSentenceTokenizer(params)
        
        print(trainer)

        Mais ça me renvoie ça je sais pas ce que ça veut dire : 

        <nltk.tokenize.punkt.PunktTrainer object at 0x00000203DAFA4E80>

        Merci d'avance !!



        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 11:54:43

          Le point représente n'importe quel caractère dans une regex, il faut l'échapper comme le $ et utiliser des crochets:

          a = re.split(r'[\.!?\$]', texte)



          -
          Edité par thelinekioubeur 17 juillet 2019 à 11:57:53

          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2019 à 13:05:49

            OK ça marche merci ! 

            Mais par contre je comprends toujours pas pourquoi il y a des :  '  '     entre chaque phrase. 

            ['Hello', ' Bonjour', ' ', 'ça va', ' ', 'Oui', " J'ai un problème ", ' ', ' test ', '']



            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2019 à 13:31:12

              Ça doit être les espaces qui suivent es caractères de fin, essaye avec ça :

              a = re.split(r'[\.!?\$][ ]', texte)



              -
              Edité par thelinekioubeur 17 juillet 2019 à 13:31:59

              • Partager sur Facebook
              • Partager sur Twitter
                17 juillet 2019 à 14:02:12

                texte = "Hello. Bonjour. $ça va$ $Oui$ J'ai un problème ! $ test $"
                
                ça me renvoie ça avec ce que tu m'as dit de faire : 
                ['Hello', 'Bonjour', '$ça va', '$Oui', "J'ai un problème ", '', 'test $']
                Y'a encore quelques problème d'espace notamment entre "problème" et "test".
                De plus je voudrais si possible qu'il ne m'affiche pas les "$" comme on a vu dans les posts ci-dessus.
                • Partager sur Facebook
                • Partager sur Twitter
                  17 juillet 2019 à 14:39:50

                  Bah là ça dépasse mes compétences regexiennes mais sinon en python tu peux toujours filtrer le résultat :

                  a = list(filter(lambda s: s.strip(), re.split(r'[\.!?\$]', texte)))



                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 juillet 2019 à 17:16:20

                    C'est a cause de ta facon de formatter ta source ..

                    "Hello. Bonjour. $ça va$ $Oui$ J'ai un problème ! $ test $"


                    devrait etre

                    "Hello. Bonjour. $ça va $ Oui $ J'ai un problème ! $ test $"

                    fait pas oublier que c'est un separateur , donc :
                    $ca va $ $ oui $

                    devient : 'ca va' , ' ' , 'oui'

                    • Partager sur Facebook
                    • Partager sur Twitter

                    1 - Make it work
                    2 - Make it right
                    3 - Make it simple
                    4 - Make it fun

                    Séparateur de phrase, parser un texte avec NLTK

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown