Как мне сопоставить список предложений со списком ключевых слов - PullRequest
0 голосов
/ 11 ноября 2018

a Я хочу создать новый список, который соответствует списку предложений и списку ключевых слов.

list = ['This sentence contains disclosure.', 'This sentence contains none declared.', 'This sentence contains competing interest.', 'This sentence contains authors declare.']
keywords = ['disclosure ', 'none declared', 'interest']

Новый список должен напечатать должен выйти как это

matched_list = ['This sentence contains disclosure.', 'This sentence contains none declared.']

Я пытался использовать

r = re.compile('.*disclosure')
newlist = list(filter(r.match, list))

Однако у меня очень большой список ключевых слов, и будет невозможно набрать все это в r = re.compile('.*keywords'). Есть ли другой способ сопоставить список предложений со списком ключевых слов.

1 Ответ

0 голосов
/ 11 ноября 2018

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

matched_list = [
    string for string in lst if any(
        keyword in string for keyword in keywords)]

Что на самом деле просто лаконичный способ сказать:

matched_list = []
for string in lst:
    if any(keyword in string for keyword in keywords):
        matched_list.append(string)

any произойдет короткое замыкание, возвращая True для первого подходящего ключевого слова (или возвращает False, если совпадение не найдено).


Если вы хотите использовать регулярные выражения, вы можете предварительно скомпилировать шаблон и затем вызвать pattern.search внутри цикла, как обычно:

import re
p = re.compile('|'.join(map(re.escape, keywords)))
matched_list = [string for string in lst if p.search(string)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...