Я бы начал с создания списка кортежей, где первый элемент - это категория, а второй - словарь со списком ключевых слов, которые следует включить / исключить из описания.Например,
keyword_tuple = [('AAAA', {'in': ['kwrd1'], 'out':[]}),
('AAAA', {'in': ['kwrd2', 'kwrd3'], 'out': []),
('AAAA', {'in': ['kwrd3'], 'out': ['kwrd4']}),
('BBBB', {'in': ['kwrd4'], 'out': [])]
После правильной инициализации keyword_tuple
вы можете просмотреть список описаний, чтобы определить, к какой категории они относятся.Давайте сохраним результаты в списке кортежей с именем result_tuple
, где первый элемент - это описание, а второй - соответствующая категория.
result_tuple = []
for description in description_list:
# Find categories that satisfy the include condition
categories_in = [cat[0] for cat in keyword_tuple if all([kw in description for kw in cat[1]['in']])]
# Find categories that satisfy the exclude condition
categories_out = [cat[0] for cat in keyword_tuple if all([kw not in description for kw in cat[1]['out']])]
# Find the categories that satisfy both
# If there are multiple categories satisfying the condition, you need to come with a decision rule
categories = list(set(categories_in).intersection(categories_out))
# Append to the result list (Takes the first that is satisfied)
if len(categories) > 0:
category = categories[0]
else:
category = 'NO CATEGORY'
result_tuple.append(description, category)