2 votes

L'objet n'a pas d'attribut lors de la suppression des mots vides avec NLTK

J'essaie de supprimer les mots d'arrêt de la collection de mots d'arrêt de NLTK à partir d'un DataFrame pandas constitué de lignes de données textuelles en 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)]))

Je reçois cette erreur :

'float' object has no attribute 'split'

3voto

alexis Points 10856

On dirait que vous avez des chiffres dans vos textes et qu'ils poussent les pandas à devenir un peu trop intelligents. Ajoutez le dtype à l'option pandas.read_csv() pour s'assurer que tout ce qui se trouve dans la colonne text est importé sous la forme d'une chaîne de caractères :

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

Une fois que votre code fonctionnera, vous remarquerez peut-être qu'il est lent : Chercher des choses dans une liste est inefficace. Placez vos mots d'arrêt dans un ensemble comme celui-ci, et vous serez étonné de la rapidité de l'opération. (Les in fonctionne à la fois avec les ensembles et les listes, mais présente une énorme différence de vitesse).

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

Enfin, le changement x.split() a nltk.word_tokenize(x) . Si vos données contiennent du texte réel, cela séparera la ponctuation des mots et vous permettra de faire correspondre correctement les mots vides.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X