在matlab中应用差集设置操作?

时间:2015-03-17 06:36:59

标签: matlab

我从文本文件中提取了23个句子,并且从同一文本文件中提取了6个最常用的单词。我已经实现了逻辑,显示哪个单词出现在哪个单词中,哪个单词出现在哪个单词中,其他一组频繁单词,其中代码和输出后面的句子说明了逻辑:

OccursTogether = cell(length(Out1));
for ii=1:length(Out1)
for jj=ii+1:length(Out1)
OccursTogether{ii,jj} = intersect(Out1{ii},Out1{jj});
end
end
celldisp(OccursTogether)

Out1是一维数组,它显示单词,并且在哪些句子中出现数字,我已经在相交处应用了setdiff,但没有得到我需要的结果。句子存储在句子变量中,如下所示:

sentences = regexp(F,'\S.*?[\.\!\?]','match')
char(sentences)

以下一起发现我第一个单词出现在第5个句子中,第1个单词出现在第5个句子中的第2个单词,依此类推......:

occurstogether{1,1} = 5
occurstogether{1,2} = 5 6
occurstogether{1,3} = 6 9 20 and so on....

我想要做的是找出这些词不会像以下一样发生在哪里:

notogether{1,1} = 1 2 3 4 6 7,...23
notogether{1,2} = 1 2 3 4 7,...23
notogether{1,3} = 1 2 3 4 5 7 8 10...22

记住这些1,2,3,... 23是一对单词出现在一起的句子数量,并且它们不会一起出现,输出显示为空{}

1 个答案:

答案 0 :(得分:0)

试试这个:

occurstogether{1,1} = [5];
occurstogether{1,2} = [5 6];
occurstogether{1,3} = [6 9 20];
N = 23;

result = cellfun(@(x) setdiff(1:N, x), occurstogether, 'uniformoutput', 0);

根据setdiff's documentationresult的每个单元格都将包含已排序的向量,无重复。如果您想要更改该行为,请参阅setdiff的选项。