从文本文件(八度)创建一组带状疱疹

时间:2015-12-13 02:20:15

标签: matlab octave minhash

我正在使用Octave / Matlab创建MinHash和LSH。但是我想从给定的文档中获取一个k大小的带状组合(单元格数组或数组),我不知道该怎么做。

我现在拥有的是这个简单的代码:

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

这将创建一个单元格数组,其中包含文档每行的所有单词,这是我正在尝试执行的函数的参数。

1 个答案:

答案 0 :(得分:0)

这段代码可以解决问题。 它从单元格数组中读取并创建指定大小的带状疱疹(n-gram)。

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
}