我得到了这一行,它在 python 中对一系列 pandas DataFrame 进行了词形还原。
res = serie.parallel_apply(lambda x :' '.join([d.lemma_ for d in self.nlp_spacy(x)]))
我在这个数据框中得到了 200 000 行数据,并对这个系列进行了其他处理。而且所有这些治疗时间都很长。有没有办法加速这种特定的治疗。
我听说 DataFrame 的矢量化操作更快。有办法这样做吗? apply 方法也很长,因为它检查所有值。我怎样才能避免使用它?
我知道两种加速此类操作的策略。
使用Dask。 Dask 是一个 Python 并行计算库,与 pandas 集成得很好。
批处理。您不必逐字词形还原,您可以批量处理它们。
这样的代码可以帮助你:
import dask.dataframe as dd
from dask.diagnostics import ProgressBar
import spacy
nlp = self.nlp_spacy
def lemmatize_text(text):
return ' '.join([token.lemma_ for token in nlp(text)])
# pandas series --> dask series
# You have to adjust npartions as needed based on your machine
ddf = dd.from_pandas(serie, npartitions=4)
# parallel function
with ProgressBar():
res = ddf.map_partitions(lambda series: series.apply(lemmatize_text)).compute(scheduler='processes')