文本分析器Matlab

时间:2014-12-14 20:41:15

标签: matlab text analyzer

我正在使用Matlab编写一个文本分析器,它读取.txt文件并找出它在说什么(主题),假设我有一个单词列表:{{ 1}} 在阅读我的文本文件时,我想查找它是否包含这些单词并显示类似“此文件谈论SVM ...”;否则它没有。 我真的很困惑,我试着得到单词freq,现在我得到了任何帮助! 我的代码:

{'SVM','Linear','SVMTRAIN','Vector', 'Support'..};

文本文件示例:

fid = fopen('Test.txt');
s=textscan(fid,'%s')
fclose(fid);
str=s{:}

[unique_words,jj,kk] = unique(str)
freq = hist(kk,(1:numel(jj))).'
d = [unique_words num2cell(freq)]  

1 个答案:

答案 0 :(得分:1)

这是使用正则表达式执行此操作的方法。我确信有一种更有效的方法,但我使用循环检查文本文件中的匹配项与单词列表中的每个单词。我希望你的申请不会太久。无论如何这里是代码:

clear
clc

%// Generate dummy text document, equivalent to what you would get after
%// the call to s{:}.
str = {'Blablabla';'SVM';'SuPPorT';'Vector';'DummyWord';'Hello there';'SVM';'Vector';'Support'};


WordList = cell(2,5);
WordList(1,:) = {'SVM','Linear','SVMTRAIN','Vector', 'Support'};

for k = 1:size(WordList,2)
   %// Use regular expressions to match each word in your list in the text
   CheckWord = regexp(str,WordList{1,k},'match');

   %// Find indices in which there is a match in the text.
   MatchCells = ~cellfun(@isempty,CheckWord);

   %// Count the number of occurences for future reference.
   NumOccurences = numel(find(MatchCells));

   %// Assign number of occurences as 2nd row of WordList cell array
   WordList{2,k} = num2str(NumOccurences);

end
%// Display WordList
WordList

WordList看起来像这样:

WordList = 

    'SVM'    'Linear'    'SVMTRAIN'    'Vector'    'Support'
    '2'      '0'         '0'           '2'         '1'      

因此,很容易显示每个单词的匹配数。

希望有所帮助!

修改 以下是关于Matchcells和NumOccurences的一些补充说明:

1)MatchCells返回逻辑值(即0或1)的向量,该向量对应于(1)或不是(0)单元阵列中的给定单元是否为空。这里有问题的单元格数组为CheckWord,对于上面定义的单词列表中的每个单词,我们使用regexp检查它们在str中的位置。使用cellfun对整个单元阵列进行操作,相当于for循环。例如,在上面的循环中,对于k = 1,MatchCells看起来像这样:

MatchCells =

     0
     1
     0
     0
     0
     0
     1
     0
     0

因此,我们看到CheckWord的第2和第7个条目对于列表中的第一个单词(SVM)不为空。请注意,我使用~cellfun(...)来表示非空的单元格。对于空单元格,我会使用cellfun(...)。然后NumOccurences表示MatchCells中1的数量,这里2表示单词SVM的情况。

为了更清楚,find(MatchCells)返回单元格数组中与匹配项对应的索引。如果没有匹配,则答案为零。使用numel(find(MatchCells))为我们提供了find命令产生的数组中的元素数,从而给出匹配数。

如果你想更好地看到每一行的作用,请删除末尾的分号(;),以便在命令窗口中获得输出。