While working on a Kaggle notebook I ran into an issue. The following code block:
from nltk import ngrams
def grams(tokens):
return list(ngrams(tokens, 3))
negative_grams = preprocessed_negative_tweets.apply(grams)
resulted in a red box appearing saying
/opt/conda/bin/ipython:5: DeprecationWarning: generator 'ngrams' raised StopIteration
The variable preprocessed_negative_tweets
is a Pandas data frame containing tokens.
Anyone know how to make this go away?
(Full notebook available here)
How do I remove deprecation warning in Python? Use warnings. filterwarnings() to ignore deprecation warnings Call warnings. filterwarnings(action, category=DeprecationWarning) with action as "ignore" and category set to DeprecationWarning to ignore any deprecation warnings that may rise.
DeprecationWarning. Base category for warnings about deprecated features when those warnings are intended for other Python developers (ignored by default, unless triggered by code in __main__ ). SyntaxWarning. Base category for warnings about dubious syntactic features.
To anyone else who doesn't want or can't suppress the warning.
This is happening because ngrams
is raising StopIteration
exception to end a generator, and this is deprecated from Python 3.5.
You could get rid of the warning by changing the code where the generator stops, so instead of raising StopIteration
you just use Python's keyword return
.
More on: PEP 479
You can use a wrapper like this one:
def get_data(gen):
try:
for elem in gen:
yield elem
except (RuntimeError, StopIteration):
return
and then (according to your example):
data = get_data(ngrams(tokens, 3))
should do the trick
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With