読者です 読者をやめる 読者になる 読者になる

とある技術者のお遊びフライト日記

ゲームをきっかけに国内飛び回る謎な人の日記。時々技術ネタもご提供。

マルコフ連鎖ライブラリ for .net

はじめに

これは、マルコフ連鎖アルゴリズムによる機械的な文章作成機能を、.net Framework上で簡単に実装するためのライブラリです。

本ライブラリには、同アルゴリズムによる機械的な文章作成に必要な、一通りの機能(文章の形態素解析N-gram化など)も含まれています。

このライブラリにより、各アルゴリズムの詳細をまったく気にすることなく、機械的な文章作成の機能を持ったWindowsアプリケーションを構築できます。
(例:TwitterIRCBOT

ダウンロードはこちらよりどうぞ。(ソースコード同梱)
marcovlib.zip 直

含まれるもの一覧
  • ライブラリ本体
  • MeCab (C#向けラッパー MeCabSharp、辞書作成および更新ユーティリティを含む)
  • ソースコード (C#)
  • 簡単なドキュメント
含まれないが必要なもの一覧
  • Visual C++ 2010 再頒布可能パッケージ

同梱のMeCabが、VC++ 2010でビルドされているためです。
32bitコードのためx86版のみで間に合うかとは思いますが、64bit環境の方は念のため、x64の再頒布可能パッケージもインストールした上でご利用ください。

このドキュメントの改訂履歴

2014/2/18 v1.1
2014/2/12 初版

使い方

C#での使用方法を前提に説明します。

すべてのdllを、プロジェクトのソースがあるディレクトリへコピーします。
MeCabSharp.dllとmarcovlib.dllをプロジェクトの参照設定に加えます。
コンソールアプリケーションの場合、最小限のサンプルコードは下記のとおりです。

using Marcovlib;

class Program
{
    static BasicMarcovActor bma;

    static void Main(string[] args)
    {
        bma = new BasicMarcovActor(4); //任意の数を指定可能ですが、通常は2〜4です
        //文字列を受ける処理をした後に、下記のコードを書きます
        
        bma.Learn_Sentence(str); //文字列strの内容を辞書へ登録させます

        //文章を作成し出力させる方法は二通りあります。
        //戻り値の型は下記いずれの場合もSystem.Stringです。
        result = bma.Get_Sentence();   // (1) 文字数制限なし
        result = bma.Get_Sentence(80); // (2) 80文字に収まるよう、文章を作成

        //あとはしたい処理を書いてください
	//Twitterに投稿、IRCに送信、etc...

簡単なクラスライブラリドキュメント

クラス : Marcovlib.BasicMarcovActor

一般によく知られている方法で、文章の学習・作成のアルゴリズムを実装したものです。
Learn_Sentenceメソッドで文章を学習(辞書構築)→Get_Sentenceメソッドで文章作成の流れを繰り返すだけで、よくあるBOTと同じことができます。

コンストラクタ : BasicMarcovActor(int paramOfNgram)

コンストラクタです。
引数には、文章を分かち書きによりN-gram化させる際の、数字N(N > 0)を指定します。
(Nは通常2から4です。)

  • パラメータ : System.Int32
メソッド : Learn_Sentence(string s)

文章を、分かち書きによりN-gram化した辞書を構築します。
辞書構築前の初回起動時に文章を作成させるためには、最低一度このメソッドを文章作成前に呼び出し、辞書を構築する必要があります。
空の文字列を渡すことはできません。

  • パラメータ : System.String
メソッド : Get_Sentence()

辞書に記録された言葉をマルコフ連鎖で引き、文章を作成します。
作成する文章の長さは制限できません。

  • 戻り値 : System.String
メソッド : Get_Sentence(int n)

辞書に記録された言葉をマルコフ連鎖で引き、文章を作成します。
作成される文章の長さは、パラメーターn (n > 0)で指定された長さの範囲内です。

  • パラメータ : System.Int32
  • 戻り値 : System.String

注意点

辞書について

形態素解析に使用する辞書は同梱されていません。MeCabで使用できる辞書であれば何でも使えますので、各自で用意してください。
アーカイブには辞書作成に必要なツールmecab-dict-gen, mecab-dict-index)を同梱していますので、ご活用ください。

一般的によく利用される辞書は、ipadicまたはnaist-jdicです。
当方では未確認ですが、google IME(mozc)の辞書も使えるようです。
mozc_01

また本ライブラリに同梱のMeCabは、辞書の設定ファイルである“mecabrc”が、MeCab.dllと同じディレクトリに存在すればそれを見るようにコンパイルされています。

呼び出し元の言語について

C#では使えることを簡単に確認しています。
しかしながら、VBC++/CLI、F#等他の言語では動作を確認できていません。
同じ.net Framework上で動く言語であればどれでも使えるかとは思いますが、動作保証やその他の責務を作者は一切負わないものとします。
注)C++/CLIWin32 APIも使うのであれば、マーシャリングは必須です。

その他

内部ではメルセンヌツイスターを使用しています。
メルセンヌツイスター著作権表示等については、アーカイブ内ドキュメント等に明記しております。

このプログラムの、修正BSDライセンスの表記

Copyright (C) 2014, idinor All rights reserved.                          

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:

     1. Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

     3. The names of its contributors may not be used to endorse or promote 
        products derived from this software without specific prior written 
        permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.