2012-03-22 13 views
2

文字列内の各単語の頻度を計算します。そのためには、文字列を単語の配列(行列)に変換する必要があります。MATLAB文字列処理

例えば"Hello world, can I ask you on a date?"を取り、その後、私は、各エントリの上に移動して、特定の単語のすべての出現をカウントすることができ

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

にそれを回します。

単なる文字の配列ではなく、MATLABで単語の配列(行列)を作る方法はありますか?

+0

Matlabのfyiは、文字列のセルと呼ばれ、 '{'Hello' 'world、' '' '' '' '' '' '' ''日付? '} '。また、yukのソリューションは「日付」ではなく「日付」を返すので、より適していると思います。 – bdecaf

答えて

4

regexp少し簡単です:

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

\wここ(アンダースコアを含む)の言葉に表示できる任意のシンボルを意味します。

最後の疑問符は含まれないことに注意してください。あなたは実際に言葉を数えるためにそれを必要としますか?それを行うには

+0

この場合、「一致」引数は何を意味しますか? – NoobDev4iPhone

+0

デフォルトでは、regexpは一致する文字列の位置を返します。このパラメータは一致を返すためのものです。 – yuk

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

+0

これについて考えると、regexp(s、 '([^ \] [^ \] *)'、 'match')は不必要に複雑です。 regexp(s、 '[^] *'、 'match')はあなたが望むことをします。正規表現[^] *はスペースではない任意の数の文字にマッチし、matlab関数regexpはこれらのマッチをセル配列として返します。応答が編集されます。 – dranxo

0

もう一つの方法は、このようなものです:

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

すなわち、 Java Stringオブジェクトを作成し、そのメソッドを使用して作業を行い、次に文字列のセル配列に変換し直します。必ずしもこの単純な仕事をする最良の方法ではありませんが、Javaは文字列処理メソッドの豊富なライブラリを持っています&クラスは便利です。

帽子を落としたときにMatlabがJavaに切り替える機能は、例えば&というXMLを解析するときに便利なことがあります。