RAG・検索基盤

Kuromojiとは|自社の語10個のうち7個が2つ以上に割れた

Kuromojiとは何か品詞が取れると何ができるのか辞書にない語はどうなるのか

日本語を語に切るには辞書が要ります。KuromojiはJavaScriptだけで動き、辞書も同梱されています

実際に入れて測りました。品詞で絞ると索引は51.6%になります。一方で、業務で使う語10個のうち7個が2つ以上に割れました

この記事の要点

  • 品詞を名詞だけに絞ると索引は51.6%
  • 基本形にそろえると語の種類が80種から68種
  • 業務の語10個のうち7個が割れる
  • 辞書の読み込みは176.4ミリ秒

品詞で絞ると索引は51.6%になった

実際に入れて動かしました。品詞という情報が取れるので、索引に入れる語を選べます。

Kuromojiを実際に入れて動かし、品詞で索引を絞るとどれだけ小さくなるかを測りました。使ったのは社内規程を模した文書12件です。

導入は1コマンドで終わりました。READMEもわずか5行のコードで文を語に切れるとしています。実際、辞書の場所を渡すだけで動きます。

javascript
const KEEP = ['名詞', '動詞', '形容詞'];
const rows = [
  ['絞らない', (s) => tokenizer.tokenize(s).map((x) => x.surface_form)],
  ['名詞・動詞・形容詞だけ', (s) => tokenizer.tokenize(s).filter((x) => KEEP.includes(x.pos)).map((x) => x.surface_form)],
  ['名詞だけ', (s) => tokenizer.tokenize(s).filter((x) => x.pos === '名詞').map((x) => x.surface_form)],
  ['名詞だけ・基本形にそろえる', (s) => tokenizer.tokenize(s).filter((x) => x.pos === '名詞').map((x) => x.basic_form)],
];
text
入れるもの                    語の総数  語の種類  絞らない場合との比
絞らない                              246個      110種            100.0%
名詞・動詞・形容詞だけ                       152個       91種             61.8%
名詞だけ                              127個       80種             51.6%
名詞だけ・基本形にそろえる                     127個       68種             51.6%

落とした語の例(助詞・助動詞・記号)
  の(助詞) は(助詞) と(助詞) 。(記号) 超(接頭詞) は(助詞) と(助詞) 。(記号)

上の表を見てください。名詞だけに絞ると、索引に入る語は246個から127個になりました。半分ちょうどくらいです。

何を落としているか

落ちているのは助詞と記号です。「の」「は」「と」「。」といった語は、どの文書にも出てくるので検索の役に立ちません

こうした語を落とせるのは、品詞という情報が付いてくるからです。区切るだけの仕組みでは選べません。

基本形にそろえる

最後の行は基本形にそろえた場合です。総数は同じ127個ですが、語の種類が80種から68種に減りました。

活用の違いが1つにまとまるので、書き方が違っても同じ語として当たります。索引の種類が減るぶん、探すのも速くなります。

品詞で絞ると半分。基本形にそろえると種類が減る。

単位: 個絞らない246個名詞・動詞・形容詞152個名詞だけ127個文書12件での実測。語の種類は順に110種・91種・80種、基本形にそろえると68種。
図1 ── 索引に入る語の数
出典kuromoji.js README2026-08-18 確認
You can tokenize sentences with only 5 lines of code.
原文kuromoji.js README この内容の有効期限2027-02-18

Kuromojiとは何か

JavaScriptだけで動く日本語の形態素解析器です。追加の実行環境も、外部のサービスも要りません。

Kuromojiは、日本語を語に切って、品詞や読みを付ける仕組みです。READMEも、日本語形態素解析器のJavaScript実装であり、Kuromojiの純粋なJavaScript移植であるとしています。

何がうれしいのか

日本語の解析器は、実行環境の用意が要ることが多いです。KuromojiはJavaScriptだけで完結します

READMEも、必要なのは組み立てたファイルと辞書のファイルだけだとしています。前の節の計測でも、入れてすぐ動きました。

区切る以外に取れるもの

text
  宿泊     品詞=名詞  基本形=宿泊  読み=シュクハク
  費      品詞=名詞  基本形=費  読み=ヒ
  の      品詞=助詞  基本形=の  読み=ノ
  上限     品詞=名詞  基本形=上限  読み=ジョウゲン
  は      品詞=助詞  基本形=は  読み=ハ
  1      品詞=名詞  基本形=*  読み=-

語といっしょに品詞・基本形・読みが付いてきます。前の節で索引を絞れたのは、この品詞があるからです。

