我有两个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)
示例术语dataframe:
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)
如果上述任何内容需要澄清,请告诉我。谢谢,
答案 0 :(得分:1)
您可以使用矢量化方法: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