Как рассчитать меру сходства текстового документа? - PullRequest
0 голосов
/ 08 июня 2019

У меня есть CSV-файл, который выглядит следующим образом:

idx         messages
112  I have a car and it is blue
114  I have a bike and it is red
115  I don't have any car
117  I don't have any bike

Я хотел бы иметь код, который читает файл и выполняет различие подобия.

Я просмотрел много сообщений по этому поводу, таких как 1 2 3 4 , но мне трудно понять или не совсем то, что я хочу.

на основе некоторых постов и веб-страниц, в которых говорится, что "простым и эффективным является сходство по косинусу" или "Универсальный кодировщик предложений" или "Расстояние Левенштейна".

Было бы замечательно, если бы вы могли предоставить свою помощь с кодом, который я могу запустить и на моей стороне. Спасибо

1 Ответ

1 голос
/ 09 июня 2019

Я не знаю, что подобные вычисления можно особенно хорошо векторизовать, поэтому циклы просты. По крайней мере, используйте тот факт, что ваши расчеты симметричны, а диагональ всегда равна 100, чтобы сократить количество вычислений, которые вы выполняете.

import pandas as pd
import numpy as np
from fuzzywuzzy import fuzz

K = len(df)
similarity = np.empty((K,K), dtype=float)

for i, ac in enumerate(df['messages']):
    for j, bc in enumerate(df['messages']):
        if i > j:
            continue
        if i == j:
            sim = 100
        else:
            sim = fuzz.ratio(ac, bc) # Use whatever metric you want here
                                     # for comparison of 2 strings.

        similarity[i, j] = sim
        similarity[j, i] = sim

df_sim = pd.DataFrame(similarity, index=df.idx, columns=df.idx)

Выход: df_sim

id     112    114    115    117
id                             
112  100.0   78.0   51.0   50.0
114   78.0  100.0   47.0   54.0
115   51.0   47.0  100.0   83.0
117   50.0   54.0   83.0  100.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...