我从文本文件中提取了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是一对单词出现在一起的句子数量,并且它们不会一起出现,输出显示为空{}
答案 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 documentation,result
的每个单元格都将包含已排序的向量,无重复。如果您想要更改该行为,请参阅setdiff
的选项。