iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的字符串相似度实例分析
  • 454
分享到

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

2023-06-30 12:06:44 454人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“python中的字符串相似度实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的字符串相似度实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。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中的字符串相似度实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: Python中的字符串相似度实例分析

本文链接: https://www.lsjlt.com/news/329232.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中的字符串相似度实例分析
    本文小编为大家详细介绍“Python中的字符串相似度实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的字符串相似度实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Python字符串相似...
    99+
    2023-06-30
  • Python中的字符串相似度
    目录Python字符串相似度Python相似度评估1. 在计算图片的相似度时,我自己用到过余弦距离2.欧式距离3. 曼哈顿距离4.切比雪夫距离5.闵可夫斯基距离6.标准化欧氏距离7....
    99+
    2024-04-02
  • java算法之余弦相似度计算字符串相似率的示例分析
    小编给大家分享一下java算法之余弦相似度计算字符串相似率的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java有哪些集合类Java中的集合主要分为四类...
    99+
    2023-06-15
  • Python+fuzzywuzzy计算两个字符串之间的相似度
    fuzzywuzzy 可以计算两个字符串之间的相似度,它依据 Levenshtein Distance 算法来进行计算。该算法又叫 Edit Distance 算...
    99+
    2024-04-02
  • java算法之余弦相似度计算字符串相似率
    目录概述一、理论知识1、说重点2、案例理论知识二、实际开发案例1、pom.xml2、main方法3、Tokenizer(分词工具类)4、Word(封装分词结果)5、CosineSim...
    99+
    2024-04-02
  • python中字符串使用实例分析
    这篇“python中字符串使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中字符串使用实例分析”文章吧...
    99+
    2023-07-02
  • C语言中字符串相乘的示例分析
    这篇文章主要介绍C语言中字符串相乘的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 分析思路示例:我们把每一个数都看成是一个字符串,每一个元素为十进制数字所对应的字 符,由于是后面的元素先进行运算,故我们...
    99+
    2023-06-29
  • MySQL中如何检查两个字符串之间的相似度?
    可以借助“strcmp()”函数检查两个字符串之间的相似性。条件如下。如果两个字符串相等,则返回 0。如果第一个字符串相等,则返回 0。字符串小于第二个字符串,则返回-1。如果第一个字符串大于第二个字符串,则返回1。这是一个示例。情况 1 ...
    99+
    2023-10-22
  • Python格式化字符串实例分析
    这篇文章主要介绍“Python格式化字符串实例分析”,在日常操作中,相信很多人在Python格式化字符串实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python格式化字符串实例分析”的疑惑有所帮助!...
    99+
    2023-06-29
  • 优化方式中所有可能组合的字符串相似度
    大家好,我们又见面了啊~本文《优化方式中所有可能组合的字符串相似度》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进...
    99+
    2024-04-05
  • 如何分析python字符串相关str
    今天给大家介绍一下如何分析python字符串相关str。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。1:访str单个字符#for循环迭代name =...
    99+
    2023-06-26
  • Java 计算两个字符的相似度
    在Java中,要计算两个字符的相似度,可以借助一些字符串相似度算法。以下是几种常见的字符串相似度算法: Levenshtein距离:也称为编辑距离,用于计算两个字符串之间的最小编辑操作次数(插入、删除...
    99+
    2023-10-07
    java 开发语言
  • 图像相似度Hash算法的示例分析
    这篇文章主要介绍图像相似度Hash算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 图像的相似度Hash算法 Hash算法有三种,分别为平均哈希算法(aHash)、感...
    99+
    2024-04-02
  • Go中的字符串应用实例分析
    这篇“Go中的字符串应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go中的字符串应用实例分析”文章吧。字符串的本...
    99+
    2023-06-30
  • Python字符串的常用方法实例分析
    这篇文章主要介绍“Python字符串的常用方法实例分析”,在日常操作中,相信很多人在Python字符串的常用方法实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python字符串的常用方法实例分析”的疑...
    99+
    2023-06-29
  • JavaScript字符串string实例分析
    这篇“JavaScript字符串string实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2024-04-02
  • PHP中字符串的示例分析
    小编给大家分享一下PHP中字符串的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前面几篇文章中,我们也有提到有关于PHP的字符串等相关问题,那么几天我们继...
    99+
    2023-06-15
  • python字符串操作的示例分析
    这篇文章主要为大家展示了“python字符串操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python字符串操作的示例分析”这篇文章吧。字符串操作...
    99+
    2024-04-02
  • python字符串乘法的示例分析
    这篇文章将为大家详细讲解有关python字符串乘法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。字符串乘法在Python中,不仅可以乘以数字,还可以乘以字符串。例如:关于“python字符串乘法...
    99+
    2023-06-27
  • 字符串相似度算法-莱文斯坦距离算法
    莱文斯坦(Levenshtein)距离 莱文斯坦距离可以解决字符串相似度的问题。在莱文斯坦距离中,对每一个字符都有三种操作:删除、添加、替换例如有s1和s2两个字符串,a和b是与之对应的保存s1和s2全部字符的数组,i/j是数组下标。莱文...
    99+
    2023-01-31
    算法 字符串 文斯
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作