KuromojiはJavaで書かれているオープンソースの日本語形態素解析エンジンです。

KuromojiはApache Software Foundationに寄付されており、バージョン3.6より JapaneseTokenizerとしてApache LuceneとApache Solrの日本語サポートを提供していますが、単独で自然言語処理のプロジェクトにも 利用できます。

機能のまとめ

Kuromojiは下記の機能を含む日本語の形態素解析エンジンです:

  • 複合語の分割 テキストを言葉に分割(形態素)
  • 品詞のタグ付け 言葉分類の割当(名詞、動詞、助詞、形容詞など)
  • 見出し化 活用の動詞や形容詞に辞書の見出しを表示
  • 読み方 漢字の読み方を抽出

Kuromojiは下記の特徴があります。

  • 実用的なパッケージング 必要なものがすべて含まれるjarファイルとしてのパッケジング
  • 検索用の設計 検索リコールを改善するため複合プレーズを分割するモード
  • 簡単に利用 簡単な利用のため使いやすいAPIおよびMavenインテグレーション
  • 実用的なライセンス オープンソースも商業用ソフトウェアでも適用できるApache v2ライセンス

すぐ試す

プログラミングの例 コードでKuromojiを利用する

Kuromojiは一つの単独jarファイルにパッケージされています。Mavenの用意も完備されて、第三者に依存するモジュールもないため とても使いやすいです。

下記は簡単なテキストの形態素解析をJavaでどのように行えるかを示す例です。

package org.atilika.kuromoji.example;

import org.atilika.kuromoji.Token;
import org.atilika.kuromoji.Tokenizer;

public class TokenizerExample {
  public static void main(String[] args) {
    Tokenizer tokenizer = Tokenizer.builder().build();
    for (Token token : tokenizer.tokenize("寿司が食べたい。")) {
      System.out.println(token.getSurfaceForm() + "\t" + token.getAllFeatures());
    }
  }
}

プログラムの例をコンパイルするため次のコマンドを実行してください。

% javac -encoding UTF-8 -cp lib/kuromoji-0.7.7.jar \
     src/main/java/org/atilika/kuromoji/example/KuromojiExample.java

次のコマンドで実行します。

% java -Dfile.encoding=UTF-8 \
     -cp lib/kuromoji-0.7.7.jar:src/main/java \
     org.atilika.kuromoji.example.KuromojiExample
    寿司	名詞,一般,*,*,*,*,寿司,スシ,スシ
    が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
    食べ	動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
    たい	助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
    。	記号,句点,*,*,*,*,。,。,。

アドバイス Kuromojiはスレッドセーフですので、 複数のスレッドからテキストを解析するは可能です。

Mavenアーティファクトのレポジトリ MavenまたはIvyで簡単に利用するため

MavenでKuromojiを利用するため、まずpom.xmlファイルの<repositories>セクションに下記のレポジトリを追加してください。

<repository>
  <id>Atilika Open Source repository</id>
  <url>http://www.atilika.org/nexus/content/repositories/atilika</url>
</repository>

次はKuromojiの詳細を下記の通りに<dependencies>セクションに追加してください。

<dependency>
  <groupId>org.atilika.kuromoji</groupId>
  <artifactId>kuromoji</artifactId>
  <version>0.7.7</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

以上の設定でプロジェクトにKuromojiが使えるようになります。

Lucene、Solr、elasticsearchでもKuromoji

複数のコッミッターや貢献者の努力によって、KuromojiはApache LuceneとApache Solrの標準日本語サポートを提供しています。 Kuromojiはelasticsearchの プラグイン としても利用ができます。

Lucene/SolrおよびelasticsearchのKuromojiはすぐでも使えるデフォルトコンフィギュレーションを持っています。

  • ストップワード・ストップタグの削除 ランクがそれることを防ぐため品詞と一般の言葉を削除します。
  • 文字幅ノーマライズ化 全角のローマ字を半角に、半角の仮名を全角に変換します。
  • 見出し化 活用形の形容詞や動詞が辞書の見出し系に変換されます。

上記のデフォルトコンフィギュレーションは多くの場合、適切の設定となっています。

さらに、読み方、ローマ字の読み方、品詞などの属性が多く含まれています。LuceneではJapaneseAnalyzerとして提供しています。 Solrでは「text_ja」というデフォルトフィールドとして用意されています。いくつかの設定オプションによって調整も可能です。

アドバイス Solrで日本語を検索するには、「text_ja」のフィールドタイプを 使ってください。

アドバイス Luceneで日本語を検索するには、前述した機能のすべては JapaneseAnalyzerとして提供されています。

検索モードと類義語の複合語

検索モードでは、各単語を検索可能にするには複合語を分割します。この処理によってリコールがあがります。

完全にあった場合の正確さを保つため、複合語自体をインデックスに類義語として保持しておきますので、 (普段はIDFによって)ランクが上がります。

Kuromojiでは全体的にいいランキングをつけるためリコールと正確さを考慮しています。

「関西国際空港」の形態素、第1ポジジョンに複合語を類義語として保持しておきます。
Position 1 Position 2 Position 3
関西 国際 空港
関西国際空港

Apache Solr 4.0解析画面

下記ではSolr 4.0 RC1の解析画面のスクリーンショットを表示しています。

インフォ 品詞情報、読み方、ローマ字の読み方など、いくつかの形態素属性も含まれています。

よくあるご質問

Kuromojiについての質問があります。どこに連絡したらいいでしょうか?

質問などの場合は、 moc.akilita@ijomoruk へご連絡ください。

Kuromojiはどのようなライセンスを使っていますか?

KuromojiはApache License v2.0のソフトウェアライセンスで提供しています。MeCab-IPADIC の統計モデルを使用しています。ライセンスの詳細は、 NOTICE.mdにて 掲載されています。

KuromojiのCやC++バージョンはありますか?

KuromojiのCバージョンは現在開発中です。ご興味があれば、お問い合わせください。

Kuromojiはどの辞書をサポートしていますか?

KuromojiはMeCab-IPADIC辞書をサポートしています。UniDicも実験的にサポートしています。

その他の辞書サポートが必要な場合はお問い合わせください。

Kuromojiはスレッドセーフですか?

スレッドセーフです。

Kuromojiはどういう意味ですか?

いい質問ですね!文字通りだと「黒い」と「文字」ということになりますが、実は別の意味もあります。

「黒文字」というものは茶道でよく見られますが、和菓子をお盆から懐紙へ移動したり、食べやすい大きさに切ったりするための道具です。

– 基本的に入力処理のツールということです。;)