我没有意识到Python set函数实际上是将字符串分隔成单个字符的。我为Jaccard编写了python函数并使用python交集方法。我向这个方法传递了两个集合,在将这两个集合传递到jaccard函数之前,我在setring上使用set函数。
示例:假设我有字符串NEW Fujifilm 16MP 5x Optical Zoom Point and Shoot CAMERA 2 7 screen.jpg
,我将调用set(NEW Fujifilm 16MP 5x Optical Zoom Point and Shoot CAMERA 2 7 screen.jpg)
,它将字符串分隔成字符。所以当我把它发送到jaccard函数交集时,实际上看起来是字符交集,而不是词对词交集。我怎样才能做到字字交叉。
#implementing jaccard
def jaccard(a, b):
c = a.intersection(b)
return float(len(c)) / (len(a) + len(b) - len(c))
如果我不对字符串NEW Fujifilm 16MP 5x Optical Zoom Point and Shoot CAMERA 2 7 screen.jpg
调用set
函数,则会出现以下错误:
c = a.intersection(b)
AttributeError: 'str' object has no attribute 'intersection'
我不想进行字符到字符的交集,我想做单词到单词的交集,并得到jaccard的相似度。
尝试先将字符串拆分为单词:
示例:
此属性不是集合的唯一属性:
这里发生的事情是,字符串被视为一个可iterable序列,并被逐个字符处理。
你在set上看到的一样东西:
若要修复此问题,请对现有集使用.add(),因为.add()不使用interable:
或者,使用split()、元组、列表或其他iterable,这样字符串就不会被视为iterable:
根据字符串逐字添加更多元素:
或者,如果在添加到集合时需要理解某些逻辑:
现在它的工作方式是你所期望的:
我的计算Jaccard距离的函数:
相关问题 更多 >
编程相关推荐