Нормализованное сравнение количества слов

Есть ли стандартные расчеты для сравнения двух неупорядоченных строк слов.

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

Примеры:

c1 = magicFunc("big truck red", "big red truck")
c2 = magicFunc("big red truck", "big red truck")
c3 = magicFunc("big red red truck", "big red truck")
c4 = magicFunc("big blue truck", "big red truck")

c1, c2 и c3 имеют более высокий "балл", чем c4. Я несколько равнодушен к c2 против c3 (но, вероятно, c3 должен быть выше), а c1 должен равняться c2, поскольку порядок не имеет значения.

2 ответа

Возьмите удар с этим:

from collections import Counter

def magicFunc(str1, str2):
    bag1, bag2 = Counter(str1.split()), Counter(str2.split())
    overlap = bag1 & bag2
    return sum(overlap.values())

На входах, которые вы даете, баллы 3, 3, 3 и 2.

Вы должны проверить _.uniq

Вы можете использовать эту функцию, а затем написать свой magicFunc сравнить 2 строки, преобразовав их в массивы и передав их через _.uniq,

Вы также можете реализовать свой собственный, просто .map или .reduction .split up строк. я бы, наверное, начал с Лодаша и посмотрел, куда он меня приведет.

Другие вопросы по тегам