Поскольку вы хотите сопоставить только слова целиком, я думаю, что первый шаг - превратить все в списки слов, а затем перебирать от самой длинной фразы к самой короткой, чтобы найти элементы, которые нужно удалить:
>>> removed = ['range', 'drinks', 'food and drinks', 'summer drinks']
>>> sentence = 'Oranges are the main ingredient for a wide range of food and drinks'
>>> words = sentence.split()
>>> for ngram in sorted([r.split() for r in removed], key=len, reverse=True):
... for i in range(len(words) - len(ngram)+1):
... if words[i:i+len(ngram)] == ngram:
... words = words[:i] + words[i+len(ngram):]
... break
...
>>> " ".join(words)
'Oranges are the main ingredient for a wide of'
Обратите внимание, что есть несколько fl aws с этим простым подходом - несколько копий одной и той же n-граммы не будут удалены, но вы не можете продолжить с этим l oop после изменения words
либо ( длина будет другой), поэтому, если вы хотите обрабатывать дубликаты, вам нужно будет пакетировать обновления.