Возможно, подход может заключаться в том, чтобы иметь список потенциальных совпадений для каждой из записей, и для каждой записи повторять этот список и отбрасывать ключевые слова в случае совпадения.
В качестве примерадля отдельной записи:
text = 'Month of birth January 1900'
keys = ['Month of birth', 'Date of birth' 'Birth']
При поиске совпадений можно выбрать самую короткую строку из списка, что означает, что найдено больше слов:
min([text.strip(x) for x in keys])
'January 1900'
Вы просто следуете этому подходу для разных полей и строите фрейм данных из результирующих строк.Вы также можете рассмотреть возможность создания строк перед поиском по ключевым словам.Надеюсь, это поможет.