2012-03-22 102 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的&時。