Найти лучшие репрезентативные подстроки из множества строк - PullRequest
0 голосов
/ 07 марта 2020

Допустим, у нас есть строки в группе 1:

list, list of discount offers, specific discount offers, discount offer, discount offer details

и, например, другой набор строк в группе 2:

Add to basket button, basket button, Add

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

Например, в группе 1 я бы сказал, что представители list of discount offers, specific discount offers, discount offer details. В группе 2 это должно быть Add to basket button, поскольку оно содержит обе строки, хотя add и basket button встречаются в общей сложности два раза каждая.

Есть ли какая-то функция в python, которая подходит для такой вещи лучше всего? Я не смог найти ничего разумного.

1 Ответ

0 голосов
/ 07 марта 2020

Класс Counter из коллекций должен быть полезен для такого рода работ. Предполагая, что вы не ищете количество nGrams для выбора, вы можете создать словарь из числа выражений, содержащих каждое слово. Затем сложите эти числа для слов в каждом выражении, чтобы придать ему относительный вес (предпочтительно не считая самого выражения в весе). Выражение (я) с наибольшим весом должно быть представителем (ями).

from collections import Counter

def represent(group):
    groupWords = [ expr.split(" ") for expr in group ]
    wordFreq   = Counter(word for words in groupWords for word in words)
    weights    = [ sum(wordFreq[word] for word in words)-len(words) for words in groupWords ]
    maxWeight  = max(weights)
    return [ (expr,weight) for expr,weight in zip(group,weights) if weight == maxWeight]

output: (выражения и веса)

group1 = ["list", "list of discount offers", "specific discount offers",
          "discount offer", "discount offer details"]

print(represent(group1))
# [('list of discount offers', 5)]


group2 = ["Add to basket button", "basket button", "Add"]

print(represent(group2))
# [('Add to basket button', 3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...