我正在使用Octave / Matlab创建MinHash和LSH。但是我想从给定的文档中获取一个k大小的带状组合(单元格数组或数组),我不知道该怎么做。
我现在拥有的是这个简单的代码:
doc = fopen(document);
i = 1;
while (! feof(doc) )
txt{i} = strread(fgetl(doc), '%s');
i++;
endwhile
fclose(doc);
这将创建一个单元格数组,其中包含文档每行的所有单词,这是我正在尝试执行的函数的参数。
答案 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
}