2016-04-14 9 views
0

かなり大きな文書を読んで、そこからN-gram(N単語の連続したシーケンス)を抽出したいと思います。私は周波数の昇順でソートしたいと思う。私はこれが単語数の拡張だと理解していますが、私はPysparkでこれを行う方法がわかりません。どんな助けもありがとうございます。このアプローチのPysparkでのNgram頻度ランキング

答えて

0

toolz

from toolz.curried import sliding_window 
from operator import add, itemgetter 

rdd = sc.textFile("README.md") 
tokens = rdd.map(str.split) 

counts = (tokens 
    .flatMap(sliding_window(3)) 
    .map(lambda x: (x, 1)) 
    .reduceByKey(add)) 

counts.top(3, key=itemgetter(1)) 

## [(('command,', 'which', 'should'), 2), 
## (('on', 'how', 'to'), 2), 
## (('Please', 'refer', 'to'), 2)] 

との一つの可能​​な解決策の制限はかなりいつもと同じである - 文書が複数行にまたがる場合は、nグラム得ることはありませんので、それは、ライン毎に動作しますライン境界を越えて広がる。

行番号と位置を一列に並べたり、wholeTextFilesを使用して修正することができます。