Можно сначала разбить предложение на токены, затем отбросить окончания всех искомых слов и токенов предложения посредством стемминга, и в конечном счёте пересечь полученные множества слов. Для этого можно применить
NLTK:
from nltk.tokenize import word_tokenize
from nltk.stem import SnowballStemmer
# Список искомых слов
word_list = ['шалаши', 'инжир']
# Предложение для поиска
sentence = 'В шалаше шуршит шелками желтый дервиш из Алжира и, жонглируя ножами, штуку кушает инжира.'
# Разделить предложение на отдельные слова — токены
tokens = word_tokenize(sentence, language='russian')
snowball = SnowballStemmer(language='russian')
# Отбросить окончания слов предложения и слов из списка, после чего пересечь множества
stems_found = set(map(snowball.stem, tokens)) & set(map(snowball.stem, word_list))
print(stems_found)
Результат выполнения:
{'инжир', 'шалаш'}
Если вам будет недостаточно стемминга, то примените лемматизацию. Лемматизация для русского языка есть в
pymorhpy2.