Je travaille sur des données de commerce électronique en python. J'ai chargé ces données dans python et l'ai converti en cadre de données de pandas. Maintenant, je veux effectuer un traitement de texte sur ces données, comme la suppression des caractères indésirables, les mots vides, la suppression, etc. Actuellement, le code que j'ai appliqué fonctionne bien, mais cela prend beaucoup de temps. J'ai environ 2 millions de lignes de données à traiter et cela prend une éternité pour le traiter. J'ai essayé ce code sur 10 000 lignes et cela a pris environ 240 secondes. Je travaille sur ce genre de projet pour la première fois. Toute aide pour réduire le temps serait très utile.Traitement de texte rapide en python sur une base de données
Merci d'avance.
from nltk.stem import PorterStemmer
from nltk.corpus import stopwords
import re
def textprocessing(text):
stemmer = PorterStemmer()
# Remove unwanted characters
re_sp= re.sub(r'\s*(?:([^a-zA-Z0-9._\s "])|\b(?:[a-z])\b)'," ",text.lower())
# Remove single characters
no_char = ' '.join([w for w in re_sp.split() if len(w)>1]).strip()
# Removing Stopwords
filtered_sp = [w for w in no_char.split(" ") if not w in stopwords.words('english')]
# Perform Stemming
stemmed_sp = [stemmer.stem(item) for item in filtered_sp]
# Converting it to string
stemmed_sp = ' '.join([x for x in stemmed_sp])
return stemmed_sp
J'appelle cette méthode sur cette trame de données:
files['description'] = files.loc[:,'description'].apply(lambda x: textprocessing(str(x)))
Vous pouvez prendre les données selon votre convenance. En raison d'une politique, je ne suis pas en mesure de partager les données.
un changement rapide qui peut aider: il semble que les mots d'arrêt sont normalement une liste, et a 2400 entrées dedans. en faire un ensemble devrait accélérer le «sinon w dans les mots d'arrêt» considérablement. essayez d'abord votre changement sur un extrait plus petit. aussi, appliquez semble être plus lent que la compréhension de liste normale parfois - peut être utile d'extraire la colonne, en faisant votre code (qui est en fait un bon peu de traitement) comme une compréhension de liste, puis en réinsérant ... –
que «appliquer» sur les pandas est considérablement plus lent que d'appliquer des fonctions dans d'autres structures comme les listes ou les dictionnaires. Y a-t-il une raison particulière pour laquelle vous les voulez dans un 'pandas.DataFrame'? Avez-vous envisagé d'en utiliser un autre? –
Je le charge dans la base de données. C'est pourquoi je le convertis en DataFrame pour y travailler. Y at-il une autre option de stockage de données que je peux appliquer et travailler facilement? – Sam