标签: levenshtein-distance

在两列数据框上使用 adist

我想使用 adist 计算每行中两列值之间的编辑距离。

我或多或少是这样使用它的:

A <- c("mad","car")
B <- c("mug","cat")
my_df <- data.frame(A,B)
my_df$dist <- adist(my_df$A, my_df$B, ignore.case = TRUE)
my_df <- my_df[order(dist),]
Run Code Online (Sandbox Code Playgroud)

最后两行与我的情况相同,但实际数据框看起来有点不同 - 我的原始数据框的列是字符类型,而不是因子。此外, dist 列似乎作为 2 列矩阵返回,我不知道为什么会发生这种情况。

更新:我读了一点,发现我需要将它应用于行,所以我的新代码如下:

apply(my_df, 1, function(d) adist(d[1], d[2]))
Run Code Online (Sandbox Code Playgroud)

它工作正常,但对于我通过列号调用它的原始数据集是不切实际的,我如何在这个函数中引用列名?

r levenshtein-distance

1
推荐指数
1
解决办法
2078
查看次数

Levenshtein 算法并行

我已经使用parallel_for 实现了该算法。但大多数情况下我使用同步部分,所以我没有利润。也许有更好的选择?

    tbb::parallel_for (tbb::blocked_range<int>(1, m * n), apply_transform(d, j, this, m, n));

    void apply_transformation(int * d, int i, int j, int n){
        int elem1 = (*v1)[i];
        int elem2 = (*v2)[j];
        if(elem1 == elem2){
            dLock.acquire(dMutex);
            d[i*n + j] = d[(i-1)*n + j-1];       // no operation required
            dLock.release();
        } else {
            dLock.acquire(dMutex);
            d[i*n + j] = std::min(std::min(d[(i-1)*n + j] + 1, //deletion
                    d[i*n + j-1] + 1), //insertion
                    d[(i-1)*n + j-1] + 1); //substitution
            dLock.release();
        }
    }

    class apply_transform{
        int * array; …
Run Code Online (Sandbox Code Playgroud)

parallel-processing tbb levenshtein-distance

0
推荐指数
1
解决办法
1361
查看次数

如何使用javascript计算字符串更改的数量

我试图用javascript计算一个字段(一个字符串)的更改次数.例如,在name = MARTIN:MARTI => 1更改MARTINE => 1更改MATRIN => 2更改MARBOM => 3更改

javascript levenshtein-distance

0
推荐指数
1
解决办法
108
查看次数

PHP - 查找两段文本之间的匹配单词数量?

我想在两个文本之间找到相似的单词数量

$str1=the cat is on the roof  
$str2=the mouse is on the roof
Run Code Online (Sandbox Code Playgroud)

在$ str1和$ str2中,the,on,on, words字是相似的

因此输出数量为5或者百分比为86%

我尝试使用similar_text()函数,但这个函数不能正常工作.

php match fuzzy-logic levenshtein-distance

0
推荐指数
1
解决办法
1666
查看次数

Prolog毫无理由地退出本地堆栈

我正在尝试在Prolog中实现Levenshtein距离

实现非常简单:

levenshtein(W1, W2, D) :-
    atom_length(W1, L1),
    atom_length(W2, L2),
    lev(W1, W2, L1, L2, D),
    !.

lev(_, _, L1, 0, D) :- D is L1, !.
lev(_, _, 0, L2, D) :- D is L2, !.
lev(W1, W2, L1, L2, D) :-
  lev(W1, W2, L1 - 1, L2, D1),
  lev(W1, W2, L1, L2 - 1, D2),
  lev(W1, W2, L1 - 1, L2 - 1, D3),
  charAt(W1, L1, C1),
  charAt(W2, L2, C2),
  ( C1 = C2 -> T is …
Run Code Online (Sandbox Code Playgroud)

prolog levenshtein-distance non-termination failure-slice

0
推荐指数
1
解决办法
117
查看次数

谁能解释一下计算 Levenshtein 距离的代码?

我得到的这段代码可以快速返回两个字符串之间的编辑距离是否正好为 2。

def li(s, i):
    try:
        return s[i]
    except IndexError:
        return None
    
def f(str1, str2):
 t = [4, 4, 1, 2, 3]
 for i, str1_symb in enumerate(str1):
    p = 4
    res = []
    for j, t_val in enumerate(t):
        p = min(t_val - (str1_symb == li(str2, i + j - 2)), p, li(t, j + 1) or 4) + 1
        res.append(p)
    t = res
 return li(t, len(str2) - len(str1) + 2) == 3
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法进行测试:

f("zzzzfood", "zzzzdodod") 
Run Code Online (Sandbox Code Playgroud)

例如它将返回True

和 …

python algorithm levenshtein-distance

0
推荐指数
1
解决办法
417
查看次数

-5
推荐指数
1
解决办法
507
查看次数