如何计算文本文件的相似度?

时间:2019-06-08 20:12:58

标签: python pandas csv dataframe nlp

我有一个看起来像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,但我很难理解还是不完全想要。

根据一些帖子和网页上的说法,即“简单有效的是余弦相似度”或“通用句子编码器”或“ Levenshtein距离”。

如果您能提供我也可以在我身边运行的代码的帮助,那将是非常不错的。谢谢

1 个答案:

答案 0 :(得分:1)

我不知道这样的计算是否可以很好地向量化,所以循环很简单。至少要利用您的计算是对称且对角线始终为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