TF-IDF слова в записи бегуна

тема: Текст: мешок слов и TF-IDF · уровень: средний

Условие

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

Используется метрика TF-IDF. Для слова w и документа d определяются величины:

TF(w, d) = число вхождений w в d / число слов в d.

DF(w) = число документов, содержащих w хотя бы один раз.

IDF(w) = ln(n / DF(w)), где n — число записей дневника, а ln — натуральный логарифм.

Искомое значение равно TF-IDF(w, d) = TF(w, d) * IDF(w). Все слова во входных данных записаны строчными русскими буквами и разделены одним пробелом. Указанное слово гарантированно встречается хотя бы один раз в выбранной записи, поэтому DF(w) не равно нулю. Если число вхождений слова в записи совпадает с числом вхождений другого слова, это не влияет на вычисление: учитываются только вхождения заданного слова, выбор между словами не производится.

Формат ввода

В первой строке даны два целых числа n и k — число записей дневника и номер выбранной записи.

Во второй строке дано одно слово w, для которого вычисляется TF-IDF.

В следующих n строках даны записи дневника. Записи нумеруются от 1 до n в порядке ввода. Каждая запись содержит слова, разделённые одним пробелом.

Формат вывода

Выведите значение TF-IDF слова w в записи номер k с четырьмя знаками после десятичной точки.

Округлите значение до ближайшего числа с четырьмя знаками после десятичной точки. Если отбрасываемая часть ровно посередине, округлите от нуля.

Ограничения

1 ≤ n ≤ 2000.

1 ≤ k ≤ n.

Длина слова w составляет от 1 до 20 символов.

Каждая запись содержит от 1 до 100 слов.

Длина каждого слова в записи составляет от 1 до 20 символов.

Все слова состоят только из строчных русских букв.

Слово w встречается в записи номер k хотя бы один раз.

Решить задачу с автопроверкой на Python →

Куда дальше