Levenshtein Distance Levenshtein 編輯距離——一種相似度的計算方法
/********************************************* Levenshtein Distance Algorithm *******************************/ /***************************************************************************************************************/ /*Author: TianLiang */ /*Time: 2011/10/14 */ /*Function: Get the distance of the two given strings Step Description 1 Set n to be the length of s. Set m to be the length of t. If n = 0, return m and exit. If m = 0, return n and exit. Construct a matrix containing 0..m rows and 0..n columns. 2 Initialize the first row to 0..n. Initialize the first column to 0..m. 3 Examine each character of s (i from 1 to n). 4 Examine each character of t (j from 1 to m). 5 If s[i] equals t[j], the cost is 0. If s[i] doesn't equal t[j], the cost is 1. 6 Set cell d[i,j] of the matrix equal to the minimum of: a. The cell immediately above plus 1: d[i-1,j] + 1. b. The cell immediately to the left plus 1: d[i,j-1] + 1. c. The cell diagonally above and to the left plus the cost: d[i-1,j-1] + cost. 7 After the iteration steps (3, 4, 5, 6) are complete, the distance is found in cell d[n,m]. */ int CCalculateSimilarity::LevenshteinDistance(CString source,CString target) { //step 1 int n=source.GetLength(); //Set n to be the length of s. int m=target.GetLength(); //Set m to be the length of t if (m==0) return n; //If n = 0, return m and exit. if (n==0) return m; //If m = 0, return n and exit. //Construct a matrix typedef vector< vector<int> > Tmatrix; Tmatrix matrix(n+1); for(int i=0; i<=n; i++) { matrix[i].resize(m+1); } //step 2 Initialize for(int i=1;i<=n;i++) { matrix[i][0]=i; //Initialize the first row to 0..n. } for(int i=1;i<=m;i++) { matrix[0][i]=i; //Initialize the first column to 0..m. } //step 3 Examine each character of s (i from 1 to n). for(int i=1;i<=n;i++) { const TCHAR si=source[i-1]; //step 4 for(int j=1;j<=m;j++) { const TCHAR dj=target[j-1]; //step 5 int cost; if(si==dj) { cost=0; } else { cost=1; } //step 6 const int above=matrix[i-1][j]+1; const int left=matrix[i][j-1]+1; const int diag=matrix[i-1][j-1]+cost; matrix[i][j]=min(above,min(left,diag)); } } //step7 return matrix[n][m]; }
在編寫詞語對齊軟體的時候,要用到一些相似度的計算,最簡單的莫過於2s/(s1+s2)這種計算方法了,當然還有上面呈現的這段程式碼:編輯距離相似度的計算方法。簡單的講,Levenshtein距離,用於比較字串的相似程度。
LD(s1, s2)=把s1變成s2需要的最小單字元操作(插入、刪除和替換)的次數。
這個相似度倒是幫了我不少忙,哈哈。分享下
相關推薦
Levenshtein Distance Levenshtein 編輯距離——一種相似度的計算方法
/********************************************* Levenshtein Distance Algorithm *******************************/ /********************
推薦系統中常見的幾種相似度計算方法和其適用資料
在推薦系統中,相似度的計算是一個很重要的課題。而相似度的計算方法多種多樣,今天我們來把這些方法比較一下,也為以後做專案留個筆記。其實無論是基於user的cf還是基於item的cf,亦或是基於svd的推薦,相似度計算都是必不可少的一步,只不過cf中計算相似度是一箇中間步驟,而
Levenshtein distance(編輯距離)
基本介紹 Levenshtein distance是一種度量兩個序列(字串)差異大小的方法。 該方法定義如下: 兩個序列(以單詞為例,這裡序列也可以表示一個句子)的Levenshtein distance是在使用一個單詞修改為另一個單詞時,通過編輯單個字元(如插入,刪除,修改)所需要
Levenshtein Distance(編輯距離)演算法與使用場景
## 前提 已經很久沒深入研究過演算法相關的東西,畢竟日常少用,就算死記硬背也是沒有實施場景導致容易淡忘。最近在做一個脫敏資料和明文資料匹配的需求的時候,用到了一個演算法叫`Levenshtein Distance Algorithm`,本文對此演算法原理做簡單的分析,並且用此演算法解決幾個常見的場景。
演算法介紹(3) 編輯距離演算法-字串相似度
編輯距離,又稱Levenshtein距離,是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。 具體的操作方法為:
MATLAB中實現編輯距離並求相似度
編輯距離,又稱Levenshtein距離,是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字元替換成另一個字元,插入一個字元,刪除一個字元。好像R2018a已經集成了編輯距離的API ,但是沒有安裝2018a,dist = edr(x,y,t
推薦系統的幾種相似度計算
對使用者的行為進行分析得到使用者的偏好後,可以根據使用者的偏好計算相似使用者和物品,然後可以基於相似使用者或物品進行推薦。這就是協同過濾中的兩個分支了,即基於使用者的協同過濾和基於物品的協同過濾。 關於相似度的計算,現有的幾種方法都是基於向量(Vector)
推薦演算法基礎--相似度計算方法彙總
推薦系統中相似度計算可以說是基礎中的基礎了,因為基本所有的推薦演算法都是在計算相似度,使用者相似度或者物品相似度,這裡羅列一下各種相似度計算方法和適用點 餘弦相似度 similarity=cos(θ)=A⋅B∥A∥∥B∥=∑i=1nAi×Bi∑i=1n(
文字相似度計算的幾個距離公式(歐氏距離、餘弦相似度、Jaccard距離、編輯距離)
本文主要講一下文字相似度計算的幾個距離公式,主要包括:歐氏距離、餘弦相似度、Jaccard距離、編輯距離。 距離計算在文字很多場景下都可以用到,比如:聚類、K近鄰、機器學習中的特徵、文字相似度等等。接下來就一一介紹一下: 假設兩個文字X=(x1, x2, x3,...xn)
PDF檔案怎麼編輯,一種方法輕鬆解決
PDF檔案怎麼編輯呢?其實很多人在使用PDF檔案,但是對PDF檔案瞭解的並不是很多,只知道PDF檔案安全性高,不可以直接編輯,有的時候想要編輯PDF檔案的時候也不知道從何下手,想要編輯PDF檔案的時候就可以選擇使用迅捷PDF編輯器,下面小編就使用PDF編輯器為大家分享一下PDF檔案編輯的方法。 輔助軟體
PDF文件怎麽編輯,一種方法輕松解決
選擇 多人 部分 1.5 調整 .com 方法 mar 成了 PDF文件怎麽編輯呢?其實很多人在使用PDF文件,但是對PDF文件了解的並不是很多,只知道PDF文件安全性高,不可以直接編輯,有的時候想要編輯PDF文件的時候也不知道從何下手,想要編輯PDF文件的時候就可以選擇使
python3 使用Edit distance(編輯距離)求兩個二進位制序列的相似性
編輯距離:又稱Levenshtein距離(萊文斯坦距離也叫做Edit Distance),是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數,如果它們的距離越大,說明它們越是不同。許可的編輯操作包
.Net MVC 導入導出Excel總結(三種導出Excel方法,一種導入Excel方法) 通過MVC控制器導出導入Excel文件(可用於java SSH架構)
ets esp llb pat lencod cnblogs 創建 etime mmd public class ExcelController : Controller { // // GET: /Excel/ M
一種神經元探索系統方法及裝置
最大 計算性能 限制 硬件加速 芯片 使用 信號 所有 權重 發明背景與現有技術應用背景 深度學習已經在圖像分類檢測、遊戲等諸多領域取得了突破性的成績。由於人工神經網絡計算量大,訓練時間長。因此,相關的硬件加速平臺也在百花齊放,包括基於英偉達的G
校園網使用指北-附一種免流量上網方法
學校裡沒有集體寬頻,只能使用校園網(NEU),校園網資費政策如下: ①校園網訪問ipv6站點免費不限流量; ②校園網訪問ipv4站點20元每月60GB流量。(15元每月27GB流量) 除了國內高校的一些官網、直播站等支援ipv6
for迴圈的一種新的使用方法
在使用Qt過程中,看到有人使用一種新的for迴圈,感覺很方便,就記錄下來了。 vector<QString> vStrList; vStrList.push_back("A"); vStrList.push_back("B"); vStrLis
【Flask】一種生成SECRET_KEY的方法
在終端中: →ipython →import os, base64 →a = os.urandom(66) 其中os.urandom(66),生成了一個66位元組的字串,儲存到a,並且這個字串每次都是不同的,如圖: →base64.b64encode(a)
quartus 一種管腳分配方法
第一步: 在QII軟體中,使用“Assignments -》 Remove Assignments”標籤,移除管腳分配內容,以確保此次操作,分配的管腳沒有因為覆蓋而出現錯誤的情況。 編寫xxx.tcl檔案。該檔案需要在當前工程目錄下。格式如下: 第二步:在QII軟體中,使用“To
一種異常值檢測方法、原理 (基於箱線圖)
先介紹使用到的方法原理,也就是一種異常檢測的方法。 首先要先了解箱線圖。 箱線圖 箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用資料中的五個統計量:最小值、第一四分位數、中位數、第三四分位數與最大值來描述資料的一種方法,它也可以粗略地看
句子相似度計算的幾種方法
在做自然語言處理的過程中,我們經常會遇到需要找出相似語句的場景,或者找出句子的近似表達,這時候我們就需要把類似的句子歸到一起,這裡面就涉及到句子相似度計算的問題,那麼本節就來了解一下怎麼樣來用 Python 實現句子相似度的計算。 基本方法 句子相似度計算我們一共歸類