Более быстрый способ расчета показателей сходства Жаккара для больших наборов данныхPython

Программы на Python
Ответить
Anonymous
 Более быстрый способ расчета показателей сходства Жаккара для больших наборов данных

Сообщение Anonymous »

Я пытаюсь сопоставить два разных набора данных, которые довольно велики. (У одного из них около 1 миллиона названий компаний, а у другого около 30 тысяч).
Я хочу рассчитать показатель сходства на основе сходства Жаккара на n-граммах.
Вот что я реализовал на данный момент: это очень наивный подход, который просто просматривает каждую строку набора данных, вычисляя оценки сходства один за другим.

Код: Выделить всё

# Initial match with Jaccard similarity > 0.5
matches = []
for idx_a, row_a in data_b.iterrows():
for idx_b, row_b in df_new.iterrows():
ngrams_a = ngrams(row_a['name_std'], n=5)
ngrams_b = ngrams(row_b['name_std'], n=5)
score = jaccard_similarity(ngrams_a, ngrams_b)
matches.append({
'permno_adj': row_a['permno_adj'],
'firm_name': row_b['name_std'],
'rec_name': row_a['name_std'],
'rec_id': row_b['rec_id'],
'similarity_score': score
})
matches_df = pd.DataFrame(matches)
matches_df.sort_values(by=['firm_name', 'similarity_score'], ascending=False, inplace=True)
Я просто запускаю цикл с выбора строки из набора данных 1, затем вычисляю показатель сходства между этой строкой и остальными строками в наборе данных 2 и сохраняю результаты.По понятным причинам этот процесс занимает слишком много времени. Судя по текущей скорости, я ожидаю, что это продлится неделю или две. Я ищу, есть ли возможность это исправить.
Я ищу любые подсказки/отзывы. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-datasets
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»