объект не имеет атрибута при удалении стоп-слов с помощью NLTK - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь удалить стоп-слова из коллекции стоп-слов NLTK из pandas 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'

1 Ответ

0 голосов
/ 02 декабря 2018

Звучит так, будто в ваших текстах есть цифры, и они заставляют панд стать слишком умными.Добавьте параметр 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).Если ваши данные содержат реальный текст, это отделит пунктуацию от слов и позволит вам правильно сопоставить стоп-слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...