python - 未计算列表之间的余弦相似度

标签 python apply cosine-similarity

我目前正在尝试计算列表之间的相似性,并在数据框中创建一个新列来显示结果。但是,当我尝试执行此操作时,它会为我的数据的所有条目返回 0(如下所示)


        list1                   list2                   similarity
[action, adventure,...]   [[zoe_saldana, action,...],..]    [0.0, 0.0,...]
         ...                     ...                       ...

这是我正在使用的代码:

def counter_cosine_similarity(c1, c2):
    terms = set(c1).union(c2)
    dotprod = sum(c1.get(k, 0) * c2.get(k, 0) for k in terms)
    magA = math.sqrt(sum(c1.get(k, 0)**2 for k in terms))
    magB = math.sqrt(sum(c2.get(k, 0)**2 for k in terms))
    try:
        return dotprod / (magA * magB)
    except ZeroDivisionError:
        pass


#SIMILARITY#
def get_similarity (row):
        similarities = []
        for idx, list_of_lists in enumerate(row['list1']):
                for l1 in list_of_lists:
                        counter_list1=Counter(l1)
                        counter_list2 = Counter(row['list2'])
                        similarities.append(counter_cosine_similarity(counter_list1,counter_list2))

        return similarities

frame['similarity']=frame.apply(lambda row: get_similarity(row), axis=1)

我一直试图了解发生了什么,但还没有得出结论。特别是因为当我按照下面的方式执行此操作时,相似性列表会返回正确的值:

similarity=[]
for idx, list_of_lists in enumerate(frame['list1']):
        for l1 in list_of_lists:
                counter1=Counter(l1)
                for idx1 , l2 in enumerate(frame['list2']):
                        counter2=Counter(l2)
                        if idx==idx1:
                        similarity.append(counter_cosine_similarity(counter1,counter2))


如果有人可以提供帮助,我将非常感激!

最佳答案

既然您只需将它们附加到列表中就可以正确地获得相似性,那么您是否有理由不能这样做:

frame['similarity'] = similarity

关于python - 未计算列表之间的余弦相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452466/

相关文章:

python - 如何自定义 Flask 的启动消息?

r - apply() 查找 2 个向量中最接近的值

python - Pandas 专栏: applying a function

如果任何值为非正数,则将行替换为 NA

algorithm - 如何优化发现相似性?

python - WxPython - 清除事件队列和未决任务

python - 如何使用 Python DLL 执行 Python 脚本?

python - 如何从python numpy中的矩阵中获取 float

python - 使用 tf-idf 的文档之间的余弦相似度和 TS-SS 相似度 - Python

algorithm - 在一组向量中寻找最佳余弦相似度