LoginSignup
2
0

More than 1 year has passed since last update.

お疲れ様です。たなしょです。
今日はユーザーの発言をランダム辞書に記録できるようにします。

辞書のクラスをリファクタリングする

コンストラクターの書いた処理を下記のメソッドに2分割します。

MakeRandomList

ランダム辞書を呼び出します。

private void MakeRandomList()
{ 
    string[] r_lines = File.ReadAllLines(
        @"dics\random.txt",
        System.Text.Encoding.UTF8
        );

    foreach (string line in r_lines)
    {
        string str = line.Replace("\n", "");
        if (line != "")
        {
            _randomList.Add(str);
        }
    } 
}

MakePatternList

パターン辞書を呼び出します。

private void MakePatternList()
{ 
    string[] p_lines = File.ReadAllLines(
        @"dics\pattern.txt",
        System.Text.Encoding.UTF8
        );

    List<string> new_lines = new();

    foreach (string line in p_lines)
    {
        string str = line.Replace("\n", "");
        if (line != "")
        {
            new_lines.Add(str);
        }
    }

    foreach (string line in new_lines)
    {
        // add code
        // line replace \\t -> \t
        string rep_line = line.Replace("\\t", "\t");
        string[] carveLine = rep_line.Split(new char[] { '\t' });
        _patternList.Add(
            new ParseItem(
                carveLine[0],
                carveLine[1])
            );
    }
}

ユーザーの発言をランダム辞書に追加する処理

1.ランダム辞書に存在しない場合は辞書に追加します。

public void Study(string input)
{
    string userInput = input.Replace("\n", "");
    if (_randomList.Contains(userInput) == false)
    {
        _randomList.Add(userInput);
    }
}

2.ファイルに書き込みます。

public void Save()
{
    File.WriteAllLines(
        @"dics\random.txt",
        _randomList,
        System.Text.Encoding.UTF8
        );
}

本体クラスを改造してユーザー発言を記録できるようにする。

1.Dialogueメソッドにstudyメソッドを追加します。

string resp = _responder.Response(
    input,
    _emotion.Mood);
_dictionary.Study(input);
return resp;

2.saveメソッドを追加します。

public void Save()
{
    _dictionary.Save();
}

フォームを閉じたときに記録するか質問するようにする

イベントのFormClosedに処理を追加します。

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    const string message = "記憶しちゃってもOK?";
    const string caption = "質問でーす";
    var result = MessageBox.Show(message,
                                 caption,
                                 MessageBoxButtons.YesNo,
                                 MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
        _chan.Save();
    }
}

これでユーザーの発言を記録できて少しは会話っぽいことができるようになりました!

最後に

発言を簡易的ではありますが記録することができました。
次回からはMecabを使った形態素解析を用いてパターン辞書に記録していくように実装していきます。

2
0
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
2
0