Одним из улучшений может быть сохранение набора игнорируемых слов вместо преобразования каждый раз в понимание списка. Это улучшение может быть огромным в зависимости от размера списка стоп-слов и количества вызовов для преобразования списка в набор.
Вы можете запустить следующий код в этом онлайн-компиляторе. Ссылка: https://onlinegdb.com/HJVVgw4cI
from timeit import default_timer as timer
a = ['a','b','c','d']
sent = 'abc in my word'
start = timer()
for i in range(0,10000):
a = [i for i in sent if not i in set(a)]
end = timer()
print(end - start)
start = timer()
b = set(a)
for i in range(0,10000):
a = [i for i in sent if not i in b]
end = timer()
print(end - start)
результат приведенного выше кода:
0.36757875100011006
0.09286667400010629
В вашем коде это будет примерно так.
import re
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
corpus = []
stopword_set = set(stopwords.words('english'))
for i in range(0,3500):
review = re.sub('[^a-zA-Z0-9]', ' ', str(dt["TEXT"][i]))
review = review.lower()
review = review.split()
ps= PorterStemmer()
review = [ps.stem(word) for word in review if not word in stopword_set]review = ' '.join(review)
corpus.append(review)
Я подозреваю, что в регулярном выражении можно сделать еще одно улучшение. регулярное выражение может работать медленно, если нам приходится каждый раз его компилировать.
# this can be optimized in your code....
review = re.sub('[^a-zA-Z0-9]', ' ', str(dt["TEXT"][i]))