node.jsで、タグ付けツール
前回は、node-naivebayes-simpleの簡単なサンプルを実行してみた。
機械学習は、いかに質のよい学習データを作るかが重要だと思う。
自分でデータを作るのはメンドクサイので、はてブからデータを頂くことにした。
はてブのタグ一覧から、タグとWebページのタイトルを取得して、学習させてみる。
node.jsのプラグインで、Webページのクローラは、いろいろあるようだけれど、今回はjqueryプラグインを使ってみた。
だって、jqueryに慣れているんだもん。
$ npm install -g jquery $ npm ln jquery
で、書いたのが下のようなコード
var Train = require('naivebayes-simple').Train; var querystring = require("querystring"); var $ = require('jquery'); var http = require('http'); var options = { host: 'b.hatena.ne.jp', port: 80, path: '/t' }; var html = ''; http.get(options, function(res) { res.on('data', function(data) { html += data; }).on('end', function() { $(html).find('.curvebox-body ul li a').each(function(i){ var tag = $(this).text(); getBookmark(tag); }); }).on('error', function (error) { console.log(error); }); }); function getBookmark(tag) { var http = require('http'); var html = ''; var q = querystring.stringify({q: tag}); var url = 'http://b.hatena.ne.jp/search/tag?' + q; http.get(url, function(res) { res.on('data', function(data) { html += data; }).on('end', function() { $(html).find('#search-result-lists ul li h3 a').each(function(i){ var name = $(this).text(); var url = $(this).attr('href'); //console.log(tag); //console.log(name); Train.train(name, tag); }); }); }).on('error', function (error) { console.log(error); }); } process.on('uncaughtException', function (err) { console.log('Caught exception: ' + err); });
動作させてみる。
しばらく動かしていると、mecabがエラーをはく。。
Caught exception: Error: Failed to create MeCab
どうやら、mecabの初期化に失敗しているようだ。
node-mecab-bindingでは、毎回mecabのインスタンスを初期化しているのだろうか。。
お盆休みは、実家である徳島に帰省していて、夏は、阿波踊りがある。
その阿波踊りの時間になってしまったので、詳しい調査はまた今度にするとしよう。
と思って、放置し、今に至る。。
学習データがいまいちなので、あまり賢くないけれど、一応、以下の様なコードで与えられたテキストに対して、タグをつけることができる。
var Classifier = require('naivebayes-simple').Classifier; Classifier.on('classified', function(arg) { var category = arg[0]; //var originalDoc = arg[1].substring(0, 20); var originalDoc = arg[1]; console.log(originalDoc + ' => category: ' + category); }); var text = process.argv[2]; Classifier.classify(text);
このコードをcl.jsという名前で保存して、node.jsで実行する。
$ node cl.js 今日も晴天なり 今日も晴天なり => category: akb48
なんで、AKBやねん。