Поиск списка слов в списке предложений и возврат совпадающих предложений - PullRequest
0 голосов
/ 08 мая 2020

Из Списка предложений и Списка слов, как вернуть список предложений, только если все три слова совпадают из Списков слов (Триграмм).

Пожалуйста, предложите. Ниже приведены примеры списков.

listwords = [['people','suffering','acute'], ['Covid-19','Corona','like'], ['people','must','collectively']]

listsent = ['The number of people suffering acute hunger could almost double.',
            'Lockdowns and global economic recession have',
            'one more shock – like Covid-19 – to push them over the edge',
            'people must collectively act now to mitigate the impact']

Выходной список должен быть первым и последним предложениями, так как они содержат три совпадающих слова в словах списка.

Ожидаемый результат:

['The number of people suffering acute hunger could almost double.',
 'people must collectively act now to mitigate the impact']

1 Ответ

0 голосов
/ 08 мая 2020

Добро пожаловать в Stack Overflow

Попробуйте это решение:

listwords = [['people','suffering','acute'], ['Covid-19','Corona','like'], ['people','must','collectively']]

listsent = ['The number of people suffering acute hunger could almost double.',
            'Lockdowns and global economic recession have',
            'one more shock – like Covid-19 – to push them over the edge',
            'people must collectively act now to mitigate the impact']

# interate through each sentence
for sentence in listsent:
    # iterate through each group of words
    for words in listwords:
        # check to see if each word group is in the current sentence
        if all(word in sentence for word in words):
            print(sentence)

Я прокомментировал строки, чтобы дать вам представление о том, что происходит

Первая часть код выполняет итерацию по каждому предложению в вашем списке

for sentence in listsent:

Затем нам нужно перебирать группы слов, которые есть в вашем списке слов

for words in listwords

Вот где начинается самое интересное. Поскольку у вас есть вложенные списки, нам необходимо убедиться, что в предложении присутствуют все три слова

if all(word in sentence for word in words):

Наконец, вы можете распечатать каждое предложение, которое содержит все слова

print(sentence)

вы также можете поместить это в функцию и вернуть найденные предложения в виде нового списка

listwords = [['people','suffering','acute'], ['Covid-19','Corona','like'], ['people','must','collectively']]

listsent = ['The number of people suffering acute hunger could almost double.',
            'Lockdowns and global economic recession have',
            'one more shock – like Covid-19 – to push them over the edge',
            'people must collectively act now to mitigate the impact']


def check_words(listwords, listsent):
    listsent_new = []
    # interate through each sentence
    for sentence in listsent:
        # iterate through each group of words
        for words in listwords:
            # check to see if each word group is in the current sentence
            if all(word in sentence for word in words):
                listsent_new.append(sentence)
    return listsent_new


if __name__ == '__main__':
    print(check_words(listwords, listsent))
...