千家信息网

Python中的字符串相似度实例分析

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文小编为大家详细介绍"Python中的字符串相似度实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Python中的字符串相似度实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2025年11月07日Python中的字符串相似度实例分析

本文小编为大家详细介绍"Python中的字符串相似度实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Python中的字符串相似度实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Python字符串相似度

利用difflib模块—实现两个字符串或文本相似度比较

首先导入difflib模块

import difflib

示例:

Str = '上海中心大厦's1  = '大厦's2  = '上海中心's3  = '上海中心大楼'
print(difflib.SequenceMatcher(None, Str, s1).quick_ratio())  print(difflib.SequenceMatcher(None, Str, s2).quick_ratio())  print(difflib.SequenceMatcher(None, Str, s3).quick_ratio())0.50.80.8333333333333334

Python相似度评估

在评估相似度的时候,经常会用到"距离":

1. 在计算图片的相似度时,我自己用到过余弦距离

有没有搞错,又不是学几何,怎么扯到夹角余弦了?各位看官稍安勿躁。几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。

(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

(2)两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦

类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

即:

夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

import numpy as np# 余弦相似度(法1):def cosin_distance2(vector1, vector2):     user_item_matric = np.vstack((vector1, vector2))    sim = user_item_matric.dot(user_item_matric.T)    norms = np.array([np.sqrt(np.diagonal(sim))])    user_similarity = (sim / norms / norms.T)[0][1]    return user_similarity data = np.load("data/all_features.npy")#sim = cosin_distance(data[22], data[828])sim = cosin_distance2(data[22], data[828])print(sim) # 余弦相似度(法2)from sklearn.metrics.pairwise import cosine_similaritya = np.array([1, 2, 8, 4, 6])a1 = np.argsort(a)user_tag_matric = np.vstack((a, a1))user_similarity = cosine_similarity(user_tag_matric)print(user_similarity[0][1]) # 余弦相似度(法3)from sklearn.metrics.pairwise import pairwise_distancesa = np.array([1, 2, 8, 4, 6])a1 = np.argsort(a)user_tag_matric = np.vstack((a, a1))user_similarity = pairwise_distances(user_tag_matric, metric='cosine')print(1-user_similarity[0][1])

需要注意的一点是,用pairwise_distances计算的Cosine distance是1-(cosine similarity)结果

2.欧式距离

欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式

# 1) given two data points, calculate the euclidean distance between themdef get_distance(data1, data2):    points = zip(data1, data2)    diffs_squared_distance = [pow(a - b, 2) for (a, b) in points]    return math.sqrt(sum(diffs_squared_distance))

3. 曼哈顿距离

从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个"曼哈顿距离"。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(CityBlock distance)。

def Manhattan(vec1, vec2):    npvec1, npvec2 = np.array(vec1), np.array(vec2)    return np.abs(npvec1-npvec2).sum()# Manhattan_Distance,

4.切比雪夫距离

国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max(| x2-x1 | , | y2-y1 | ) 步。有一种类似的一种距离度量方法叫切比雪夫距离。

def Chebyshev(vec1, vec2):    npvec1, npvec2 = np.array(vec1), np.array(vec2)    return max(np.abs(npvec1-npvec2))# Chebyshev_Distance

5.闵可夫斯基距离

闵氏距离不是一种距离,而是一组距离的定义

#!/usr/bin/env python from math import*from decimal import Decimal def nth_root(value,n_root):    root_value=1/float(n_root)    return round(Decimal(value)**Decimal(root_value),3) def minkowski_distance(x,y,p_value):    return nth_root(sum(pow(abs(a-b),p_value) for a,b in zip(x,y)),p_value) print(minkowski_distance([0,3,4,5],[7,6,3,-1],3))

6.标准化欧氏距离

标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,好吧!那我先将各个分量都"标准化"到均值、方差相等吧

def Standardized_Euclidean(vec1,vec2,v):    from scipy import spatial    npvec = np.array([np.array(vec1), np.array(vec2)])    return spatial.distance.pdist(npvec, 'seuclidean', V=None)# Standardized Euclidean distance# http://blog.csdn.net/jinzhichaoshuiping/article/details/51019473

7.马氏距离

def Mahalanobis(vec1, vec2):    npvec1, npvec2 = np.array(vec1), np.array(vec2)    npvec = np.array([npvec1, npvec2])    sub = npvec.T[0]-npvec.T[1]    inv_sub = np.linalg.inv(np.cov(npvec1, npvec2))    return math.sqrt(np.dot(inv_sub, sub).dot(sub.T))# MahalanobisDistance

8.编辑距离

def Edit_distance_str(str1, str2):    import Levenshtein    edit_distance_distance = Levenshtein.distance(str1, str2)    similarity = 1-(edit_distance_distance/max(len(str1), len(str2)))    return {'Distance': edit_distance_distance, 'Similarity': similarity}# Levenshtein distance

其中,输入数据是两个同维度的数组

读到这里,这篇"Python中的字符串相似度实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

余弦 相似 夹角 两个 向量 欧氏 字符 字符串 曼哈顿 标准 实例 实例分析 分析 文章 方向 方法 样本 上海 标准化 十字路口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器安全狗更新失败 网络技术基础教程11 公司在长期软件开发中 软件开发自动化部署 php网站数据库在哪里 剑灵捏脸数据库怎么用 连接数据库出错日志怎么没有了 周口软件开发培训机构 计算机网络技术的优势劣势 看数据库的某个表的表结构图 计算机网络技术好专业 一种便于清洁的服务器机柜 合理使用数据库注意的问题 海致bdp由海致网络技术 银行的数据库是什么类型 制作网页一定要主机或者服务器吗 安卓直接操作数据库可行吗 csgo服务器架设 xshell怎么连数据库服务器 steam好友服务器死活连不上 有道 服务器 北邮网络安全学院哪个好 通信传输线路网络安全保障措施 金融网络安全宣传微视频 邻居web服务器如何显示网速 我的世界买哪个版本服务器 服务器先做raid吗 数据库虚地址和实地址 海致bdp由海致网络技术 关于网络安全漏洞的提示
0