亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-05-12 13:42:26 來源:億速云 閱讀:296 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“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.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。

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])

需要注意的一點是,用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

其中,輸入數據是兩個同維度的數組

讀到這里,這篇“Python中的字符串相似度實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 光泽县| 南开区| 昆明市| 玛沁县| 毕节市| 个旧市| 咸宁市| 获嘉县| 嘉定区| 和静县| 莲花县| 油尖旺区| 北流市| 昆山市| 清新县| 寿宁县| 剑河县| 茌平县| 陆川县| 海晏县| 通榆县| 元谋县| 宁晋县| 沙河市| 洪洞县| 阜阳市| 定陶县| 耒阳市| 丰县| 宁国市| 孝义市| 绥德县| 天峨县| 霍邱县| 辽宁省| 青海省| 雷州市| 寻甸| 定安县| 西青区|