Underscore.jsでMapReduce

Underscore.jsを使うとMapReduce(みたいな書き方)ができる。
おなじみの単語を数えるやつをやってみる。単語の分割はTinySegmenterで。


参照記事:http://www.asahi.com/national/update/1101/TKY201010310358.html

var lines = new Array();
lines.push("さっぽろテレビ塔を運営する「北海道観光事業」(札幌市中央区)で売上金などを着服した疑いが強まったとして、");
lines.push("北海道警は1日にも、いずれも30代の同社旅行本部の元経理担当主任=解雇=と元法人担当社員=同=の2人について、");
lines.push("業務上横領の疑いで立件する方針を固めた。捜査関係者への取材でわかった。");
lines.push("同社は、年間約40万人が訪れるテレビ塔の運営のほか、土産物販売や旅行代理業なども展開。札幌市が筆頭株主の第三セクターで、歴代社長には同市OBが天下り、");
lines.push("同市副市長も非常勤取締役を務めていた。同社では、ほかにも旅行本部の元社員4人が着服などを繰り返したとして解雇されており、道警はこれらの横領容疑も調べる方針だ。");
lines.push("捜査関係者によると、元主任は経理担当だった2003〜09年、取引先に支払ったようにみせかけたり、営業担当者が集金してきた旅行代金を着服したりして計約500万円を横領した疑いがある。");
lines.push("元社員は04〜08年、自ら集金した旅行代金など計約300万円を横領した疑いが持たれている。");
lines.push("元主任と元社員は着服を隠すため、ほかの売上金で穴埋めしたり、帳簿上の操作を繰り返したりするなど、それぞれ計2700万〜2800万円の不正経理をしていたという。");
lines.push("道警はこのうち、飲食など私的に流用したと裏付けられた分について立件する。");
lines.push("元社員の横領は04年に発覚。08年に諭旨解雇にした際も公表しなかった。しかし、09年に札幌市に届いた匿名の投書で発覚。");
lines.push("その後の社内調査などで、元主任や元社員4人の横領などが次々と明らかになった。社内調査に対し、元主任は着服金を生活費や株取引などに、");
lines.push("元社員は消費者金融への返済や飲食費などに使用したと説明したという。");

var segmenter = new TinySegmenter();

var counts = _(lines).chain()
.map(function(i) {
	return segmenter.segment(i)
})
.flatten()
.reduce(function(counts, word) {
	console.log(word);
	counts[word] = (counts[word] || 0) + 1;
	return counts;
}, {}).value();

for (var key in counts)
{			
	console.log(key + ":" + counts[key]);
}

実行結果

さっぽろ:1
テレビ:2
塔:2
を:12
運営:2
する:4
「:1
北海道:1
観光:1
事業:1
」(:1
札幌:3
市:3
中央:1
区:1
):1
で:8
売上:2
金:3
など:9
着服:5