2016-04-29 15 views
1

すべての文字(特殊文字と文字)を数え、各文字の数を別々に与えるブタスクリプトを作成しようとしています。私は以下のスクリプトを使用しようとしていますが、文字は数えますが、のような特殊文字は含まれていません。と:。助けてください !文字を数えるブタスクリプト

A = load 'pigfiles/p.txt'; 
B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word; 
C = filter B by word matches '\\w+'; 
D = foreach C generate flatten(TOKENIZE(REPLACE(word,'','|'), '|')) as letter; 
E = group D by letter; 
F = foreach E generate COUNT(D), group; 
store F into 'pigfiles/wordcount'; 
+0

S ee私の答えは、私はいくつかの文字がカウントされない理由とそれらを数える方法を説明した。 –

答えて

0

だけ'\\w+'の代わりに'(.+)'を使用し、それはあなたのファイル内のすべての句読点やアルファベットのカウントを与えます。

例:

ファイル:[cat a.txt]

"HI" 
Lets try using some punctuations!? How? Why!? 
Lets, just; do this!! 

コード:

A = load 'a.txt'; 
B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word; 
C = filter B by word matches '(.+)'; 
D = foreach C generate flatten(TOKENIZE(REPLACE(word,'','|'), '|')) as letter; 
E = group D by letter; 
F = foreach E generate COUNT(D), group; 
store F into 'pigfiles/wordcount'; 

出力:cat part-r-00000

4  ! 
1  ; 
3  ? 
2  H 
1  I 
2  L 
1  W 
1  a 
1  c 
1  d 
3  e 
1  g 
2  h 
3  i 
1  j 
1  m 
3  n 
4  o 
1  p 
1  r 
7  s 
7  t 
4  u 
1  w 
2  y 
+0

ありがとうございましたani、問題は私が '、'のカウントを取得していません。 '、'をカウントするにはどうすればいいのですか – user5355171

+0

@ user5355171 '(。+)'を使っている間も '、'を得るべきです。またはアルファベットとカンマのみを検索したいですか? –

+0

あなたの出力にも私は '、'の後にあるカウントを見ることができます – user5355171

0

理由ます特殊文字の一部が得られないのは、TOKENIZEが区切り文字としてスペース、二重引用符( ")、昏睡(、)括弧(())、星(*)を使用しているためです。

TOKENIZE on(chararray)$ 0を使用すると、トークンセパレータが失われ、説明されません。

Ani Menonのサンプルデータを使用して、以下のスクリプトと出力を行います。

入力

"HI" 
Lets try using some punctuations!? How? Why!? 
Lets, just; do this!! 

PigScript

A = LOAD 'test5.txt'; 
B = FOREACH A GENERATE FLATTEN(TOKENIZE(REPLACE((chararray)$0,'','|'), '|')) AS letter; 
C = FILTER B BY letter != ' '; 
D = GROUP C BY letter; 
E = FOREACH D GENERATE COUNT(C.letter), group; 
DUMP E; 

出力

Output

関連する問題