凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

MeCab で非同期に形態素解析する node-mecab-async を作って npm に登録してみた

はじめに

node.js の mecab addon 作った - 凹みTipsというタイトルで前に MeCab の Node.js モジュールを作成しました。MeCab モジュールは他の人の手で作られたものが npm や github に幾つか上がっていますが、node-waf でコンパイルする古いものだったりします。

なので、非同期アドオンの作成も覚えたのと、初 npm 登録もしてみたいと思い、ちょっと作ってみました。

インストール

$ npm install mecab-async

コンパイルには mecab はもちろんのこと、boost も必要です。

使い方

コード
var MeCab = new require('mecab-async')
  , mecab = new MeCab()
;
mecab.parse('すもももももももものうち', function(err, result) {
	if (err) throw err;
	console.log(result);
});
結果
[ [ 'すもも', '名詞', '一般', '*', '*', '*', '*', 'すもも', 'スモモ', 'スモモ' ],
  [ 'も', '助詞', '係助詞', '*', '*', '*', '*', 'も', 'モ', 'モ' ],
  [ 'もも', '名詞', '一般', '*', '*', '*', '*', 'もも', 'モモ', 'モモ' ],
  [ 'も', '助詞', '係助詞', '*', '*', '*', '*', 'も', 'モ', 'モ' ],
  [ 'もも', '名詞', '一般', '*', '*', '*', '*', 'もも', 'モモ', 'モモ' ],
  [ 'の', '助詞', '連体化', '*', '*', '*', '*', 'の', 'ノ', 'ノ' ],
  [ 'うち', '名詞', '非自立', '副詞可能', '*', '*', '*', 'うち', 'ウチ', 'ウチ' ] ]

わかち書きもできます。

var MeCab = new require('mecab-async')
  , mecab = new MeCab()
;
mecab.wakachi('すもももももももものうち', function(err, result) {
	if (err) throw err;
	console.log(result);
});
結果
[ 'すもも', 'も', 'もも', 'も', 'もも', 'の', 'うち' ]

npm への登録

npm への登録はとても簡単でした。

$ npm adduser

をしてから、

$ npm publish

を登録したいモジュールのあるディレクトリで実行するだけです。
その際の package.json は以下の様な感じ。

{
	"name": "mecab-async",
	"version": "0.0.1",
	"author": {
		"name": "hecomi",
		"email": "info@hecomi.com"
	},
	"main": "mecab",
	"dependencies": {},
	"readmeFilename": "README.md",
	"description": "Asynchronous japanese morphological analyzer using MeCab.",
	"repository": {
		"type" : "git",
		"url": "http://github.com/hecomi/node-mecab-async.git"
	},
	"bugs" : {
		"mail" : "info@hecomi.com" ,
		"web" : "http://github.com/hecomi/node-mecab-async/issues"
	}
}

ミスったけどバージョンは上げたくないといった場合は、force オプションをつければ簡単に修正できます。

$ npm publish --force

おわりに

ついでに iRemocon の Node.js モジュール(node-iRemocon つくった - 凹みTips)も公開しておきました。

$ npm install iremocon

でいけます。

    • -

非同期アドオン既にあった…:

しかもこちらの方が出来がよさそうな気もしてちょっと凹んでます。。。すみません。