如果我有10-20个文本文件,并且每个文件至少包含4-5个单词,那么如何获取这些单词并将它们保存到新的文本文件中。 我已经尝试了很多东西,因为我的文本文件是逐个出现的,所以我无法计算文本文件的数量。有没有办法将文本分别保存到不同的单元格数组而不使用循环,然后找到常用的单词。 这是代码 -
sdirectory = 'C:\Users\anurag\Desktop\Animals\Annotations\';
textfiles = dir([sdirectory '*.eng']);
sdirectory1 = 'C:\Users\anurag\Desktop\Animals\Images\';
imgfiles = dir([sdirectory1 '*.jpg']);
num_of_files = length(textfiles);
C = cell(num_of_files,1);
for w = 1:length(textfiles)
file = [sdirectory textfiles(w).name];
STR = importdata(file);
BL = cellfun(@lower,STR,'uni',0);
B = regexprep(BL,'<.*?>','');
B(strcmp(B, '')) = [];
tmp = regexp(B, '/| ', 'split');
C{w} = [tmp{:}];
end
where = [];
for j = 1:length(C)
file1 = [sdirectory1 imgfiles(j).name];
file2 = [sdirectory textfiles(j).name];
if find(strcmp(C{j},'alligator'))
where = [where num2str(j) '.eng, '];
disp(file2);
end
end
file2
变量将显示将文本文件与文本alligator
匹配的路径。但它不会存储路径,但会在新循环开始时覆盖路径。因此,如何分别存储每个路径,以便分别访问文本文件中的存储数据,并在其中查找常用词。
答案 0 :(得分:0)
您应首先阅读您正在使用的文件,并将这些单词存储为包含字符串的单元格数组。然后你应该成对地比较单元格数组并比较成对和儿子的结果,直到你有一个单元格数组。
如果您有四个文件且(A,B,C,D)是文件中的四个单元格单词数组,则应比较A和B(结果为AB),C和D(结果为CD),然后你应该比较AB和CD来得到所有四个文件中最后一个单词数组。
一个例子
basedir = '';
files = dir([basedir '*.eng']);
filenames = strcat({basedir}, {files.name});
现在filenames
将保留您要处理的所有文件的路径。然后,您应该编写一个函数,给定一个路径打开文件并在文件中创建单词的单元格数组,让我们调用此函数read_my_data
。
wordlists = {};
for i = 1:numel(filenames)
wordlists{i} = read_my_data(filenames{i});
end
如果您有两个字符串A
和B
的单元格数组,那么您可以通过对它们进行排序找到重复项,然后遍历数组。
function C = duplicates(A,B)
i = 1; j = 1; k = 1;
C = {};
A = sort(A);
B = sort(B);
while i <= numel(A) & j <= numel(B)
switch strcmp(A{i}, B{i})
case -1
i = i + 1;
case 0
C{k} = A{i};
i = i + 1;
j = j + 1;
k = k + 1;
case 1
j = j + 1;
end
end
然后,您可以循环wordlists
并找到重复项
while numel(wordlists) > 1
j = 1
tmp = {};
for i = 1:2:numel(wordlists)-1
tmp{j} = duplicates(wordlists{i}, wordslists{i+1});
j = j + 1;
end
wordlists = tmp;
end
请注意,您需要确保numel(wordlists)
为偶数或1。