Създайте набор от херпес зостер от текстов файл (октава)

Създавам MinHash и LSH в Octave/Matlab. Но се опитвам да получа набор (клетъчен масив или масив) от херпес зостер с размер k от даден документ и не знам как да го направя.

Това, което имам в момента, е този прост код:

doc = fopen(document);
i = 1;
while (! feof(doc) )
  txt{i} = strread(fgetl(doc), '%s');
  i++;
endwhile
fclose(doc);

Това създава клетъчен масив с всички думи от всеки ред на документа, което е аргумент на функцията, която се опитвам да направя.


person nkt09    schedule 13.12.2015    source източник
comment
И какъв е проблемът или въпросът?   -  person Andy    schedule 13.12.2015
comment
Проблемът е създаването на MinHash и хеширане, чувствително към местоположението, за да намеря подобни елементи (използвайки сходството на Jaccard), и за това трябва да създам набор от херпес зостер от документ, който е даден чрез аргумент. Искам да върна комплект с шингли с k-размер, например шингла 5 означава, че всяка клетка ще има 5 думи.   -  person nkt09    schedule 13.12.2015
comment
Моля, обяснете какво имате предвид под термина херпес зостер в този контекст. Конкретен пример за вход/изход би помогнал.   -  person Nick J    schedule 14.12.2015


Отговори (1)


Този код може да свърши работа. Той чете от клетъчен масив и създава херпес зостер (n-грамове) с посочения размер.

function S = shingles(txt, shingle_size)
  l = size(txt)(2) - shingle_size + 1;
  for i = 1:l
    t='';
    for j = i:(i + shingle_size - 2)
      t = strcat(t,txt{j},' ');
    end
    t = strcat(t, txt{i + shingle_size - 1});
    S{i} = t;
  end

Можете да тествате кода със следния пример:

txt={'a','b','c'}
shingles(txt, 2)
S =
{
  [1,1] = ab
  [1,2] = bc
}
person mariolpantunes    schedule 02.12.2017