読みが取れるのも実務では効きます。ふりがなでの検索や、読みが同じ語の対応に使えます。

起動のときに辞書を読む

使う前に辞書を読み込みます。前の節と同じ環境で測ったところ、176.4ミリ秒でした。

処理のたびに読むわけではありません。起動時に一度読んで、あとは使い回します。短命な処理で毎回起動する構成では、この時間が積み上がります。

余談 この計測での注意

この記事の計測は、Kuromojiに同梱されている辞書をそのまま使っています。辞書を差し替えると結果は変わります。また、本体の依存には入れていません。辞書だけで17MBあるためです。区切り方そのものの話は日本語トークナイザの記事で扱っています。

出典kuromoji.js README2026-08-18 確認
JavaScript implementation of Japanese morphological analyzer. This is a pure JavaScript porting of Kuromoji.
原文kuromoji.js README この内容の有効期限2027-02-18

自社の語10個のうち7個が2つ以上に割れた

辞書に載っていない語は割れます。一般語に見えるものでも割れるので、目で見て確かめる必要があります。

Kuromojiで自社の用語がどう扱われるかを、実際に走らせて確かめました。業務で使いそうな語を10個並べています。

text
語                    分割          1語か  未知語を含むか
ServiceDock           ServiceDock       はい          はい
サービスドック               サービス|ドック         いいえ         いいえ
出張旅費精算書               出張|旅費|精算|書       いいえ         いいえ
越境物販                  越境|物販            いいえ         いいえ
営業一課                  営業|一|課           いいえ         いいえ
宿泊費                   宿泊|費             いいえ         いいえ
所属長                   所属|長             いいえ         いいえ
テレワーク手当               テレワーク|手当         いいえ          はい
サブスクリプション             サブスクリプション         はい          はい
稟議                    稟議                はい         いいえ

10語のうち 7語が2つ以上に割れた。

上の表を見てください。10語のうち7語が2つ以上に割れました

一般語でも割れる

驚いたのは「宿泊費」が「宿泊」と「費」に割れたことです。社内用語でも造語でもありません。

同じく「所属長」も「所属」と「長」になります。辞書に1語として載っているかどうかがすべてで、語としての自然さは関係ありません。

割れると何が起きるか

「宿泊費」で検索したとき、索引には「宿泊」と「費」が入っています。「宿泊」を含む別の条文にも当たります

逆の得もあります。「宿泊の費用」と書かれた文書にも当たるからです。広く当たるようになる代わりに、絞り込みが効かなくなります

どう対処するか

  1. 自社の語を10個書き出す。製品名・部署名・帳票名
  2. 解析させて目で見る。1語になっているか
  3. 検索で効くものだけ選ぶ。全部を辞書に足す必要はない
  4. 足したら索引を作り直す。作り直さないと反映されない

3番目が大事です。割れていても困らない語のほうが多いので、実際に検索で使われる語だけを選んでください。

辞書に載っているかどうかがすべて。

業務で使う語10個1語のまま32つ以上に割れた710語うち未知語の印あり3710語−0%(0語)同梱辞書での実測。「宿泊費」のような一般語も「宿泊」と「費」に割れた。
図2 ── 10語のうち割れた語と1語のままの語
出典kuromoji.js README2026-08-18 確認
You only need the build/kuromoji.js and dict/*.dat.gz files
原文kuromoji.js README この内容の有効期限2027-02-18

よくある質問

追加の環境構築は要りますか
要りません。JavaScriptだけで動き、辞書も同梱されています。この計測でも導入は1コマンドでした。
品詞は何に使えますか
索引に入れる語を絞れます。助詞や記号を落とすと、この計測では索引が51.6%になりました。
自社の用語はそのまま扱えますか
割れます。この計測では「宿泊費」ですら「宿泊」と「費」に分かれました。辞書を足すかどうかの判断が要ります。
起動のたびに辞書を読むのですか
読みます。この計測では176.4ミリ秒でした。起動時に一度だけ読んで使い回す形になります。

まとめ

  • JavaScriptだけで動く形態素解析器
  • 品詞で絞ると索引は51.6%
  • 業務の語10個のうち7個が割れる
  • 辞書の読み込みは176.4ミリ秒

今日から始められること

  1. 自社で使う語を10個書き出す
  2. そのまま解析させて、1語になるか目で見る
  3. 割れた語のうち、検索で効くものを選ぶ
  4. 選んだ語だけを辞書に足す

実務で組んだKuromojiのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る