我在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)
答案 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
可能不是最有效的方式,可能是马车没有测试它只是在这里写 你可以为特殊字符做类似的事情