SlothLibの使い方(LinearAlgebra)

SlothLibの機能のうち、SlothLib.LinearAlgebra名前空間の機能を 利用する方法について解説します。ここでは特に、 その中でも特徴ベクトル機能(FeatureVectorクラス)について解説します。

FeatureVector名前空間などの参照

ここを参考にして、dllを参照します。 ここでは、SlothLib.LinearAlgebra.FeatureVector.Base.dll と SlothLib.NLP.Base.dll と SlothLib.NLP.JapaneseMorphologicalAnalyzer.dll と SlothLib.IO.ContentReader.dll を参照します。

テキストファイルを読みこんで特徴ベクトル化するアプリケーションの作成

コンポーネントの設置

  1. まず、ListView 、 ListBox 、 Button 、 OpenFileDialog をフォームに貼り付けます。listview1は特徴ベクトルを表示するのに用います。listbox1は読み込んだファイル一覧を表示します。button1はファイルを読み込むときに使います。openFileDialog1は、ファイルを読み込むときのダイアログになります。
    ss1.PNG

listview1 の表示の設定

  1. 貼り付けたListViewを選択すると、項目 "View" を Detailed に変更し、項目 "Columns" の設定を行います。Columnsは、追加を4回押して4つ作成し、1つ目の Text に“単語”、2つ目の Text を“TF値”とします。3つ目の Textを “IDF値”、 4つ目のTextを“TF-IDF値”とします。
    ss2.PNG

openFileDialog1 の設定

  1. 「開く」ダイアログで開くファイルのフィルター(ファイルの種類)を設定します。
    ss3.PNG

読み込んだファイル一覧を表示するリストボックスの設定

  1. 貼り付けたリストボックスを選択すると、同様に右にプロパティ一覧が表示されます。"HorizontalScrollbar" を True にしておきましょう。
  2. 貼り付けたリストボックスをダブルクリックして、listBox1_SelectedIndexChanged を記述します。コードは次のようになります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;                               // 追加
using SlothLib.LinearAlgebra.FeatureVector;    // 追加
using SlothLib.NLP;                            // 追加
 
namespace LinearAlgebraTests
{
   public partial class Form1 : Form
   {
       private List<IVector<string>> vectors;               // ベクトル群
       private DocumentFrequencyVector<string> dfvector;    // DF値を保持するベクトル

       public Form1()
       {
           InitializeComponent();
           vectors = new List<IVector<string>>();
       }

       private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
       {
           if (listBox1.SelectedIndex >= 0
               && listBox1.SelectedIndex < vectors.Count)
           {
               PrintVector(vectors[listBox1.SelectedIndex]);
           }
       }

       private void PrintVector(IVector<string> vector)
       {
           InverseDFVector<string> idfv = new InverseDFVector<string>(dfvector);
           listView1.Items.Clear();

           foreach (string key in vector.KeyList)
           {
               ListViewItem item = new ListViewItem(key);
               item.SubItems.Add(vector[key].ToString());                       // TF値
               item.SubItems.Add(idfv[key].ToString("0.00"));                   // IDF値
               item.SubItems.Add((vector[key] * idfv[key]).ToString("0.00"));   // TF-IDF値

               listView1.Items.Add(item);
           }
       }
   }

ボタンが押されたときの設定

  1. ボタンをダブルクリックして、次のようにソースコードを記述します。
      // ボタンがクリックされたときの動作
       private void button1_Click(object sender, EventArgs e)
       {
           // 開いたダイアログでファイルを選択して終了したとき
           if (openFileDialog1.ShowDialog() == DialogResult.OK)
           {
               StreamReader sr = new StreamReader(openFileDialog1.FileName, Encoding.GetEncoding("sjis"));
               string text = sr.ReadToEnd();
               sr.Close();
               BasicVector<string> vector = CreateFeatureVector(text);     // text から FeatureVector を作成
               vectors.Add(vector);                                        // FeatureVector を vectors に追加
               dfvector = new DocumentFrequencyVector<string>(vectors);    // df値の再計算
               listBox1.Items.Add(openFileDialog1.FileName);               // listbox にファイル名を追加
               listBox1.SelectedIndex = listBox1.Items.Count - 1;          // listbox のselectedindex を変更
           }
       }

       // textから特徴ベクトルを作成
       private BasicVector<string> CreateFeatureVector(string text)
       {
           ChaSen cha = new ChaSen();
           ChaSenResult result = cha.DoAnalyze(text);
           BasicVector<string> r = new BasicVector<string>();

           foreach (ChaSenMorpheme mor in result.Morphemes)
           {
               r[mor.Original]++;            // 原形の数をカウント
           }

           return r;
       }

完成

  1. 完成図は次のようになります。
    ss4.PNG

添付ファイル: filess4.PNG 462件 [詳細] filess3.PNG 483件 [詳細] filess2.PNG 472件 [詳細] filess1.PNG 451件 [詳細]