Alors que je travaillais sur un cahier Kaggle, j'ai rencontré un problème. Le bloc de code suivant:
from nltk import ngrams
def grams(tokens):
return list(ngrams(tokens, 3))
negative_grams = preprocessed_negative_tweets.apply(grams)
a abouti à une boîte rouge apparaissant en disant
/opt/conda/bin/ipython:5: DeprecationWarning: generator 'ngrams' raised StopIteration
La variable preprocessed_negative_tweets
est un bloc de données Pandas contenant des jetons.
Quelqu'un sait comment faire disparaître ça?
(Cahier complet disponible ici )
À toute autre personne qui ne veut pas ou ne peut pas supprimer l'avertissement.
Cela se produit parce que ngrams
lève une exception StopIteration
pour mettre fin à un générateur, ce qui est obsolète depuis Python 3.5.
Vous pouvez vous débarrasser de l'avertissement en modifiant le code là où le générateur s'arrête. Par conséquent, au lieu de générer StopIteration
, vous n'utilisez que le mot clé Python return
.
Plus sur: PEP 479
Si vous voulez juste faire taire tous les avertissements, vous pouvez faire:
import warnings
warnings.filterwarnings('ignore')
Nous devrions écouter ces avertissements ...
Vous pouvez utiliser un wrapper comme celui-ci:
def get_data(gen):
try:
for elem in gen:
yield elem
except (RuntimeError, StopIteration):
return
et ensuite (selon votre exemple):
data = get_data(ngrams(tokens, 3))
devrait faire l'affaire