Самое информативное слово запроса

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

Условие

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

Для слова w определяется обратная частота документа, IDF:

IDF(w) = ln(n / df(w)),

где n — число посылок, а df(w) — число посылок, в описании которых слово w встретилось хотя бы один раз. Повторы слова внутри одного описания увеличивают его частоту, но не увеличивают df(w).

После описаний задан запрос из нескольких различных слов. Требуется вывести слово из запроса с наибольшим значением IDF. Все слова запроса встречаются хотя бы в одном описании посылки. Если наибольшее значение IDF достигается у нескольких слов, выводится лексикографически меньшее слово. Округление не применяется, так как выводится слово.

Формат ввода

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

В следующих n строках находятся описание одной посылки: идентификатор посылки parcel_id, целое число m, затем m слов описания через пробел.

В последней строке находится запрос: целое число q, затем q различных слов запроса через пробел.

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

Выведите одно слово из запроса с наибольшим значением IDF.

Ограничения

1 ≤ n ≤ 2000.

Длина идентификатора parcel_id составляет от 1 до 20 символов и содержит только латинские буквы, цифры, символы _ и -.

0 ≤ m ≤ 20.

Каждое слово описания и запроса состоит из строчных латинских букв и имеет длину от 1 до 20 символов.

1 ≤ q ≤ 20.

Слова в запросе различны. Каждое слово запроса встречается хотя бы в одном описании. Описание посылки может быть пустым при m = 0.

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

Куда дальше