在 pandas 中并行化字符串替换

Parallelise string replace in pandas

我有两个 pandas 数据帧。一个包含文本,另一个包含我想在文本中搜索和替换的一组术语。文本有很多排列,其中同一个词可以在文本中多次出现并且有多个术语。

我创建了一个循环,它能够用一个术语替换文本中的每个单词,但是它非常慢,特别是考虑到它正在处理大型语料库。

我的问题是: 有没有办法 运行 下面的函数并行化以提高速度?或者该函数可以使用 Numba 或其他类型的优化来加速它吗?注意,文本中可能有许多需要替换的排列。

示例文本数据框:

d = {'ID': [1, 2, 3], 'Text': ['here is some random text', 'random text here', 'more random text']}
text_df = pd.DataFrame(data=d)

示例术语数据框:

d = {'Replace_item': ['<RANDOM_REPLACED>', '<HERE_REPLACED>', '<SOME_REPLACED>'], 'Text': ['random', 'here', 'some']}
replace_terms_df = pd.DataFrame(data=d)

当前解决方案示例:

def find_replace(text, terms):
for _, row in terms.iterrows():
    term = row['Text']
    item = row['Replace_item']
    text.Text = text.Text.str.replace(term, item)
    return text
find_replace(text_df, replace_terms_df)

如果以上任何内容需要澄清,请告诉我。谢谢,

您可以使用矢量化方法:Series.replace(lst1, lst2, regex=True)

In [90]: (text_df.Text
                 .replace(replace_terms_df.Text.tolist(), 
                          replace_terms_df.Replace_item.tolist(),
                          regex=True))
Out[90]:
0    <HERE_REPLACED> is <SOME_REPLACED> <RANDOM_REP...
1               <RANDOM_REPLACED> text <HERE_REPLACED>
2                          more <RANDOM_REPLACED> text
Name: Text, dtype: object