私はPythonで電子商取引データを扱っています。私はそのデータをPythonでロードし、それをpandasデータフレームに変換しました。今では、不要な文字、ストップワード、ステミングなどを削除するなど、そのデータのテキスト処理を行いたいのですが、現在適用しているコードはうまくいきますが、時間がかかります。私は約200万行のデータを処理する必要があり、それを処理するには永遠にかかる。私は10,000行でそのコードを試したところ、約240秒かかりました。私はこの種のプロジェクトに初めて取り組んでいます。時間を節約する助けがあれば非常に役に立ちます。データフレーム上のPythonでの高速テキスト処理
ありがとうございます。
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
私はそのデータフレームに、このメソッドを呼び出しています:
files['description'] = files.loc[:,'description'].apply(lambda x: textprocessing(str(x)))
あなたはあなたの便利ごとに任意のデータを取ることができます。ポリシーによっては、データを共有できません。
を助けることができる1つの迅速な変化をunwant単語を削除するにはNLTKを使用することができます。ストップワードは通常はリストで、2400個のエントリがあるようです。それをセットにすることは ''ストップワードでは ''もしそうでないならば、かなり速くなるはずです。より小さな抽出物であなたの変更を最初に試みてください。また、適用は時々通常のリストの理解よりも遅くなるようです - あなたのコード(実際には処理の良いビットです)をリストの理解として入力してから、列を抜き出す価値があるかもしれません。 –
私は以前経験しましたパンダに 'apply'するのは、リストや辞書のような他の構造体に関数を適用するよりもかなり遅いということです。 'pandas.DataFrame'にそれらを入れたい特別な理由はありますか?別のものを使うことを考えましたか? –
私はデータベース経由で読み込んでいます。そのため、私はそれをDataFrameに変換して作業しています。私が適用して簡単に作業できる他のデータ保存オプションはありますか? – Sam