2016-04-29 15 views
1

Ich versuche ein Schwein-Skript zu schreiben, das alle Zeichen (Sonderzeichen und Buchstaben) zählt und die Zählung jedes Zeichens getrennt angibt. Ich habe versucht, das folgende Skript zu verwenden, aber es zählt nur Buchstaben, enthält aber keine Sonderzeichen wie? und :. Bitte helfen Sie!Schweineschrift zum Zählen von Zeichen

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 meine Antwort, ich habe erklärt, warum einige Zeichen nicht gezählt werden und wie man sie zählt. –

Antwort

0

Gerade '(.+)' anstelle von '\\w+' verwenden und es wird Ihnen eine Zählung aller Interpunktion und Alphabete in der Datei geben.

Beispiel:

Datei: [cat a.txt]

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

Code:

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'; 

Ausgang: 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

Danke ani, Nur Problem ist, ich bekomme nicht die Zählung für ','. Was soll ich tun, um das ',' zu notieren? – user5355171

+0

@ user5355171 sollten Sie ',' auch während der Verwendung von '(. +)' Bekommen. Oder möchten Sie nur Alphabete und Komma finden? –

+0

In Ihrer Ausgabe kann ich auch die ',' Anzahl sehen, die nach Lets ist, – user5355171

0

Der Grund, warum Sie einige der Sonderzeichen nicht erhalten ist aufgrund der Tatsache, dass TOKENIZE Leerzeichen, doppelte Anführungszeichen ("), Koma (,) Klammern (()), Stern (*) als Trennzeichen verwendet.

Also, wenn Sie TOKENIZIEREN auf (Chararray) $ 0) die Token-Separatoren sind verloren und nicht berücksichtigt.

Also mit Ani Menon Beispieldaten, das Skript und die Ausgabe unten.

Eingangs

"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

Output

Verwandte Themen