У меня есть список, содержащий строки, содержащие описания из тела текста, который выглядит следующим образом:Фильтрация списка строк со списком ключевых слов с помощью петли
stringlist = ['I have a dog and cat and the dog is seven years old', 'that dog is old']
и мне нужно фильтровать эти строки в виде списка ключевые слова, которые находятся в другом списке:
keywords = ['dog', 'cat', 'old']
и присоединяя каждое ключевое слово в строку в зависимости от того, сколько раз он находится в строке.
filteredlist = [['dog', 'dog', 'cat', 'old'], ['dog', 'old']]
Я расщепление строки в stringslist и используя список понимание, чтобы проверить, если ключевое слово находится в списке, но не выводит правильно, когда я пробегаем по ключевым словам.
Код работает, когда я использую одну конкретную строку для поиска следующим образом:
filteritem = 'dog'
filteredlist = []
for string in stringlist:
string = string.split()
res = [x for x in string if filteritem in x]
filteredlist.append(res)
Полученный filteredlist выглядит следующим образом:
filteredlist = [['dog', 'dog'], ['dog']]
который присоединяет ключевое слово для каждого экземпляра, что ключевое слово находится в последовательности строк.
Когда я пытаюсь перебирать список ключевых слов, как показано ниже, цикл for теряет структуру.
filteredlist = []
for string in stringlist:
string = string.split()
for keyword in keywords:
res = [x for x in string if keyword in x]
filteredlist.append(res)
Вот результат:
filteredlist = [['dog', 'dog'], ['cat'], ['old'], [], ['dog'], [], ['old'], []]
Я думаю, что я приближаюсь к этой проблеме совершенно неправильно, так любой другой метод или решение было бы полезно.
Я не совсем ясно, что ваш вопрос. Является ли 'filter_list' выше того, что вы хотите, чтобы результат выглядел? –
отфильтрованный список вверху - это выход, который я хочу, чтобы он выглядел. – genghistong