Как категоризировать список данных по ключевым словам в python? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть список транзакций, включая такие вещи, как

*"AMZN mktp US*MH434G300", 
*"HEALTH CARE WEB PMT",* 
*"ARBYS #4323"** 

et c, и я хочу написать программу, которая будет искать ключевые слова в этих описаниях и назначать категорию на основе этих ключевые слова. Я не нашел ничего подобного в своих поисках inte rnet на удивление, и я полагаю, что это возможно потому, что это сложно сделать.

То, что я сделал до сих пор, выглядит примерно так:

def getCategory(description):
    cat = ''
    if 'AMZN' in description:
       cat = 'shopping'
    elif 'ARBYS' in description:
        cat = 'restaurant'
return cat

Хотя это действительно работает, это чрезвычайно кропотливая , и мне приходится писать отдельный оператор if для каждого ключевого слова. Должен быть способ сделать это лучше. Есть ли библиотека для чего-то вроде этого? Даже просто способ, которым я мог бы добавить кучу ключевых слов в список, а затем использовать список в операторе if, было бы потрясающе.

I m не беспокоится о скорости / эффективности , так как нет безумного количества данных (несколько тысяч записей). Я использую python 3. Я открыт для любого опыта обучения, я пытаюсь узнать больше о таких вещах. Любые предложения очень приветствуются и ценятся. Спасибо!

Ответы [ 3 ]

1 голос
/ 13 июля 2020

Хотя это все еще немного утомительно, но менее утомительно, чем ваше решение. Я бы использовал словарь, чтобы назначить каждое ключевое слово определенной группе c. Я бы написал это так:

def getCategory(description):
    my_dict = {'AMZN': 'shopping', 'ARBYS': 'restaurant'}
    for i in my_dict:
        if i in description:
            return my_dict[i]
    return None #Return none of none of the keywords are in the description
0 голосов
/ 14 июля 2020

Используя связанный ответ, вот несколько примеров кода, которые могут быть полезны: { ссылка } (ссылка).

Прежде чем погрузиться в код, я настоятельно рекомендую посмотреть re (что означает регулярные выражения) - мощная библиотека в Python, которую вы можете использовать для поиска ключевых слов, замены текстовых шаблонов и т. Д. c. Документацию по этой библиотеке можно найти здесь: https://docs.python.org/3/library/re.html.

См. Также фрагмент кода ниже, который основан на коде из связанного сообщения:

import re

matches_list = ['AMZN', 'ARBYS', ... ]  # Keywords list
matches_to_category = {'AMZN': 'shopping', 'ARBYS': 'restuarant', ...}  # keyword --> type dict 

def match(input_string, string_list):
    cat = []  # Initialize
    words = re.findall(r'\w+', input_string)
    keywords = set([word for word in words if word in string_list])
    for keyword in keywords:  # Iterate over words found for a line
        cat.append(matches_to_category[keyword])  # Add category to keyword
    return cat

>>> sentence = "AMZN is great for shopping; ARBYS has the meats!"
>>> match(sentence, matches_list)
['shopping', 'restuarant']
0 голосов
/ 13 июля 2020

Мне нужно написать отдельный оператор if для каждого ключевого слова. Должен быть лучший способ сделать это.

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

categories_dict = {"AMZN": "shopping", "ARBYS": "restaurant"}

def get_category(description):
  for key in categories_dict:
    if key in description:
      return categories_dict.get(key)
  return None
...