У меня есть модель, которая предсказывает 10 слов для определенного курса в порядке вероятности, и я хотел бы, чтобы первые 5 слов из тех слов, которые появились в описании курса .
Это формат данных:
course_name course_title course_description predicted_word_10 predicted_word_9 predicted_word_8 predicted_word_7 predicted_word_6 predicted_word_5 predicted_word_4 predicted_word_3 predicted_word_2 predicted_word_1
Xmath 32 Precalculus Polynomial and rational functions, exponential... directed scholars approach build african different visual cultures placed global
Xphilos 2 Morality Introduction to ethical and political philosop... make presentation weekly european ways general range questions liberal speakers
Моя идея состоит в том, чтобы каждая строка начинала итерацию с predicted_word_1
до тех пор, пока я не получу первые 5 в описании. Я хотел бы сохранить эти слова в порядке их появления в дополнительных столбцах description_word_1
... description_word_5
. (Если в описании <5 предсказанных слов, я планирую вернуть NAN в соответствующих столбцах). </p>
Чтобы пояснить на примере: если course_description
курса - 'Polynomial and rational functions, exponential and logarithmic functions, trigonometry and trigonometric functions. Complex numbers, fundamental theorem of algebra, mathematical induction, binomial theorem, series, and sequences. '
и его первые несколько предсказанных слов - irrelevantword1, induction, exponential, logarithmic, irrelevantword2, polynomial, algebra...
Я бы хотел вернуть induction, exponential, logarithmic, polynomial, algebra
для этого в таком порядке и сделать то же самое для остальных курсов.
Моя попытка состояла в том, чтобы определить функцию применения, которая будет брать строку и повторяться от первого предсказанного слова до тех пор, пока не найдет первые 5 в описании, но часть, которую я не могу понять, - это как их создать дополнительные столбцы, в которых есть правильные слова для каждого курса. Этот код в настоящее время будет хранить слова только для одного курса для всех строк.
def find_top_description_words(row):
print(row['course_title'])
description_words_index=1
for i in range(num_words_per_course):
description = row.loc['course_description']
word_i = row.loc['predicted_word_' + str(i+1)]
if (word_i in description) & (description_words_index <=5) :
print(description_words_index)
row['description_word_' + str(description_words_index)] = word_i
description_words_index += 1
df.apply(find_top_description_words,axis=1)
Конечная цель этой манипуляции с данными состоит в том, чтобы сохранить первые 10 предсказанных слов из модели и первые 5 предсказанных слов в описании, чтобы кадр данных выглядел следующим образом:
course_name course_title course_description top_description_word_1 ... top_description_word_5 predicted_word_1 ... predicted_word_10
Любые указатели приветствуются. Спасибо!