是否有 R 函数可以对两个字符串向量进行成对编辑距离计算?

bbi*_*bip 4 r levenshtein-distance

我有两个字符串向量:

a <- c('Alpha', 'Beta', 'Gamma', 'Delta')
b <- c('Epsilon', 'Zeta', 'Eta', 'Theta')
Run Code Online (Sandbox Code Playgroud)

我想计算每对字符串的编辑距离或编辑距离。

如果我使用

stringdist(a, b, method="lv")
Run Code Online (Sandbox Code Playgroud)

输出是一个向量,其中包含向量 a 中每个字符串和向量 b 中相应字符串的编辑距离(即 Alpha 与 Epsilon、Beta 与 Zeta 等)。

我需要的是一个向量中的每个字符串与另一个向量中的所有其他字符串之间的成对比较(即 Alpha 与 Epsilon、Alpha 与 Zeta、Alpha 与 Eta、Alpha 与 Theta、Beta 与 Epsilon 等) 。

谢谢

All*_*ron 6

有一种简单的方法可以使用stringdistmatrix一些重塑来做到这一点:

library(stringdist)
library(tidyverse)

a <- c('Alpha', 'Beta', 'Gamma', 'Delta')
b <- c('Epsilon', 'Zeta', 'Eta', 'Theta')

stringdistmatrix(a, b, method = "lv", useNames = "string") %>%
  as_tibble(rownames = "a") %>%
  pivot_longer(-1, names_to = "b", values_to = "dist")
#> # A tibble: 16 x 3
#>    a     b        dist
#>    <chr> <chr>   <dbl>
#>  1 Alpha Epsilon     7
#>  2 Alpha Zeta        4
#>  3 Alpha Eta         4
#>  4 Alpha Theta       4
#>  5 Beta  Epsilon     7
#>  6 Beta  Zeta        1
#>  7 Beta  Eta         2
#>  8 Beta  Theta       2
#>  9 Gamma Epsilon     7
#> 10 Gamma Zeta        4
#> 11 Gamma Eta         4
#> 12 Gamma Theta       4
#> 13 Delta Epsilon     6
#> 14 Delta Zeta        2
#> 15 Delta Eta         3
#> 16 Delta Theta       3
Run Code Online (Sandbox Code Playgroud)