1

我有一个包含 350k 行和一列(名为“文本”)的数据框。

我想将此函数应用于我的数据集:

def extract_keyphrases(caption, n):
    extractor = pke.unsupervised.TopicRank()
    extractor.load_document(caption)
    extractor.candidate_selection(pos=pos, stoplist=stoplist)
    extractor.candidate_weighting(threshold=0.74, method='average')
    keyphrases = extractor.get_n_best(n=n, stemming=False)
    return(keyphrases)

df['keywords'] = df.apply(lambda row: (extract_keyphrases(row['text'],10)),axis=1)

但是如果我运行它,它需要很长时间才能完成(将近 50 个小时)。

可以使用 chunksize 或其他方法来并行化数据帧操作,如何?

感谢您的时间!

4

1 回答 1

1

使用multiprocessing模块。为了避免通过每行创建一个进程来避免开销,每个进程处理 20,000 行:

import multiprocessing

def extract_keyphrases(caption, n):
    ...

def extract_keyphrases_batch(captions):
    for caption in captions:
        extract_keyphrases(caption, 10)

def get_chunks(df, size):
    for i in range(0, len(df), size):
        yield df.iloc[i:min(i+size, len(df))]

if __name__ == '__main__':
    with multiprocessing.Pool(multiprocessing.cpu_count()) as pool:
        data = pool.map(extract_keyphrases_batch, get_chunks(df, 20000))
        out = pd.concat(data)
于 2021-07-02T20:39:23.547 回答