2014-04-27 122 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

相關問題