2016-04-14 19 views
0

Ich möchte ein ziemlich großes Dokument lesen und extrahieren N-Gramm (Kontinuierliche Folge von N Worten) daraus. Ich möchte es auch in aufsteigender Reihenfolge der Häufigkeit sortieren. Während ich verstehe, dass dies eine Erweiterung der Wortzahl ist, bin ich nicht sicher, wie man das in Pyspark macht. Jede Hilfe wird geschätzt.Ngram Frequenz-Ranking in Pyspark

Antwort

0

Eine mögliche Lösung mit 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)] 

Einschränkung dieses Ansatzes ist so ziemlich das gleiche wie üblich - es für Zeile auf der Leitung arbeitet so, wenn Dokumente über mehrere Zeilen erstreckt werden Sie nicht n-Gramm erhalten die über Liniengrenzen gespannt ist.

Es ist möglich, dies zu korrigieren, indem Sie die Zeilennummer und Position in Zeile verfolgen oder wholeTextFiles verwenden.