実践解説/入門(ChaSen)

SlothLibの機能のうち、SlothLib.NLP名前空間の機能を利用する方法について解説します。
ここでは特に、その中でもChaSenクラスとFilterクラスについて解説します。

ChaSenクラスを使ったアプリケーションの作成

ここでは、文書の形態素解析を行うを表示するプログラムを作成します。
形態素解析とは、自然言語文を入力として品詞情報などを付加した解析結果を得る手法です。
形態素解析を行うことのできるシステムである形態素解析器として、代表的なものに茶筌やMeCabがあります。
以下に、形態素解析の例を示します。

入力:
 太郎と花子が帰ってきた
出力:
 太郎    タロウ  太郎    名詞-固有名詞-人名-名
 と      ト      と      助詞-並立助詞
 花子    ハナコ  花子    名詞-固有名詞-人名-名
 が      ガ      が      助詞-格助詞-一般
 帰っ    カエッ  帰る    動詞-自立       五段・ラ行      連用タ接続
 て      テ      て      助詞-接続助詞
 き      キ      くる    動詞-非自立     カ変・クル      連用形
 た      タ      た      助動詞  特殊・タ        基本形
 EOS

SlothLibから茶筌を利用するためには、事前に茶筌をインストールしておく必要があります。
インストール方法については茶筌のインストールを参照してください。

アプリケーションの作成

  1. dllファイルの参照
    1. Visual Studioの画面右部のソリューションエクスプローラからプロジェクトのソースの参照設定を右クリックし、参照の追加を選択します。
      もしソリューションエクスプローラがVisual Studioの画面上に表示されていない場合は、メニューの[表示]から[ソリューションエクスプローラ]を選択することで表示できます。
      ref.PNG

    2. 「参照の追加」というウインドウが表示されるので、「参照」タブを選び、dllファイルを指定します。 まず、SlothLib.NLP.Base.dllの追加を行います。
      同様に、SlothLib.NLP.JapaneseMorphologicalAnalyzer.dllおよびSlothLib.NLP.Filter.dllの参照も追加します。
      addref.PNG

    3. 「参照設定」の「+」をクリックすることで参照が追加されているかどうか確認することができます。
      refadded3.PNG

  2. コントロールの配置
    1. ソリューションエクスプローラのForm1.csをダブルクリックするか、右クリックメニューからデザイナの表示を選択します。
    2. 画面左側のツールボックスからTextBoxおよびButtonを配置します。
      今回は以下の3つのコントロールを配置しました。

      入力用のTextBox
      出力用のTextBox
      解析用のButton

      Control2_2.PNG

    3. 各コントロールのプロパティを変更します。
      まず、ボタン上で右クリックをし、[プロパティ]を選びます。
      そして、画面右部のプロパティウインドウで(Name)の値を「btnAnalyze」に、Textの値を「解析」に変更します。

      property.PNG btnproperty.PNG

      次に、入力用のTextBoxと出力用のTextBoxのプロパティを変更します。
      入力用のTextBoxの(Name)を「tbInput」に、(MultiLine)を「True」にします。出力用のTextBoxの(Name)を「tbOutput」に(MultiLine)を「True」にします。

      tbInput.png

      また、Form1のTextの値を「NLPTest」に変更します。(Formはフォーム中のボタンやTextBox以外の部分をクリックすることで選択できます)

  3. コードの記述
    ソリューションエクスプローラからForm1.csを右クリックし、コードの表示を選択します。
    1. 使いたいライブラリの名前空間をusingに追加します。今回は以下の参照を追加します。
      using SlothLib.NLP;

      using.PNG

    2. ボタンを押したときの動作を記述します。
      ボタンをダブルクリックすると、「btnAnalyze_Click」という名前のメソッドが作られるので、以下のように記述します。
      private void btnAnalyze_Click(object sender, EventArgs e)
      {
          tbOutput.Text = "";
      
          ChaSen chasen = new ChaSen();
          ChaSenResult result = chasen.DoAnalyze(tbInput.Text);
      
          tbOutput.Text = result.RawResult;
      }

      各行の内容について説明します。

      まず、出力用のTextBoxのテキストを空にします。
      tbOutput.Text = "";
      次に、形態素解析を行う茶筌クラスのインスタンスを作ります。
      ChaSen chasen = new ChaSen();
      そして、DoAnalyzeメソッドを実行することで、解析結果としてChaSenResultクラスのインスタンスを得ることができます。
      ChaSenResult result = chasen.DoAnalyze(tbInput.Text);
      茶筌の解析結果をそのまま、tbOutputに表示します。
      tbOutput.Text = result.RawResult;

    3. メニューの[デバッグ]から[デバッグの開始]を選択し、ビルドします。
      表示されたウィンドウ上部のテキストボックスに文章を入力して「解析」ボタンを押すと、下部のテキストボックスに茶筌の実行結果が表示されます。
      morph.PNG

応用例

  1. ウインドウサイズの変更に対応する
    tbInputおよびtbOutputの「Anchor」プロパティの値を以下のように変更することで、ウインドウのサイズを変更したときにテキストボックスの大きさが変わるようになります。
    anchor1.png

    anchor2.png

  2. 茶筌ではなくMeCabを使う
    現在は形態素解析器として茶筌を使っていますが、簡単にMeCabに切り替えることができます。
    詳しくは、実践解説/NLPも参照してください。

    btnAnalyze_Clickのメソッドの中身を以下のように書き換えることでMeCabを使うことができます。
    private void btnAnalyze_Click(object sender, EventArgs e)
    {
        tbOutput.Text = "";
    
        MeCab mecab = new MeCab();
        MeCabResult result = mecab.DoAnalyze(tbInput.Text);
    
        tbOutput.Text = result.RawResult;
    }


添付ファイル: fileanchor2.png 513件 [詳細] fileanchor1.png 479件 [詳細] fileControl2_2.PNG 513件 [詳細] filetbInput.png 473件 [詳細] fileanchor1.PNG 482件 [詳細] filerefadded3.PNG 511件 [詳細] fileControl2.PNG 505件 [詳細] fileusing.PNG 503件 [詳細] filerefadded.PNG 514件 [詳細] fileref.PNG 518件 [詳細] fileproperty.PNG 510件 [詳細] filenoun.PNG 485件 [詳細] filemorph.PNG 479件 [詳細] fileControl.PNG 508件 [詳細] filebtnproperty.PNG 521件 [詳細] fileaddref.PNG 537件 [詳細]