Я реализую алгоритм tf-idf в веб-приложении с использованием Python, однако он работает очень медленно. Что я в основном делаю:
1) Создайте 2 словаря:
- Первый словарь: ключ (id документа), значение (список всех найденных слов (в т.ч. повторяющихся) в документе)
- Второй словарь; ключ (идентификатор документа), значение (набор, содержащий уникальные слова документа)
Теперь есть ходатайство пользователя о получении результатов tfidf документа d. Что я делаю:
2) Перебираем уникальные слова второго словаря для документа d и для каждого уникального слова w получаем:
2.1) оценка tf (сколько раз w встречается в d: цикл по списку слов первого словаря для документа)
2.2) оценка df (сколько документов содержат w: перебираем набор слов всех документов (второй словарь) и проверяем, содержится ли w). Я использую набор, так как он быстрее проверяет, содержит ли набор слово по сравнению со списком.
Шаг 2.2 ужасно медленный. Например, при наличии 1000 документов и документа с 2313 уникальными словами вывод результатов занимает около 5 минут.
Есть ли другой способ ускорить шаг 2.2? Словари настолько медленны для итерации?