python 字符相似度对比
1,字
将字符以逗号,句号为一个段落,在对段落内的字符同一字进行对比
2,词
同一词语进行对比
import difflib
def stri_similar(s1,s2):
return difflib.SequenceMatcher(None,s1,s2).quick_ratio()
data1 = '你好啊'
data2 = '你好'
# for i in range(len(data1)):
# s1 = data1[i]
# s2 = data2[i]
# print(stri_similar(s1,s2) )
# print(stri_similar(data1,data2) )
#相似比对比
#顺序对比法:两个列表按顺序对比 缺点:计算量小 ; 优点:相似度对比准确度低
#遍历对比法:一个列表遍历另一个列表的全部,一段对比每一段。 缺点:计算量大 ; 优点:相似度对比更有准确度
d = ['长短搭配,', '尽量减少接头,', '以节约钢材。']
text = ['搭配,', '尽少接头,', '以节约钢材。']
def contrast(text,d):
try:
count = 0
for i in range(len(text)): #遍历段落
count1 = 0
if len(text[i]) > len(d[i]):
c = text[i]
t = d[i]
else :
c = d[i]
t = text[i]
for p in c: #遍历段落字符
if p in t:
count1 += 1
count += count1/len(c)
# print('{:.2f} {:.2%}'.format(count,count/len(text)))
return count/len(text)
except:
print('报错:列表长度不一样')
# contrast(text,d)
def contrast2(list1,list2):
count = 0
for i in list1:
count1 = 0
for t in list2:
count1 += contrast([t],[i])
count += count1
print('总量:{:.2f} 相似度:{:.2%}'.format(count,count/len(list1)))
list1 = ['长短搭配,', '尽量减少接头,', '以节约钢材。']
list2 = ['长短搭配,','尽量减少接头,']
contrast2(list1,list2)
# contrast(list1,list2)
word_list = []
s_vector = []
import jieba
s1 = '我喜欢你啊'
s2 = '我喜欢你'
def max_len(s1,s2):
a,b = len(s1),len(s2)
if a > b:
data =s1
else:
data = s2
return data
print(max_len(s1,s2) )
#第一种补零
#第二种中和
for i in list(jieba.cut(s1)):
print(i)
def merge(s1,s2):
word_list = list(jieba.cut(s1)) #词典
for i,d in list(jieba.cut(s2)):
if i in word_list :
continue
else:
word_list.append(i)
# 第一步
def vector(data): #词典匹配 word_list
for i in word_list:
if i in list(jieba.cut(data)):
s_vector.append(1)
else:
s_vector.append(0)
# 第二步
def cosine_Similarity(s1,s2): #余弦
l,l1,l2 = 0,0,0
for i,d in enumerate(s1):
l += s1[i]*s2[i]
l1 += s1[i]**2
l2 += s2[i]**2
return l/((l1**0.5)*(l2**0.5))
def Euclidean_distance(s1,s2): #欧氏距离
vector_list = 0
for i,d in enumerate(s1):
vector_list += (s1[i]-s2[i])**2
return vector_list**0.5
print((2*2)**0.5,2**2)
s1 = [1,1,1,1,1]
s2 = [3,3,3,3,3]
d = Euclidean_distance(s1,s2)
print(d)
d = cosine_Similarity(s1,s2)
print(d)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?