LoginSignup
1

posted at

形態素解析ツールMecabをNode + Typescriptで実装してみた

はじめに

PythonでMecabを使用している記事がほとんどだったため、Node + Typescript + mecabで実装してみた。
本記事の記載のコードはこちらにあるため、ご参考ください。

Mecabとは

MeCabはオープンソースの形態素解析エンジンである。
MeCabは形態素解析ツールの中でも知名度が高く、実行速度が早いという特徴がある。

Docker上にMecabをインストール

Dockerfile

Dockerfile
FROM node:12-slim

# mecabの導入
RUN apt-get update \
    && apt-get install -y \
    mecab \
    libmecab-dev \
    mecab-ipadic-utf8

WORKDIR /src

docker-compose.yml

docker-compose.yml
version: '3'
services:
  mecab-node:
    container_name: mecab-node
    build:
      context: ./
      dockerfile: Dockerfile
    tty: true # コンテナの起動永続化
    volumes:
      - ./src:/src

コンテナ内でmecabの動作確認

コンテナを起動する

$ docker-compose up -d

起動したコンテナに入る

$ docker exec -it mecab-node sh

コンテナ内でmecabを実行する

今回は、半角・全角を混合した「昔々、ある所にお爺さんとお婆さんとマイケルが居たそうですよ!!」を試した。

実行コマンド

$ mecab
  昔々、ある所にお爺さんとお婆さんとマイケルが居たそうですよ!!

実行結果

mecabでは半角記号、半角英数字はフリガナを振ってくれていないため、Node + Typescriptでは、半角を全角に変換した上、mecabを呼び出すように実装した。(半角を全角に変換する処理は本記事で省略するため、こちらのgithubをご確認ください。)

昔	名詞,副詞可能,*,*,*,*,昔,ムカシ,ムカシ
々	記号,一般,*,*,*,*,々,々,々
、	記号,読点,*,*,*,*,、,、,、
ある	連体詞,*,*,*,*,*,ある,アル,アル
所	名詞,非自立,副詞可能,*,*,*,所,トコロ,トコロ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
お爺さん	名詞,一般,*,*,*,*,お爺さん,オジイサン,オジーサン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
お婆さん	名詞,一般,*,*,*,*,お婆さん,オバアサン,オバーサン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
マイケル	名詞,一般,*,*,*,*,*
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
居	動詞,自立,*,*,一段,連用形,居る,イ,イ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
そう	名詞,特殊,助動詞語幹,*,*,*,そう,ソウ,ソー
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
よ	助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
!!	名詞,サ変接続,*,*,*,*,*
EOS

実装

Node + TypescriptでMecabを呼び出す

mecab.ts
import { tokenizeSync } from '@enjoyjs/node-mecab';
import { Token } from '@enjoyjs/node-mecab/src/types';

// MeCabを用いてフリガナ(全角)を抽出する関数
export const extractFurigana = (text: string) => {
  let katakana = '';
  const result = tokenizeSync(text);
  result.map((token: Token) => {
    if (token.feature.reading) {
      katakana += token.feature.reading;
    }
  });
  return katakana;
};

実行コマンド

npx ts-node index.ts 昔々、ある所にお爺さんとお婆さんとマイケルが居たそうですよ!!

実行結果

むかし々、あるところにおじいさんとおばあさんとまいけるがいたそうですよ!!

さいごに

mecabを実行してみて、「昔々」の「々」が変換ができていないことがわかった。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1