Matlab 在多个文本文件中查找常用词并将其保存到新文本文件

Matlab 在多个文本文件中查找常用词并将其保存到新文本文件,matlab,Matlab,如果我有10-20个文本文件,每个文件至少包含4-5个单词,这些单词在所有文件中都很常见,那么如何获取这些单词并将它们保存到新的文本文件中。 我尝试了很多东西,因为我的文本文件一个接一个地出现,所以我无法计算文本文件的数量。有没有办法将文本分别保存到不同的单元格数组中,而不使用循环,然后查找常用词。 这是密码-- sdirectory='C:\Users\anurag\Desktop\anies\Annotations\'; textfiles=dir([sddirectory'*.eng'])

如果我有10-20个文本文件,每个文件至少包含4-5个单词,这些单词在所有文件中都很常见,那么如何获取这些单词并将它们保存到新的文本文件中。 我尝试了很多东西,因为我的文本文件一个接一个地出现,所以我无法计算文本文件的数量。有没有办法将文本分别保存到不同的单元格数组中,而不使用循环,然后查找常用词。 这是密码--

sdirectory='C:\Users\anurag\Desktop\anies\Annotations\';
textfiles=dir([sddirectory'*.eng']);
sdirectory1='C:\Users\anurag\Desktop\Animals\Images\';
imgfiles=dir([sddirectory1'*.jpg']);
num_of_files=长度(textfiles);
C=单元(文件的数量,1);
对于w=1:长度(文本文件)
file=[sdirectorytextfiles(w).name];
STR=导入数据(文件);
BL=cellfun(@lower,STR,'uni',0);
B=regexprep(BL,,'');
B(strcmp(B,,)=[];
tmp=regexp(B,“/”,“split”);
C{w}=[tmp{:}];
终止
式中=[];
对于j=1:长度(C)
file1=[sdirectory1 imgfiles(j.name];
file2=[sdirectorytextfiles(j).name];
if-find(strcmp(C{j},'alligator'))
其中=[where num2str(j)'.eng'];
disp(文件2);
终止
终止

file2
变量将显示匹配文本文件到文本的路径
alligator
。但它不会存储路径,而是在新循环开始时覆盖路径。因此,如何分别存储每个路径,以便分别访问文本文件中的数据并在其中查找常用单词。

您应该首先读取正在使用的文件,并将这些单词存储为包含字符串的单元格数组。然后,您应该成对地比较单元数组,并成对地比较结果,直到得到单个单元数组为止

如果您有四个文件,并且(A、B、C、D)是文件中的四个单词单元数组,那么您应该比较A和B(结果是AB)、C和D(结果是CD),然后您应该比较AB和CD,以获得所有四个文件中的最后一个单词单元数组

一个例子

basedir = '';
files = dir([basedir '*.eng']);
filenames = strcat({basedir}, {files.name});
现在,
filenames
将保留您要处理的所有文件的路径。然后,您应该编写一个函数,在给定路径的情况下打开文件并在文件中创建一个单词单元格数组,让我们调用此函数
read\u my\u 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

请注意,您需要确保
numel(单词列表)
为偶数或1。

能否显示您尝试过的内容?因此,您希望读取一个文本文件,从中创建一个单词列表,然后将此单词列表写入一个新文件?根据我的问题,我希望在匹配后找到文本文件中的常用单词,然后将这些单词写入新的文本文件。至少有两个文本文件可以找到常用单词,而不仅仅是一个文件。我会使用“strsplit”将每个文件的内容连接到单独的单元格数组中;将它们放入一个较大的单元数组中,然后使用一个循环对这个较大的单元执行操作,该循环包含:c{i}=find(strcmp(c{i},c{i-1})),其中每个c{i}是对应于每个文件的单元,i从2到#个文件运行。在这个过程结束时,c{#files}将是所需的单元格数组。但为此,我有来自不同文件的两个字符串,但我被
file2
变量卡住了,该变量会在每次出现新路径时覆盖路径。如何解决这个问题。先生,我可以照你说的做,但是如何将路径单独存储在file2变量中,这样它就不会被再次覆盖,因为这将有助于找到有多少路径。然后我可以访问它们,并可以在文件中找到常用词。
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
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