Нормализованное сравнение количества слов
Есть ли стандартные расчеты для сравнения двух неупорядоченных строк слов.
Я хотел бы что-то нормализовать, хотя я полагаю, что смысл брать серию сравнений, которые я мог бы просто нормализовать с самым высоким баллом, хотя для моих конкретных предложений это было бы неэффективно.
Примеры:
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 строк. я бы, наверное, начал с Лодаша и посмотрел, куда он меня приведет.