Фильтр Python: возврат кортежа из списка строк с целевыми строками - PullRequest
0 голосов
/ 09 мая 2018

У меня есть длинный список из 1,5 млн предложений и такой же длинный список слов, которые я ищу в списке предложений. Например:

list_of_words = ['Turin', 'Milan']
list_of_sents = ['This is a sent about turin.', 'This is a sent about manufacturing.']

У меня есть следующая функция, которая позволяет быстро отождествлять эти предложения с ключевыми словами, и вычислительное время довольно важно, поэтому я хотел бы избежать циклов, если это возможно:

def find_keyword_comments(test_comments,test_keywords):
    keywords = '|'.join(test_keywords)
    word = re.compile(r"^.*\b({})\b.*$".format(keywords), re.I)
    newlist = filter(word.match, test_comments)
    final = list(newlist)
    return final

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

final = ['This is a sent about turin.']

и я бы хотел вернуть

final = [('Turin', 'This is a sent about turin.')]

Есть ли синтаксическая функциональность, которую я неправильно использую или забываю?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Это один из способов:

import re

list_of_words = ['Turin', 'Milan']
list_of_sents = ['This is a sent about turin.', 'This is a sent about manufacturing.']

print([[x, y] for x in list_of_words for y in list_of_sents if re.search(r'\b{}\b'.format(x.lower()), y.lower())])
# [['Turin', 'This is a sent about turin.']]
0 голосов
/ 09 мая 2018

Вы можете взять каждое ключевое слово и найти все комментарии, содержащие слово:

import re
def find_keyword_comments(test_comments,test_keywords):
   return [(word, [c for c in test_comments if re.findall(r'\b{}\b'.format(word), c, flags=re.I)]) for word in test_keywords]

list_of_words = ['Turin', 'Milan']
list_of_sents = ['This is a sent about turin.', 'This is a sent about manufacturing.']
print(find_keyword_comments(list_of_sents, list_of_words))

Выход:

[('Turin', ['This is a sent about turin.']), ('Milan', [])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...