Я следую этому коду для расстояния Левенштейна https://www.mathworks.com/examples/matlab/community/35304-word-error-rate Код даст мне WER для использования, например
[a]= WER('hi there how r u','hello there')
% a[1] = 2 (3 additions 1 substitution, so 4/2)
, где 1-я строка - гипотеза, а вторая - ссылка.
Код, который вычисляет расстояние, воспроизводится следующим образом:
function d=strd(a,b,cas)
% d=strd(r,b,cas) computes Levenshtein and editor distance
% between strings r and b with use of Vagner-Fisher algorithm.
% if CAS == 2 then a case is ignored.
aa=a;
bb=b;
if cas==2
aa=upper(a);
bb=upper(b);
end
luma=numel(bb); lima=numel(aa);
lu1=luma+1; li1=lima+1;
dl=zeros([lu1,li1]);
dl(1,:)=0:lima; dl(:,1)=0:luma;
%Distance
for i=2:lu1
bbi=bb(i-1);
for j=2:li1
kr=1;
if strcmp(aa(j-1),bbi)
kr=0;
end
dl(i,j)=min([dl(i-1,j-1)+kr,dl(i-1,j)+1,dl(i,j-1)+1]);
end
end
d=dl(end,end);
Как это можно изменить, чтобы получить фактическое количество замен, удалений и добавлений, например что-то вроде
function [dist addit subst delet] = strd(a,b,cas)
Спасибо
седый