2014-04-27 75 views
0

如果我有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

能告诉你,你已经尝试了什么? – Silas

+0

是的,我可以表演。 – user3416063

+0

所以你想读一个文本文件,从它创建一个单词列表,然后将这个单词列表写入一个新的文件? – Silas

回答

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

+0

但为此我有两个来自不同文件的字符串,但是,我被卡在'file2'变量,它会在每次新路径到来时覆盖路径。如何解决这个问题。 – user3416063

+0

主席先生,我可以照你说的做,但是如何将路径分别存储在file2变量中,以便它不能再被覆盖,因为这有助于找出有多少路径。然后我可以访问它们,并可以在文件中找到常用词。 – user3416063

相关问题