Попробуйте строить обратный индекс, а затем вы можете выбрать в зависимости от того ключевых слов вы хотите. Такой подход игнорирует порядок слов:
index = {}
for sentence in sentence_list:
for word in set(sentence.split()):
index.setdefault(word, set()).add(sentence)
Или этот подход, клавиши со индексной всеми возможными полными словами фразы префиксами:
index = {}
for sentence in sentence_list:
number_of_words = length(sentence.split())
for i in xrange(1, number_of_words):
key_phrase = sentence.rsplit(maxsplit=i)[0]
index.setdefault(key_phrase, set()).add(sentence)
И затем, если вы хотите, чтобы найти все предложения, которые содержат ключевое слово (или начать с фразой, если это ваш индекс):
match_sentences = index[key_term]
или данный набор ключевых слов:
matching_sentences = reduce(list_of_keywords[1:], lambda x, y: x & index[y], initializer = index[list_of_keywords[0]])
Теперь вы можете сгенерировать список, сгруппированный практически любой комбинацией терминов или фраз путем построения понимания списка с использованием этих индексов для генерации предложений. Например, если вы построили индекс фразы префикс и хотите все сгруппированные по первой два слова фразу:
return [list(index[k]) for k in index if len(k.split()) == 2]
Что вы уже пробовали? Некоторые стартовый код, чтобы другие знали, что вы уже делали, и где вы застряли, полезно при разработке ответов. – TheF1rstPancake
['itertools groupby'] (https://docs.python.org/2/library/itertools.html#itertools.groupby) будет полезен для этого. – RoadRunner
Как вы определяете частичное совпадение? – wwii