Сначала нужно набрать set
стоп-слов и использовать списки для фильтрации токенов.
def preprocessing(txt):
tokens = word_tokenize(txt)
# print(tokens)
stop_words = set(stopwords.words("english"))
tokens = [i for i in tokens if i not in stop_words]
return " ".join(tokens)
string = "Hey this is Sam. How are you?"
print(preprocessing(string))
Выход:
'Hey Sam . How ?'
И вместо использования петли for
используйте df.apply
, как показано ниже:
df['text'] = df['text'].apply(preprocessing)
Почему наборы предпочтительнее списка
В * 1018 есть повторяющиеся записи
Если вы проверите len(stopwords.words())
и len(set(stopwords.words()))
длина сета меньше на несколько сотен. Вот почему set
здесь предпочтительнее.
Вот разница между производительностью при использовании list
и set
x = stopwords.words('english')
y = set(stopwords.words('english'))
%timeit new = [i for i in tokens if i not in x]
# 10000 loops, best of 3: 120 µs per loop
%timeit old = [j for j in tokens if j not in y]
# 1000000 loops, best of 3: 1.16 µs per loop
И, кроме того, list-comprehension
быстрее, чем обычно for-loop
.