TF-IDF from Scratch

MediumAlgo
10:00
Лучше работает на десктопе
DSNLPTF-IDF

Реализуйте вычисление TF-IDF (Term Frequency — Inverse Document Frequency) матрицы с нуля.

Формулы

- TF(t, d) = (количество вхождений терма t в документ d) / (общее количество слов в документе d)
- IDF(t) = log(N / df(t)), где N — количество документов, df(t) — количество документов, содержащих терм t
- TF-IDF(t, d) = TF(t, d) × IDF(t)

Используйте натуральный логарифм (ln).

Верните кортеж: (список термов отсортированных лексикографически, матрица TF-IDF округлённая до 4 знаков).

Сигнатура

def tfidf(documents: list[list[str]]) -> tuple[list[str], list[list[float]]]:

Примеры

tfidf([["the","cat","sat"], ["the","dog","sat"]])
→ (["cat","dog","sat","the"], [[0.231,0.0,0.0,0.0],[0.0,0.231,0.0,0.0]])

Constraints

- 1 ≤ N ≤ 100
- 1 ≤ слов в документе ≤ 1000
- Слова — строчные латинские буквы

Примеры

Пример 1

Вход:
documents = [["the","cat","sat"],["the","dog","sat"]]
Выход:[["cat","dog","sat","the"],[[0.231,0,0,0],[0,0.231,0,0]]]

Пример 2

Вход:
documents = [["hello","world"]]
Выход:[["hello","world"],[[0,0]]]

Пример 3

Вход:
documents = [["a","b","c"],["a","b"],["a"]]
Выход:[["a","b","c"],[[0,0.1352,0.3662],[0,0.2027,0],[0,0,0]]]
Консоль
Нажмите Run или Ctrl+Enter для запуска