Поиск повторяющихся слов в словарных ключах и группировка ключей по ним - PullRequest
0 голосов
/ 13 ноября 2018

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

description = "cat food tuna fish 200 gram"

keywords = {"type of pet": "cat", "taste" : "tuna fish", "weight" : "200 gram"}

Я хочу использовать ключи из словаря ключевых слов выше в качестве будущих меток для обучения. Моя проблема в том, что после извлечения всех ключевых слов у меня есть много ключей, которые семантически похожи и имеют повторяющиеся слова, что приводит к приблизительно 2000 меткам. Например: «цвет платья», «цвет стула», «основной цвет», «вес», «вес нетто», «тип материала», «тип дерева» и т. Д.

Я хочу уменьшить количество меток, сгруппировав ключи с одним и тем же словом: если в словарном ключе есть «color», сгруппируйте его под «color» и присвойте все значения этих ключей новому / заменить ключ, "цвет".

На данный момент мой словарь выглядит так:

{"type of material": ["wood", "metal", "rayon"....], "type of 
  fabric": ["cotton", "lycra"....]}

Я хочу, чтобы это выглядело так:

{"type": ["wood", "metal", "rayon", "cotton", "lycra"]}

Каков наилучший способ сделать это, и является ли это разумным способом приблизиться к маркировке объектов для LSTM?

1 Ответ

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

Вы можете указать ключевые слова для поиска, затем использовать collections.defaultdict с итерацией:

d = {"type of material": ["wood", "metal", "rayon"],
     "type of fabric": ["cotton", "lycra"],
     "color of chair": ["brown", "black"],
     "color of dress": ["read", "yellow"]}

from collections import defaultdict

dd = defaultdict(list)

keywords = ['type', 'color']

for k, v in d.items():
    for word in keywords:
        if word in k:
            dd[word].extend(v)
            break

Примечание: приоритет отдается первому найденному совпадению ключевых слов, а каждое значение в d связано с максимум одним ключом в результате:

defaultdict(list,
            {'color': ['brown', 'black', 'read', 'yellow'],
             'type': ['wood', 'metal', 'rayon', 'cotton', 'lycra']})

Если вам нужно извлечь все возможные ключевые слова (в данном случае это будет включать of,material и т. Д.), Вы можете сделать это через str.split:

for k, v in d.items():
    for akey in k.split():
        dd[akey].extend(v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...