56 lines
1022 B
Python
56 lines
1022 B
Python
def similarity(a, b, n=1):
|
|
if n<=1:
|
|
# print(a, b)
|
|
d = len(a+b)
|
|
c = [e for e in a if e in set(b)]
|
|
n = len(c)
|
|
# print(set(a+b))
|
|
# print(d, n)
|
|
return n/d
|
|
sa = [a[i:i+n] for i in range(len(a)-n+1)]
|
|
sb = [b[i:i+n] for i in range(len(b)-n+1)]
|
|
return similarity(sa, sb)
|
|
|
|
|
|
def resemblance(a, b):
|
|
d = len(a+b)
|
|
n = len(set(a+b))
|
|
return n/d
|
|
|
|
def common(a, b):
|
|
return [e for e in a if e in set(b)]
|
|
|
|
def common_substring(a, b):
|
|
sa = substring(a)
|
|
sb = substring(b)
|
|
sc = common(sa, sb)
|
|
stc = len(sa+sb)/2
|
|
return len(sc)/stc
|
|
|
|
def substring(a):
|
|
return [a[i:i+n+1] for n in range(len(a)) for i in range(len(a)-n)]
|
|
|
|
a = '0'
|
|
b = '012345'
|
|
|
|
def test1():
|
|
sm = 0
|
|
n = min(len(a),len(b))
|
|
for i in range(n):
|
|
s = similarity(a, b, i+1)
|
|
sm += s
|
|
print(i, s)
|
|
|
|
print('score:', sm/n)
|
|
|
|
def test2():
|
|
r = substring("abc")
|
|
print(r)
|
|
|
|
def test3():
|
|
r = common_substring(a, b)
|
|
print(r)
|
|
|
|
|
|
test3()
|