Open5

Node.jsで使える形態素解析ライブラリの検討

kimizuykimizuy

前提

筆者はフロントエンドエンジニアで形態素解析の技術自体には詳しくない。

動機

MiniSearchというクライアントで動作する良さげな検索ライブラリを使いたい。中国語に関するイシューではあるが、検索したい文章は単語に分割する必要があるっぽい。事前にバックエンドのNode.js(Next.js)でテキストを整形したキーワードリストを用意してMiniSearchに渡すフローを想定している。

kimizuykimizuy

Intl.Segmenter

  • ブラウザでも動作する標準Web API(Firefoxでは非対応、2023/09/26時点)
  • isWordLikeを使えば句読点や記号を排除できる
  • ただし、助詞を判別できないので名詞のみを検索キーワードとして抽出したい場合には向いていない
kimizuykimizuy

budoux

  • 最新のChromeで日本語の折り返しの最適化に使われている
  • 折り返しのためのライブラリで単語分割機能はない
    • 「吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。」→「吾輩は/猫である。/名前は/まだ無い。/どこで/生れたかとんと/見当が/つかぬ。」
kimizuykimizuy

kuromojin

  • kuromoji-jsをより使いやすくしたラッパーライブラリ
  • 名詞などを判定できる
  • 標準の辞書だと新しめの単語が対応しきれていないため、任意で辞書を追加してカスタマイズする必要がある
  • 大元のkuromojiの開発が数年前で止まっているっぽい

備考

Next.js(v13.5)+ pnpm(v8)で動作させると辞書のパスが通らなくてランタイムエラーになるので別途、kuromoji-jsをinstallしてそちらの辞書のパスを指定しなおす必要があった。

import { tokenize } from "kuromojin/lib/kuromojin";

const tokenized = await tokenize(text, {dicPath: "node_modules/kuromoji/dict"});
kimizuykimizuy

wakachigaki

  • いろいろな環境で手軽に使える軽量なライブラリ
  • Intl.Segmenterと同様に品詞の推定機能はない