python字符串比较差异,python字符串相似度匹配算法

  python字符串比较差异,python字符串相似度匹配算法

  本文主要介绍Python中的levenshtein,有很好的参考价值。希望对你有帮助。如有错误或不足之处,请不吝赐教。

  

目录
Python levenshtein Python相似性评估1。在计算图片相似度的时候,我用的是余弦距离2。欧几里德距离3。曼哈顿距离4。切比雪夫距离5。闵可夫斯基距离6。标准化欧几里德距离7。马哈拉诺比斯距离8。编辑距离。

  

Python字符串相似度

  使用difflib模块-比较两个字符串或文本的相似性。

  首先导入difflib模块。

  导入差异库

  示例:

  上海中心大厦

  S1=建筑

  S2=上海中心

  S3=上海中心大厦

  打印(difflib。SequenceMatcher(None,Str,s1)。quick_ratio())

  打印(difflib。SequenceMatcher(None,Str,s2)。quick_ratio())

  打印(difflib。SequenceMatcher(None,Str,s3)。quick_ratio())

  0.5

  0.8

  0.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。

  将numpy作为np导入

  #余弦相似度(方法1):

  def余弦_距离2(矢量1,矢量2):

  user _ item _ matrix=NP . v stack((vector 1,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]

  返回用户相似度

  data=NP . load( data/all _ features . npy )

  #sim=cosin_distance(data[22],data[828])

  sim=余弦距离2(数据[22],数据[828])

  打印(sim卡)

  #余弦相似度(方法2)

  从sklearn.metrics.pairwise导入余弦_相似度

  a=np.array([1,2,8,4,6])

  a1=np.argsort(a)

  user_tag_matric=np.vstack((a,a1))

  用户相似性=余弦相似性(用户标记矩阵)

  打印(user_similarity[0][1])

  #余弦相似度(方法3)

  从sklearn.metrics.pairwise导入成对距离

  a=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 them

  def 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

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

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 如何对python字符串中字符进行替换,python 替换字符串
  • 如何对python字符串中字符进行替换,python 替换字符串,python字符串替换的2种方法
  • Python字符串转变量,python输出字符和数字变量
  • Python字符串转变量,python输出字符和数字变量,Python将字符串常量转化为变量方法总结
  • python字符串讲解,菜鸟教程python字符串
  • python字符串讲解,菜鸟教程python字符串,python 字符串详解
  • python字符串根据字符截取,python字符串的切片操作
  • python字符串根据字符截取,python字符串的切片操作,Python中的字符串切片(截取字符串)的详解
  • python中字符串的切片,python字符串
  • python中字符串的切片,python字符串,Python中字符串切片详解
  • python 去除字符串中的空格,python字符串去除空格
  • python 去除字符串中的空格,python字符串去除空格,Python 字符串去除空格的五种方法
  • ,,Python字符串拼接的4种方法实例
  • ,,Python字符串匹配之6种方法的使用详解
  • python编写函数去掉字符串中的空格,python字符串怎么去空格
  • 留言与评论(共有 条评论)
       
    验证码: