【发布时间】:2018-08-24 18:31:30
【问题描述】:
我有一个配对列表:
List_Pairs = [
["Eat at Joe's", "Eat my shorts"],
["Eat well", "Eat mama's pies"],
...]
我有一个函数可以计算一对句子之间的相似度并返回是否超过阈值比率:
def Jaccard_Sim(pair):
"""return Jaccard Similarity Index for similarity between two sentences"""
ratio = len(set(pair[0][1]).intersection(pair[1])/
float(len(set(pair[0]).union(pair[0][1]))))
return (ratio > 0.66)
我为我的每一对都叫它:
sim_list = (Jaccard_Sim(pair) for pair in combo_pairs)
...并尝试打印它:
print(list(sim_list))
但我收到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-50-b9508b63e83f> in <module>()
----> 1 list(sim_list)
<ipython-input-49-8ee7726dd300> in <genexpr>(.0)
----> 1 sim_list = (Jaccard_Sim(pair) for pair in combo_pairs)
<ipython-input-47-f211879c6e96> in Jaccard_Sim(pair)
12 def Jaccard_Sim(pair):
13 """return Jaccard Similarity Index for similarity between two sentences"""
---> 14 ratio = len(set(pair[0]
[1]).intersection(pair[1])/float(len(set(pair[0]).union(pair[0][1]))))
15 return (ratio > 0.66)
16
TypeError: unhashable type: 'list
【问题讨论】:
-
请同时提供
pair示例,如[SO]: How to create a Minimal, Complete, and Verifiable example (mcve) 中所述。 -
pair[0]可能是一个列表。你不能做例如set([[1,2]])因为列表不可变,因此不可散列 -
@CristiFati 请列出示例,它是对的列表。否则,请澄清。
-
您应该自下而上构建此逻辑:确保在将 Jacquard 相似度放入函数之前正确计算它。目前,您正在尝试在一组单个字符和一个字符串之间执行交集/联合。
-
另请注意,您的配对列表不合法。
标签: python list function list-comprehension