500x1 のセル配列があり、各行には特定の単語が含まれています。単語の出現回数を数えて表示し、各出現率も表示するにはどうすればよいですか。
例えば
これらの単語の出現は次のとおりです。
Ans =
200 Green
200 Red
100 Blue
これらの単語の割合:
Ans =
40% Green
40% Red
20% Blue
500x1 のセル配列があり、各行には特定の単語が含まれています。単語の出現回数を数えて表示し、各出現率も表示するにはどうすればよいですか。
例えば
これらの単語の出現は次のとおりです。
Ans =
200 Green
200 Red
100 Blue
これらの単語の割合:
Ans =
40% Green
40% Red
20% Blue
strcmpiはセル行列を要素ごとに比較するという考え方です。これを使用して、入力名を入力内の一意の名前と比較できます。以下のコードを試してください。
% generate some input
input={'green','red','green','red','blue'}';
% find the unique elements in the input
uniqueNames=unique(input)';
% use string comparison ignoring the case
occurrences=strcmpi(input(:,ones(1,length(uniqueNames))),uniqueNames(ones(length(input),1),:));
% count the occurences
counts=sum(occurrences,1);
%pretty printing
for i=1:length(counts)
disp([uniqueNames{i} ': ' num2str(counts(i))])
end
パーセンテージの計算はあなたにお任せします。
まず、データ内の一意の単語を見つけます。
% set up sample data:
data = [{'red'}; {'green'}; {'blue'}; {'blue'}; {'blue'}; {'red'}; {'red'}; {'green'}; {'red'}; {'blue'}; {'red'}; {'green'}; {'green'}; ]
uniqwords = unique(data);
次に、データ内でこの一意の単語の出現を見つけます。
[~,uniq_id]=ismember(data,uniqwords);
次に、それぞれの一意の単語が見つかった回数を数えます。
uniq_word_num = arrayfun(@(x) sum(uniq_id==x),1:numel(uniqwords));
パーセンテージを取得するには、データ サンプルの合計数で割ります。
uniq_word_perc = uniq_word_num/numel(data)
これが私の解決策です。かなり速いはずです。
% example input
example = 'This is an example corpus. Is is a verb?';
words = regexp(example, ' ', 'split');
%your program, result in vocabulary and counts. (input is a cell array called words)
vocabulary = unique(words);
n = length(vocabulary);
counts = zeros(n, 1);
for i=1:n
counts(i) = sum(strcmpi(words, vocabulary{i}));
end
%process results
[val, idx]=max(counts);
most_frequent_word = vocabulary{idx};
%percentages:
percentages=counts/sum(counts);
明示的な fors を使用しないトリッキーな方法..
clc
close all
clear all
Paragraph=lower(fileread('Temp1.txt'));
AlphabetFlag=Paragraph>=97 & Paragraph<=122; % finding alphabets
DelimFlag=find(AlphabetFlag==0); % considering non-alphabets delimiters
WordLength=[DelimFlag(1), diff(DelimFlag)];
Paragraph(DelimFlag)=[]; % setting delimiters to white space
Words=mat2cell(Paragraph, 1, WordLength-1); % cut the paragraph into words
[SortWords, Ia, Ic]=unique(Words); %finding unique words and their subscript
Bincounts = histc(Ic,1:size(Ia, 1));%finding their occurence
[SortBincounts, IndBincounts]=sort(Bincounts, 'descend');% finding their frequency
FreqWords=SortWords(IndBincounts); % sorting words according to their frequency
FreqWords(1)=[];SortBincounts(1)=[]; % dealing with remaining white space
Freq=SortBincounts/sum(SortBincounts)*100; % frequency percentage
%% plot
NMostCommon=20;
disp(Freq(1:NMostCommon))
pie([Freq(1:NMostCommon); 100-sum(Freq(1:NMostCommon))], [FreqWords(1:NMostCommon), {'other words'}]);