欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的字符串相似度

 更新時(shí)間:2022年05月12日 10:43:32   作者:搬磚的Fish  
這篇文章主要介紹了Python中的字符串相似度,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python字符串相似度

利用difflib模塊—實(shí)現(xiàn)兩個(gè)字符串或文本相似度比較

首先導(dǎo)入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.5
0.8
0.8333333333333334

Python相似度評(píng)估

在評(píng)估相似度的時(shí)候,經(jīng)常會(huì)用到“距離”:

1. 在計(jì)算圖片的相似度時(shí),我自己用到過余弦距離

有沒有搞錯(cuò),又不是學(xué)幾何,怎么扯到夾角余弦了?各位看官稍安勿躁。幾何中夾角余弦可用來(lái)衡量?jī)蓚€(gè)向量方向的差異,機(jī)器學(xué)習(xí)中借用這一概念來(lái)衡量樣本向量之間的差異。

(1)在二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角余弦公式:

(2)兩個(gè)n維樣本點(diǎn)a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夾角余弦

類似的,對(duì)于兩個(gè)n維樣本點(diǎn)a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用類似于夾角余弦的概念來(lái)衡量它們間的相似程度。

即:

夾角余弦取值范圍為[-1,1]。夾角余弦越大表示兩個(gè)向量的夾角越小,夾角余弦越小表示兩向量的夾角越大。當(dāng)兩個(gè)向量的方向重合時(shí)夾角余弦取最大值1,當(dāng)兩個(gè)向量的方向完全相反夾角余弦取最小值-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_similarity
a = 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_distances
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])

需要注意的一點(diǎn)是,用pairwise_distances計(jì)算的Cosine distance是1-(cosine similarity)結(jié)果 

2.歐式距離

歐氏距離是最易于理解的一種距離計(jì)算方法,源自歐氏空間中兩點(diǎn)間的距離公式

# 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. 曼哈頓距離

從名字就可以猜出這種距離的計(jì)算方法了。想象你在曼哈頓要從一個(gè)十字路口開車到另外一個(gè)十字路口,駕駛距離是兩點(diǎn)間的直線距離嗎?顯然不是,除非你能穿越大樓。實(shí)際駕駛距離就是這個(gè)“曼哈頓距離”。而這也是曼哈頓距離名稱的來(lái)源, 曼哈頓距離也稱為城市街區(qū)距離(CityBlock distance)。

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

4.切比雪夫距離

國(guó)際象棋玩過么?國(guó)王走一步能夠移動(dòng)到相鄰的8個(gè)方格中的任意一個(gè)。那么國(guó)王從格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走試試。你會(huì)發(fā)現(xiàn)最少步數(shù)總是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.標(biāo)準(zhǔn)化歐氏距離

標(biāo)準(zhǔn)化歐氏距離是針對(duì)簡(jiǎn)單歐氏距離的缺點(diǎn)而作的一種改進(jìn)方案。標(biāo)準(zhǔn)歐氏距離的思路:既然數(shù)據(jù)各維分量的分布不一樣,好吧!那我先將各個(gè)分量都“標(biāo)準(zhǔn)化”到均值、方差相等吧

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

其中,輸入數(shù)據(jù)是兩個(gè)同維度的數(shù)組

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信跳一跳小游戲python腳本

    微信跳一跳小游戲python腳本

    這篇文章主要為大家詳細(xì)介紹了微信跳一跳小程序Python腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python 基礎(chǔ)教程之閉包的使用方法

    Python 基礎(chǔ)教程之閉包的使用方法

    這篇文章主要介紹了Python 基礎(chǔ)教程之閉包的使用方法的相關(guān)資料,希望大家通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • 解決python讀取幾千萬(wàn)行的大表內(nèi)存問題

    解決python讀取幾千萬(wàn)行的大表內(nèi)存問題

    今天小編就為大家分享一篇解決python讀取幾千萬(wàn)行的大表內(nèi)存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-06-06
  • Python lxml模塊安裝教程

    Python lxml模塊安裝教程

    這篇文章主要介紹了Python lxml模塊安裝教程,本文分別講解了Windows系統(tǒng)和Linux系統(tǒng)下的安裝教程,需要的朋友可以參考下
    2015-06-06
  • Python實(shí)現(xiàn)的在特定目錄下導(dǎo)入模塊功能分析

    Python實(shí)現(xiàn)的在特定目錄下導(dǎo)入模塊功能分析

    這篇文章主要介紹了Python實(shí)現(xiàn)的在特定目錄下導(dǎo)入模塊功能,結(jié)合實(shí)例形式分析了Python基于系統(tǒng)函數(shù)及import語(yǔ)句實(shí)現(xiàn)模塊導(dǎo)入的相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • 如何在mac版pycharm選擇python版本

    如何在mac版pycharm選擇python版本

    這篇文章主要介紹了如何在mac版pycharm選擇python版本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用torchtext導(dǎo)入NLP數(shù)據(jù)集的操作

    使用torchtext導(dǎo)入NLP數(shù)據(jù)集的操作

    這篇文章主要介紹了使用torchtext導(dǎo)入NLP數(shù)據(jù)集的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 對(duì)Python的多進(jìn)程鎖的使用方法詳解

    對(duì)Python的多進(jìn)程鎖的使用方法詳解

    今天小編就為大家分享一篇對(duì)Python的多進(jìn)程鎖的使用方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-02-02
  • python實(shí)現(xiàn)自動(dòng)售貨機(jī)

    python實(shí)現(xiàn)自動(dòng)售貨機(jī)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)售貨機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • PyCharm安裝PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步驟詳解

    PyCharm安裝PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步驟詳解

    這篇文章主要介紹了PyCharm安裝PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論