Python и алгоритм tfidf, сделать его быстрее?

Я реализую алгоритм tf-idf в веб-приложении с использованием Python, однако он работает очень медленно. В основном я делаю следующее:

1) Создаю 2 словаря:

  • Первый словарь: ключ (идентификатор документа), значение (список всех найденных слов (включая повторяющиеся) в документе)
  • Второй словарь; ключ (идентификатор документа), значение (набор, содержащий уникальные слова документа)

Теперь существует петиция пользователя, чтобы получить результаты tfidf документа d. Что я делаю:

2) Перебираю уникальные слова второго словаря для документа d, и для каждого уникального слова w получаю:

2.1) tf score (сколько раз w появляется в d: цикл список слов первого словаря для документа)

2.2) df score (сколько документов содержат w: цикл по множеству слов всех документов (второй словарь) и проверка, содержится ли w). Я использую набор, поскольку кажется, что он быстрее проверяет, содержит ли набор слово, по сравнению со списком.

Шаг 2.2 выполняется ужасно медленно. Например, имея 1000 документов и документ с 2313 уникальными словами, вывод результатов занимает около 5 минут.

Есть ли другой способ ускорить шаг 2.2? Неужели словари так медленно повторяются?

5
задан NullUserException 27 August 2011 в 16:38
поделиться