1. 程式人生 > >Levenshtein Distance Levenshtein 編輯距離——一種相似度的計算方法

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 實現句子相似度的計算。 基本方法 句子相似度計算我們一共歸類