我想使用matlab命令提取每个句子中特殊字符的数量和元音的数量

时间:2013-11-07 21:02:49

标签: string matlab

我在Matlab中有一个单元格,其中有5个字符串,每个字符串都是一个句子,我想使用Matlab命令提取每个句子中特殊字符的数量和元音的数量。我该怎么做?

这是我的代码:

sentences={['Dogs are cool!'];['They love to have their bellies scratched!'];['They     love to run around and play in the grass.'];['Each normal year is equal to seven dog years.'];['Its sad when dogs die.']}
sentences1=length(sentences{1})
sentences2=length(sentences{2})
sentences3=length(sentences{3})
sentences4=length(sentences{4})
sentences5=length(sentences{5})
fprintf('There are %d, %d, %d, %d characters in each sentence respectively. ',     sentences1,sentences2,sentences3,sentences4,sentences5)

3 个答案:

答案 0 :(得分:2)

如果您将特殊字符定义为不是单词字符([a-z_A-Z0-9])而不是空格:

cellfun(@(x) numel(regexp(x,'[^\w\s]')),sentences)

在你的情况下,每个句子只有一个。如果您只想计算不是单词字符的字符,包括空格:

>> cellfun(@(x) numel(regexp(x,'[^\w]')),sentences)
ans =
     3
     7
    14
     9
     5

元音案例只是:

 cellfun(@(x) numel(regexpi(x,'[aeiou]')),sentences)

请注意,现在使用regexpi代替regexp来忽略大小写,但您也可以将模式扩展为'[AEIOUaeiou]'并使用普通regexp。根据您的心情,您也可以选择使用[aeiouy]

答案 1 :(得分:1)

对于元音:

vowels = 'aeiouAEIOU';
cellfun(@(s) sum(ismember(s,vowels)), sentences)

对于特殊字符,请执行相同的操作:

specialChar = '!?()-,;.'; % define your special characters
cellfun(@(s) sum(ismember(s,specialChar)), sentences)

答案 2 :(得分:0)

你可以试试像

这样的东西
vowels=['a'; 'e'; 'i' ;'o'; 'u'];
 Vowels_N=0;
 for ii=1:length(sentences)
     for jj=1:length(vowels)
         indx=find(vowels(jj),sentences{ii})
         Vowels_N=Vowels_N+length(indx);
     end
 end 

可能不是最有效的方式,可能是马车没有测试它只是在这里写 你可以为特殊字符做类似的事情