Advertisement
Guest User

TestMatlab

a guest
Jan 21st, 2013
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.23 KB | None | 0 0
  1. function [A,B] = Finn(b,varargin)
  2. A = 0; H = 0;
  3. % Sjekker hvor mange lister en søker i
  4. % Mer enn 3, eller mindre enn 2 variabler avslutter
  5.  
  6. if isempty(b)
  7.    return;
  8. end
  9.  
  10. if nargin == 2 || isequal(varargin{1},varargin{2})
  11.     a = lower(varargin{1}); La = length(a);
  12.     d = '';
  13.     H = 2;
  14. if ~iscellstr(a)
  15.     return
  16. end
  17. elseif nargin == 3
  18.     a = lower(varargin{1}); La = length(a);
  19.     d = lower(varargin{2}); Ld = length(d);
  20.     if La ~= Ld || ~iscellstr(a) || ~iscellstr(d)
  21.        return
  22.     end
  23.     a = regexprep(a,'[^a-zA-ZæøåÆØÅ]','');
  24.     H = 3;
  25. else
  26.     return
  27. end
  28.  
  29. % Tester om input er en streng, så deles denne opp
  30. % og lagres i en liste
  31. K=0;
  32.     if isa(b,'char')
  33.         % Deler opp strengen på komma
  34.        if sum(b == ',')~=0
  35.            c = regexp(b, ',', 'split');
  36.         % Beholder bare de unike strengene i b
  37.         if length(c) > length(unique(c));
  38.            [~,p,~] = unique(c,'first');
  39.            c = c(sort(p));
  40.         end
  41.         B = c;
  42.        else
  43.          % Hvis b bare en en enkelt streng sjekkes denne raskt
  44.            if iscellstr(a)
  45.           b = regexprep(b,'[^a-zA-ZæøåÆØÅ]','');
  46.           K = strcmpi(b,a) + strcmpi(b,d);
  47.           if sum(K>0)
  48.              u = 1:length(a);
  49.              t = u(K>0);
  50.              A = t(1);
  51.              B = 0;
  52.           end
  53.           c = {b};
  54.            end
  55.           return
  56.        end
  57.     elseif isa(b,'cell') && ~isempty(b{:})
  58.          c = b;  B = c;
  59.     else
  60.         return
  61.     end
  62.    
  63.     Lc = 1:length(c); LB = 1:length(B);
  64.    
  65.        c = regexprep(lower(c)','[^a-zA-ZæøåÆØÅ]','');
  66.          if H==2
  67.            [~,w2] = ismember(c,a)
  68.             A = w2; A = A';
  69.             B = B(w2==0);
  70.          else
  71.           d = regexprep(lower(d),'[^a-zA-ZæøåÆØÅ]',''); u = 1:length(d);
  72.           [~,d2] = ismember(c,a)
  73.           A = d2; numel(c);
  74.           if length(d2(d2>0))<numel(c)
  75.           [c1,~] = ismember(c,d(d2(d2>0))); C=A;
  76.           B(c1>0)=[];  Lc(c1>0)=[]; C(c1>0)=[]; LB(c1>0)=[]; B = B(C==0); LB=LB(C==0);
  77.                if ~isempty(B)
  78.                  T = regexprep(lower(B)','[^a-zA-ZæøåÆØÅ]','');
  79.                  d(d2(d2>0))=[]; u(d2(d2>0))=[];
  80.                  [~,d3] = ismember(T,d);
  81.                  B = B(d3==0);
  82.                  A(LB(d3>0)) = u(d3(d3>0));
  83.                end
  84.           else
  85.           B = 0;
  86.           end
  87.           A = A';
  88.          end
  89.          if numel(B)>0
  90.             T = regexprep(lower(B)','[^a-zA-ZæøåÆØÅ]','');
  91.            [~, q2] = ismember(T,c);
  92.           for j = 1:numel(T)
  93.               i = 1;
  94.               if H == 2
  95.            while i <= length(a) && A(q2(j)) == 0
  96.                if compare(a{i},T{j})==1
  97.                   A(q2(j)) = i;
  98.                   B(i) = [];
  99.                else
  100.                    i = i + 1;
  101.                end
  102.             end                  
  103.               else
  104.            while i <= length(a) && A(q2(j)) == 0
  105.                if compare(a{i},T{j})==1
  106.                   A(q2(j)) = i;
  107.                elseif H ~= 2
  108.                    if compare(d{i},T{j})==1
  109.                   A(q2(j)) = i;
  110.                   B(i) = [];
  111.                    end
  112.                else
  113.                    i = i + 1;
  114.                end
  115.             end
  116.               end                                    
  117.           end
  118.          end
  119. end
  120.  
  121.  
  122. function Y = compare(str1,str2)
  123.  
  124. Y = 0;
  125.  
  126. % Tester om lengden mellom strengene er større enn 1
  127. if abs(length(str2)-length(str1))>1
  128.     return
  129. elseif strcmpi(str1,str2)
  130.     Y = 1;
  131.     return
  132. end
  133.  
  134.     L1=length(str1)+1;
  135.     L2=length(str2)+1;
  136.     L=zeros(L1,L2);
  137.  
  138.     g=+1;%just constant
  139.     m=+0;%match is cheaper, we seek to minimize
  140.     d=+1;%not-a-match is more costly.
  141.  
  142.     %do BC's
  143.     L(:,1)=([0:L1-1]*g)';
  144.     L(1,:)=[0:L2-1]*g;
  145.  
  146.     %loop invariant
  147.     for idx=2:L1;
  148.         for idy=2:L2
  149.             if(str1(idx-1)==str2(idy-1))
  150.                 score=m;
  151.             else
  152.                 score=d;
  153.             end
  154.             m1=L(idx-1,idy-1) + score;
  155.             m2=L(idx-1,idy) + g;
  156.             m3=L(idx,idy-1) + g;
  157.             L(idx,idy)=min(m1,min(m2,m3));
  158.             if L(L1,L2)>1
  159.                 return
  160.             end
  161.         end
  162.     end
  163.     Y=1;
  164. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement