2012-03-22 104 views
2

我想计算字符串中每个单词的频率。为此,我需要将字符串转换为单词的数组(矩阵)。MATLAB字符串处理

例如采取"Hello world, can I ask you on a date?"并把它变成

['Hello' 'world,' 'can' 'I' 'ask' 'you' 'on' 'a' 'date?'] 

然后我就可以去了每个条目和计数特定单词的每一次出场。

有没有一种方法可以在MATLAB中创建一个数组(矩阵)的单词,而不是只包含字符数组?

+0

只是在Matlab中你所要求的称为“字符串单元格”,写成:'{'Hello''world',''''''''''''' ''约会?'}'。另外我认为yuk的解决方案会更合适,因为它会返回'date'而不是'date?'。 – bdecaf 2012-03-22 08:59:53

回答

4

这里是简单regexp一点:

words = regexp(s,'\w+','match'); 

\w在这里意味着可以出现在字(包括下划线)任何符号。

请注意,最后一个问号不会被包括在内。你需要它来计算单词吗?

+0

在这种情况下,“匹配”参数意味着什么? – NoobDev4iPhone 2012-03-22 07:35:13

+0

默认情况下,regexp返回匹配字符串的位置。所以这个参数是返回匹配。 – yuk 2012-03-22 12:26:36

4

正则表达式

s = 'Hello world, can I ask you on a date?' 
slist = regexp(s, '[^ ]*', 'match') 

产量

slist = 

'Hello' 'world,' 'can' 'I' 'ask' 'you' 'on' 'a' 'date?' 
+1

你可以详细说明'([^ \] [^ \] *)'的含义吗? – NoobDev4iPhone 2012-03-22 07:32:55

+0

现在我想到了,regexp(s,'([^ \] [^ \] *)','match')是不必要的复杂。 regexp(s,'[^] *','match')做你想做的。正则表达式[^] *匹配任意数量的非空格字符,matlab函数regexp将这些匹配作为单元格数组返回。响应被编辑。 – dranxo 2012-03-22 17:37:48

0

另一种方式来做到这一点是这样的:

s = cell(java.lang.String('Hello world, can I ask you on a date?').split('[^\w]+')); 

即通过创建一个Java String对象并使用它的方法来完成工作,然后再转换回一个字符串数组。不一定是最简单的工作,但Java有丰富的字符串处理方法库,可以派上用场。

Matlab有时候会切换到Java的能力有时会派上用场 - 例如,在分析编写XML的&时。