Код: Выделить всё
def calc_idf(data, terms):
# data is a list of lists filled with tokenized data
# terms is a list of the tokens to calculate IDF values
num_docs = len(data)
idf_values = []
for term in tqdm(terms, desc="IDF", position=0, leave=True):
idf_val = 0
for doc in data:
if term in doc:
idf_val += 1
idf_values.append(math.log2((num_docs+1)/(idf_val+1))) # Using base 2 as original paper did
return idf_values
Может ли кто-нибудь посоветовать, как я могу улучшить скорость расчета IDF?
Изменить: каждый документ в данных действительно представляет собой список, как упоминал Джером в комментариях. Преобразовал документ в набор, и это примерно в 68 раз быстрее! Спасибо!
Редактирование 2. Я только что понял, что преобразование списка в набор не работает, поскольку набор не может содержать повторяющиеся значения. Таким образом, вам необходимо преобразовать в Multiset из пакета multiset.
Подробнее здесь: https://stackoverflow.com/questions/787 ... an-pyspark