2011年6月23日木曜日

Groovyでword count

Groovyでword countをやってみました。
ただ、まあ普通にカウントするだけでは面白く無いので、
@fumokmmさん『今日から始めるGPars』を参考にして、
並列処理でやってみました。

以下、ソースコード

def count(arg){
    withPool{
        arg.parallel
            .map{[it, 1]}
            .groupBy{it[0]}.getParallel()
            .map{it.value=it.value.size();it}
            .sort{-it.value}
            .collection
    }
}

count(words.replaceAll("-\n", "").replaceAll(/[..:.,]/,"").split(/[\s:]/)).each{
    println it
}


実際のカウントの部分のreplaceAll(String, String)は対象となる文章(GoogleのMapReduce論文)に合わせて、適宜文字の調整をするために行っています。

で、これの結果の上位の文字は次のとおりです。
the=484
of=312
a=213
to=197
and=170
is=122
The=104
in=97
MapReduce=87
for=85
that=79
)=76
data=72
reduce=68
(=63
by=60
map=59
on=58
output=58
are=56
function=49
tasks=48
task=48
machines=45
as=41
input=40
it=40
from=38
this=34
computation=33


小文字、大文字の変換をやっていないので、ちょっと微妙ですかね。
また、カッコの数も違っているので、なんか微妙です。

ちなみに、実行速度は以下の条件で、
Intel Xeon 3460
RAM 8.00GB
Groovy 1.8.0
Java 1.6.0-24
約1s程度でした。

0 件のコメント:

コメントを投稿