當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


R adist 近似弦距

R語言 adist 位於 utils 包(package)。

說明

計算字符向量之間的近似字符串距離。該距離是廣義的 Levenshtein(編輯)距離,給出將一個字符串轉換為另一個字符串所需的插入、刪除和替換的最小可能加權數量。

用法

adist(x, y = NULL, costs = NULL, counts = FALSE, fixed = TRUE,
      partial = !fixed, ignore.case = FALSE, useBytes = FALSE)

參數

x

一個字符向量。不支持Long vectors

y

字符向量,或 NULL (默認)指示將 x 視為 y

costs

名稱部分匹配 ‘ 的數字向量或列表⁠插入⁠', '⁠刪除⁠' 和 '⁠替代品⁠’ 給出計算 Levenshtein 距離的相應成本,或者NULL(默認)指示對所有三種可能的轉換使用單位成本。

counts

一個邏輯,指示是否選擇性地返回轉換計數(插入、刪除和替換的數量)作為返回值的 "counts" 屬性。

fixed

一個合乎邏輯的。如果TRUE(默認),則x 元素用作字符串文字。否則,它們被視為正則表達式,並隱含 partial = TRUE (對應於 agrepfixed = FALSE 使用的近似字符串距離)。

partial

一個邏輯,指示轉換後的 x 元素是否必須與完整的 y 元素完全匹配,或者僅匹配這些元素的子字符串。後者對應於 agrep 使用的近似字符串距離(默認情況下)。

ignore.case

一個合乎邏輯的。如果是 TRUE ,則在計算距離時忽略大小寫。

useBytes

一個合乎邏輯的。如果TRUE距離計算是逐字節而不是逐字符完成的。

細節

兩個字符串之間的(廣義)編輯(或編輯)距離st是轉換所需的插入、刪除和替換的最小可能加權數量s進入t(以便變換完全匹配t)。該距離的計算公式為partial = FALSE,目前使用動態規劃算法(參見,例如,https://en.wikipedia.org/wiki/Levenshtein_distance) 具有空間和時間複雜度 ,其中 的長度是st, 分別。另外計算轉換序列和計數是 .

廣義編輯距離也可用於近似(模糊)字符串匹配,在這種情況下,可以找到t與圖案的距離最小s(可以將其視為正則表達式,在這種情況下,適用使用最左邊和最長匹配的原則),請參見,例如https://en.wikipedia.org/wiki/Approximate_string_matching。該距離的計算公式為partial = TRUE使用 '⁠tre⁠” 作者:Ville Laurikari(https://github.com/laurikari/tre) 並對應於所使用的距離agrep。在這種情況下,給定的成本值被強製為整數。

請注意,插入和刪除的成本可能不同,在這種情況下,插入和刪除之間的距離st之間的距離可能不同ts.

具有 xy 元素的近似字符串距離的矩陣,其行和列分別對應於 xy

如果countsTRUE,轉換計數返回為"counts"該矩陣的屬性,作為一個 3 維數組,其維度對應於以下元素x, 的元素y,以及轉換類型(插入、刪除和替換)。另外,如果partial = FALSE,變換序列返回為"trafos"返回值的屬性,作為帶有元素‘的字符串⁠M⁠', '⁠我⁠', '⁠D⁠' 和 '⁠S⁠’分別表示匹配、插入、刪除和替換。如果partial = TRUE,匹配子字符串的偏移量(第一個和最後一個元素的位置)作為"offsets"返回值的屬性(兩個偏移量 如果不匹配)。

例子

## Cf. https://en.wikipedia.org/wiki/Levenshtein_distance
adist("kitten", "sitting")
## To see the transformation counts for the Levenshtein distance:
drop(attr(adist("kitten", "sitting", counts = TRUE), "counts"))
## To see the transformation sequences:
attr(adist(c("kitten", "sitting"), counts = TRUE), "trafos")

## Cf. the examples for agrep:
adist("lasy", "1 lazy 2")
## For a "partial approximate match" (as used for agrep):
adist("lasy", "1 lazy 2", partial = TRUE)

也可以看看

agrep 使用廣義編輯距離進行近似字符串匹配(模糊匹配)。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Approximate String Distances。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。