%  prozene odstavce v textu fourierovou transformaci a potom zjisti, jak odstavce vzajemne koreluji

%  uprava vstupniho textu
%  ulozit text do textoveho souboru (lepsi je iso8859 nez unicode) -> recode ..ISO_8859-2 text_orig.txt
%  hexdump -b text_orig.txt > text.bin
%  sed -i 's/^\{8\}//' text.bin
%  sed -i 'N;$!P;$!D;$d' text.bin
%  odstranit posledni (predposledni) radek pokud je neuplny (octave potrebuje z textu vytvorit matici, takze kazdy sloupec i radek musi byt uplny)
close all
clear all
more off

soubor='text_cely2';

cmd1 = sprintf('if [ $(file text_cely2.txt|grep -c ISO) -eq 0 ] ; then recode ..ISO_8859-2 %s.txt ; fi ', soubor);
cmd2 = sprintf('hexdump -b %s.txt > %s.bin', soubor, soubor);
cmd3 = sprintf("sed -i 's/^........//' %s.bin", soubor);
cmd4 = sprintf("sed -i 'N;$!P;$!D;$d' %s.bin", soubor);
prikaz = strcat(cmd1,';', cmd2,';', cmd3,';', cmd4);
system(prikaz);

text_cely = load(strcat(soubor,'.bin'));
[m,n] =size(text_cely);
delka_c = m*n;
tc = reshape(text_cely',delka_c,1);

kolik_casti = 10;
delka_h = round(delka_c / kolik_casti)

prvne_korelaci='ano';
posun = delka_h; % o kolik znaku se posunout v prohledavanem souboru s kazdou iteraci
korelace=zeros(kolik_casti);

rk=1;
for k=1:posun:delka_c	%vyber porovnavaneho bloku textu
  if k+delka_h > delka_c
    break;
  end
  th = tc(k:k+delka_h-1);
  if strcmp(prvne_korelaci,'ano')
    at = autocor(th);
    thf = fft(at) .* conj(fft(at));
  else
    thf = fft(th) .* conj(fft(th));
  end

  j=1;
  start=k+delka_h;
  for i=start:posun:delka_c	% prolezeni zbyvajiciho textu
    if i+delka_h > delka_c
      i = delka_c - delka_h;
    end

    pt = tc(i:i+delka_h-1);
    if strcmp(prvne_korelaci,'ano')
      ap = autocor(pt);
      ptf = fft(ap) .* conj(fft(ap));
    else
      ptf = fft(pt) .* conj(fft(pt));
    end
    korelace(j++,rk) = corrcoef(thf(2:end),ptf(2:end));
  %    fprintf('cislo bloku: %d\tkorelacni koeficient: %f\n', j, korelace(j-1));
  %  fprintf('%d ',pt(1:zobraz)');disp('');
  %  plot([th,pt])
    if j == kolik_casti
      break;
    end
  %  pause
  end

%    [y_max(rk),i_max(rk)] = max(korelace(:,rk));
%    fprintf('hledany text se nachazi v %.0f %% prohledavaneho textu\n',i_max(rk)/kolik_casti*100)
%  bar(korelace(:,rk))
%  pause
rk++;
end


%  bar(korelace)
surface(korelace(1:end-1,1:end-1));colorbar
[max_korelace_cast, index_cast] = max(korelace);
[max_korelace, index_hledana] = max(max_korelace_cast(1:end-1));
fprintf('nejvetsi shoda (%.3f) je mezi castmi %d a %d\n', max_korelace, index_hledana, index_hledana+index_cast(index_hledana))
fprintf('to je priblizne od znaku cislo: %d\t a znaku cislo: %d\n',(index_hledana-1)*delka_h, (index_hledana+index_cast(index_hledana)-1)*delka_h)
