我想使用 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)
它工作正常,但对于我通过列号调用它的原始数据集是不切实际的,我如何在这个函数中引用列名?
我已经使用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) 我试图用javascript计算一个字段(一个字符串)的更改次数.例如,在name = MARTIN:MARTI => 1更改MARTINE => 1更改MATRIN => 2更改MARBOM => 3更改
我想在两个文本之间找到相似的单词数量
例
$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()函数,但这个函数不能正常工作.
我正在尝试在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) 我得到的这段代码可以快速返回两个字符串之间的编辑距离是否正好为 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
和 …
我需要在Haskell中使用一个程序来计算Levenshtein距离.
algorithm ×1
fuzzy-logic ×1
haskell ×1
javascript ×1
match ×1
php ×1
prolog ×1
python ×1
r ×1
tbb ×1