Я пытаюсь удалить стоп-слова из коллекции стоп-слов NLTK из DataFrame панды, который состоит из строк текстовых данных в Python 3:

import pandas as pd
from nltk.corpus import stopwords

file_path = '/users/rashid/desktop/webtext.csv'
doc = pd.read_csv(file_path, encoding = "ISO-8859-1")
texts = doc['text']
filter = texts != ""
dfNew = texts[filter]

stop = stopwords.words('english')
dfNew.apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))

Я получаю эту ошибку:

'float' object has no attribute 'split'
2
Rashid 1 Дек 2018 в 14:53

1 ответ

Лучший ответ

Похоже, у вас есть цифры в ваших текстах, и они заставляют панд стать слишком умными. Добавьте параметр dtype в pandas.read_csv(), чтобы все в столбце text было импортировано в виде строки:

doc = pd.read_csv(file_path, encoding = "ISO-8859-1", dtype={'text':str})

Как только ваш код заработает, вы можете заметить, что он медленный: поиск в списке неэффективен. Поместите свои стоп-слова в такой набор, и вы будете поражены ускорением. (Оператор in работает как с наборами, так и со списками, но имеет огромную разницу в скорости.)

stop = set(stopwords.words('english'))

Наконец, измените x.split() на nltk.word_tokenize(x). Если ваши данные содержат реальный текст, это отделит пунктуацию от слов и позволит вам правильно сопоставить стоп-слова.

3
alexis 2 Дек 2018 в 09:40