10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++プログラムにMecabを組み込む方法。

Last updated at Posted at 2015-09-02
  • ウェブ共有型の翻訳メモリーを試作しています。
  • CCライセンスでページを公開しているサイトが増えています。
  • http://stackoverflow.com/ もその一つです。
  • これなら皆で翻訳を共有できるんじゃないかというコンセプトです。
  • その過程でMecabを使いました
  • 色々わからなかった点があったのでメモします。

MSVC上でのMecabライブラリのビルド

  • Linux上でビルドすると、Makefile.msvcが作られます。
  • MSVCでビルドするにはこのファイルが必要なので、一度Linux上でビルドし、ソースツリーをWindows上にコピーします。
  • 後は、MSVCに用意されているコマンドプロンプト上からsrcに移動し、make.batを実行します。
  • 沢山のバイナリが出来ますが、C++から使うのに必要なのは*.h、libmecab.dll、libmecab.libです。
  • 他に辞書も用意する必要があります。

プロジェクトへの組み込み

  • プロジェクトに.libを読み込み、.hをインクルードするのは通常通りです。
  • 実行時にはlibmecab.dllが必要なので、F5で実行するような場合はプロジェクトのフォルダに入れておきます。

プログラムからの呼び出し

  • Model* MeCab::Model::create(const char *arg)は空白文字などで実行時に問題が出ます。
  • Model* MeCab::Model::create(int argc, char **argv)は、Windows上で全く問題がありません。

MeCab::Model::Model* create(int argc, char **argv)の呼び出し

  • ここが一番躓いたところです。
  • arg[0]には、「myapp」のようなシステム名を入れます。これは何でも構いません。
  • arg[1]には、「--rcfile=C:/~/mecabrc」のような設定ファイルのパスを入れます。
  • arg[2]には、「--dicdir=C:/~/ipadic」のような辞書ファイルのあるフォルダのパスを入れます。
  • わかってみれば何でもないことでした。

mecabrcの中身

  • mecabrcは、辞書の場所などを設定するファイルです。
  • 中は全て「;」でコメント化しておきます。空であってもこのファイルが必要です。
  • ところでコメントアウトはこういうときに使っていい言葉なんでしょうか?誰か教えて!
  • dicrcは辞書についてきたものをそのまま使いました。

プログラムの配布

  • libmecab.dllと辞書を同梱する必要があります。
  • それ以外は特に何も必要ありませんでした。

感想

  • 一度わかってしまえば、どうという事もありませんでした。
  • が・・・かなり悩んだ。
  • そして、Mecabは恐ろしく速い!
  • 最初別スレッドで動かすかと思っていたけど、そんな必要は無かったw
10
10
0

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
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?