как вычислить вставку, удаление и замену расстояния Левенштейна в Matlab - PullRequest
0 голосов
/ 05 марта 2019

Я следую этому коду для расстояния Левенштейна 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)  

Спасибо
седый

...