Dataframe из всех возможных сочетаний синонимов в строках

Есть небольшой датафрейм из предложений. Есть небольшой словарь, где некоторым (в примере, всем) словам из предложений поставлены в соответствие по несколько синонимов. Нужно составить датафрейм из оригинальных запросов и запросов со всеми возможными сочетаниями синонимов.

У меня пока получилось сделать набор из запросов, где на синонимы заменено по одному слову, то есть нигде не используется больше одного синонима какого-либо слова.

Пример кода ниже:

# Пример запросов
df_requests = pd.DataFrame([['word1 word2 word3'],['word4 word5, word6']], columns=['requests_original'])
print(df_requests,'\n\n')
# Пример словаря синонимов. 
df_synonyms = pd.DataFrame([['word1','synonym1_1'],
                            ['word1','syninym1_2'],
                            ['word1','syninym1_3'],
                            ['word2','syninym2_1'],
                           ['word2','syninym2_2'],
                           ['word2','syninym2_3'],
                           ['word2','syninym2_4'],
                           ['word3','syninym3_1'],
                           ['word3','syninym3_2'],
                           ['word4','syninym4_1'],
                            ['word4','syninym4_2'],
                            ['word4','syninym4_3'],
                            ['word4','syninym4_4'],
                            ['word5','syninym5_1'],
                            ['word5','syninym5_2'],
                            ['word5','syninym5_3'],
                            ['word6','syninym6_1'],
                            ['word6','syninym6_2'],], columns=['word_original','synonyms'])
print(df_synonyms)

# Заготовка результирующего датафрейма
df_new_reqs = pd.DataFrame(columns=['Запрос оригинальный','Запрос с синонимами'])

# Для каждого предложения из списка оригинальных предложений
for req in range(len(df_requests)):
    # Для обобщенного термина из списка обощенных терминов
    for term in list(set(df_synonyms.word_original)):
        # Создаем список синонимов обобщенных терминов
        syns_group = list(df_synonyms[df_synonyms['word_original']==term]['synonyms'])
        # Для каждого синонима из группы синонимов обощенного термина заменяем термин синонимом. 
        for syno in syns_group:
            if term in df_requests.iloc[req,0]:
                temp_df = pd.DataFrame([[df_requests.iloc[req,0], df_requests.iloc[req,0].replace(term,syno)]],
                                         columns=['Запрос оригинальный',
                                                  'Запрос с синонимами'])
                df_new_reqs = pd.concat([df_new_reqs,temp_df],axis=0,)
                
print(df_new_reqs.reset_index(drop=True))

Результат:

 requests_original
0   word1 word2 word3
1  word4 word5, word6 


   word_original    synonyms
0          word1  synonym1_1
1          word1  syninym1_2
2          word1  syninym1_3
3          word2  syninym2_1
4          word2  syninym2_2
5          word2  syninym2_3
6          word2  syninym2_4
7          word3  syninym3_1
8          word3  syninym3_2
9          word4  syninym4_1
10         word4  syninym4_2
11         word4  syninym4_3
12         word4  syninym4_4
13         word5  syninym5_1
14         word5  syninym5_2
15         word5  syninym5_3
16         word6  syninym6_1
17         word6  syninym6_2 



   Запрос оригинальный      Запрос с синонимами
0    word1 word2 word3   word1 syninym2_1 word3
1    word1 word2 word3   word1 syninym2_2 word3
2    word1 word2 word3   word1 syninym2_3 word3
3    word1 word2 word3   word1 syninym2_4 word3
4    word1 word2 word3   synonym1_1 word2 word3
5    word1 word2 word3   syninym1_2 word2 word3
6    word1 word2 word3   syninym1_3 word2 word3
7    word1 word2 word3   word1 word2 syninym3_1
8    word1 word2 word3   word1 word2 syninym3_2
9   word4 word5, word6  word4 word5, syninym6_1
10  word4 word5, word6  word4 word5, syninym6_2
11  word4 word5, word6  word4 syninym5_1, word6
12  word4 word5, word6  word4 syninym5_2, word6
13  word4 word5, word6  word4 syninym5_3, word6
14  word4 word5, word6  syninym4_1 word5, word6
15  word4 word5, word6  syninym4_2 word5, word6
16  word4 word5, word6  syninym4_3 word5, word6
17  word4 word5, word6  syninym4_4 word5, word6

Ответы (0 шт):