J'essaie de produire une liste bigramme d'une phrase donnée par exemple, si je tape,
To be or not to be
Je veux que le programme génère
to be, be or, or not, not to, to be
J'ai essayé le code suivant mais me donne juste
<generator object bigrams at 0x0000000009231360>
Voici mon code:
import nltk
bigrm = nltk.bigrams(text)
print(bigrm)
Alors, comment puis-je obtenir ce que je veux? Je veux une liste de combinaisons des mots comme ci-dessus (être, être ou, ou pas, ne pas être).
nltk.bigrams()
retourne un itérateur (un générateur en particulier) de bigrammes. Si vous voulez une liste, passez l'itérateur à list()
. Il attend également une séquence d'éléments pour générer des bigrammes, vous devez donc diviser le texte avant de le passer (si vous ne l'avez pas fait):
bigrm = list(nltk.bigrams(text.split()))
Pour les imprimer séparés par des virgules, vous pouvez (dans python 3):
print(*map(' '.join, bigrm), sep=', ')
Si on python 2, alors par exemple:
print ', '.join(' '.join((a, b)) for a, b in bigrm)
Notez que pour l'impression, vous n'avez pas besoin de générer une liste, utilisez simplement l'itérateur.
Le code suivant produit une liste bigram
pour une phrase donnée
>>> import nltk
>>> from nltk.tokenize import Word_tokenize
>>> text = "to be or not to be"
>>> tokens = nltk.Word_tokenize(text)
>>> bigrm = nltk.bigrams(tokens)
>>> print(*map(' '.join, bigrm), sep=', ')
to be, be or, or not, not to, to be