bag-similarity

阅读更多
       bag-similarity是相似性的一种,比如有两个bags{a,a,a,b}和{a,a,b,b,c},它们的bag-similarity就是1/3,在交集中,a出现2次,b出现一次,所以它的大小是3。两个bags的并的大小为两个bags的大小的和,在这个例子中是9.


  用r很容易的实现这个相似性的计算。


a<-c('a','a','a','b')
b<-c('a','a','b','b','c')
bb<-function(a,b){
	g<-intersect(a,b)
	g<-paste(g,sep="")
	xx<-0
	for (i in g){
		xx=xx+min(table(a)[i],table(b)[i])
	}
	xx/(length(a)+length(b))
}
bb(a,b)






require 'set'
s1=%w{a a a b}
s2=%w{a a b b  c}

def bag_sim(s1,s2)
    g=s1.to_set & s2.to_set
    m=0
    g.each do |i|
        a=s1.count(i)
        b=s2.count(i)
        m+=(a>b)?b:a
    end
    m/(s1.size+s2.size).to_f
end
puts bag_sim(a,b)



你可能感兴趣的:(C,C++,C#,Ruby,F#)