private void btn_predict_Click(object sender, EventArgs e)
        {
            if (txt_text.Text != "")
            {
                List <string> CMD = new List <string>();
                string        s1  = "=== ===Step 0: Văn bản gốc === ===";
                CMD.Add(s1);
                CMD.Add(" ");

                txt_out.Text = "Predicting... ";
                int k = 0;
                Int32.TryParse(txt_k.Text, out k);
                string txt = txt_text.Text;
                txt_text.Text = "Predicting... ";
                CMD.Add(txt);
                string s2 = "=== ===Step 1: Xử lý VnTokenizer === ===";
                CMD.Add(" "); CMD.Add(" ");
                CMD.Add(s2);
                CMD.Add(" ");

                File.WriteAllText(".\\temp.txt", txt, Encoding.UTF8);
                createBAT("..\\temp.txt", "..\\VnT.txt");
                vntokenizer();
                string   stopword = @".\\data\vnstopword.txt";
                string[] StopWord = File.ReadAllLines(stopword);
                string   output   = "";
                string[] text     = File.ReadAllLines(".\\VnT.txt");
                foreach (string textline in text)
                {
                    CMD.Add(textline);
                    string line = textline.ToLower(); // 1. To Lower
                    output = removeStopWord(line, output, StopWord);
                }

                string s3 = "=== ===Step 2: Xóa Stop Word === ===";
                CMD.Add(" "); CMD.Add(" ");
                CMD.Add(s3);
                CMD.Add(" ");

                List <string> words = new List <string>();
                string        word  = "";
                // find out dictionary and word each file
                for (int i = 0; i < output.Length; i++)
                {
                    if (output[i] != ' ')
                    {
                        word += output[i];
                    }
                    else
                    {
                        words.Add(word);
                        word = "";
                    }
                }

                string vb_word = "";
                string vb_code = "";

                if (rb_knn.Checked)
                {
                    List <int> data       = new List <int>();
                    string[]   dictionary = File.ReadAllLines(".\\Dictionary\\Bows.knn.dic");
                    // create a list same size with dictionary
                    for (int i = 0; i < dictionary.Length; i++)
                    {
                        data.Add(0);
                    }
                    // each file, read all word and check in dictionary

                    foreach (string line in words)
                    {
                        vb_word += line + " ";
                        for (int i = 0; i < dictionary.Length; i++)
                        {
                            if (dictionary.ElementAt(i).CompareTo(line) == 0)
                            {
                                data[i] += 1;
                            }
                        }
                    }

                    List <double> Classify = new List <double>();
                    foreach (int i in data)
                    {
                        Classify.Add((double)i * 1.0);
                        vb_code += i.ToString() + " ";
                    }
                    if (k % 2 == 0)
                    {
                        k--;
                    }
                    Knn    kNN_predict = Knn.initialiseKNN(k, ".\\Dictionary\\Dataset.knn.train", true);
                    string s           = kNN_predict.Classify(Classify);
                    int    predict     = Int32.Parse(s);
                    txt_out.Text = "Predict class is: " + get_Name_Class(predict);
                }
                else
                {
                    List <int> data       = new List <int>();
                    string[]   dictionary = File.ReadAllLines(".\\Dictionary\\Bows.svm.dic");
                    // create a list same size with dictionary
                    for (int i = 0; i < dictionary.Length; i++)
                    {
                        data.Add(0);
                    }
                    // each file, read all word and check in dictionary

                    foreach (string line in words)
                    {
                        vb_word += line + " ";
                        for (int i = 0; i < dictionary.Length; i++)
                        {
                            if (dictionary.ElementAt(i).CompareTo(line) == 0)
                            {
                                data[i] += 1;
                            }
                        }
                    }

                    string Classifi = "0";
                    int    index    = 0;
                    foreach (int i in data)
                    {
                        Classifi += " " + index.ToString() + ":" + i.ToString();
                        index++;
                        vb_code += i.ToString() + " ";
                    }
                    File.WriteAllText(".\\temp.txt", Classifi, Encoding.ASCII);
                    string wri = "cd svm \n svm_predict.exe ..\\temp.txt Model Output.txt";
                    File.WriteAllText(".\\svm_test.bat", wri, Encoding.ASCII);
                    Process proc = null;
                    try
                    {
                        string s      = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
                        string batDir = string.Format(s);
                        proc = new Process();
                        proc.StartInfo.WorkingDirectory = batDir;
                        proc.StartInfo.FileName         = "svm_test.bat";
                        proc.StartInfo.CreateNoWindow   = false;
                        proc.Start();
                        proc.WaitForExit();
                        proc.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.StackTrace.ToString());
                    }

                    string[] result = File.ReadAllLines(".\\svm\\Output.txt");

                    int predict = Int32.Parse(result[0]);
                    txt_out.Text = "Predict class is: " + get_Name_Class(predict);
                }

                CMD.Add(vb_word);
                string s4 = "=== ===Step 4: Mã hóa bằng từ điển BOWS === ===";
                CMD.Add(" "); CMD.Add(" ");
                CMD.Add(s4);
                CMD.Add(" ");
                CMD.Add(vb_code);

                txt_text.Text = String.Join(Environment.NewLine, CMD);
            }
            else
            {
                MessageBox.Show("Text box dose not emtry !");
            }
        }
        private void btn_knn_Click(object sender, EventArgs e)
        {
            Train         = false;
            txt_text.Text = "Testing is running...";
            // Before
            if (!File.Exists(".\\Dictionary\\Dataset.knn.test"))
            {
                SubFolders = Directory.GetDirectories(txt_folderPath.Text);
                btn_vntokenizer_Click(sender, e);
                Doc2Words();
                convertDataset();
            }
            // Reading model file
            int k = 0;

            Int32.TryParse(txt_k.Text, out k);
            if (k % 2 == 0)
            {
                k++;
            }
            Knn kNN_predict = Knn.initialiseKNN(k, ".\\Dictionary\\Dataset.knn.train", true);

            // Reading test file
            string[]      tests    = File.ReadAllLines(".\\Dictionary\\Dataset.knn.test");
            List <string> Result   = new List <string>();
            List <string> Label    = new List <string>();
            List <double> Classify = new List <double>();

            foreach (string test in tests)
            {
                string s = "";
                Classify.Clear();
                for (int i = 0; i < test.Length; i++)
                {
                    if (test[i] != ',')
                    {
                        s += test[i];
                    }
                    else
                    {
                        double value = 0.0;
                        Double.TryParse(s, out value);
                        Classify.Add(value);
                        s = "";
                    }
                }
                Label.Add(s);
                string result = kNN_predict.Classify(Classify);
                Result.Add(result);
            }

            List <string> CMD = new List <string>();
            string        cmd = "";
            List <int>    T   = new List <int>();
            List <int>    F   = new List <int>();

            for (int i = 0; i < 16; i++)
            {
                T.Add(0);
                F.Add(0);
            }
            for (int i = 0; i < Label.Count; i++)
            {
                if (Label.ElementAt(i) == Result.ElementAt(i))
                {
                    Int32.TryParse(Label.ElementAt(i), out k);
                    T[k]++;
                }
                else
                {
                    Int32.TryParse(Label.ElementAt(i), out k);
                    F[k]++;
                }
            }

            for (int i = 1; i < 16; i++)
            {
                if (F[i] + T[i] != 0)
                {
                    cmd  = "Class: " + get_Name_Class(i) + " :: T = " + T[i].ToString() + " <> F = " + F[i].ToString() + "      ";
                    cmd += "Acc: " + ((double)T[i] * 100 / (F[i] + T[i])).ToString() + " %";
                    CMD.Add(cmd);
                }
            }
            cmd = "Test Accuracy: " + ((double)T.Sum() * 100 / (T.Sum() + F.Sum())).ToString() + " %";
            CMD.Add(cmd);
            txt_text.Text = String.Join(Environment.NewLine, CMD);


            // After
            Train = true;
            MessageBox.Show("Done !");
        }