0

所以我正在做一个文本挖掘项目,目前正在尝试实现信息增益。我有一个数据,其中每一行都描绘了一个文档。所以一个换行符会分割不同的文档。

我必须生成一个矩阵,其中列是所有文档中的所有不同单词,行是不同的文档。此表中的每个单元格为 1(真)或 0(假),用于判断该文档中是否存在该单词。

注意:我已经删除了文档中所有重复的单词。

 class word_list
 {
     public string word;
     public List<bool> doc = new List<bool>();
 }

 private void button2_Click(object sender, EventArgs e)
 {
     //Convert the string into an array of words 
     string[] w1 = richTextBox1.Text.Split('\n', ' ').Select(x => x.Trim().ToLower()).Distinct().ToArray();
     string[] rich_doc = richTextBox1.Text.Split('\n');
     List<word_list> words = new List<word_list>();
     word_list temp = new word_list();
     for (int i = 0; i < w1.Length; i++)
     {
         temp.word = w1[i];

         for (int j = 0; j < rich_doc.Length; j++)//all doc array
         {
             List<string> doc_word = Regex.Split(rich_doc[j], @"\b").Distinct(StringComparer.CurrentCultureIgnoreCase).ToList();
             for (int k = 0; k < doc_word.Count; k++)//All words in a doc 
             {
                 if (doc_word[k] == w1[i])
                 {
                     temp.doc.Add(true);
                     words.Add(temp);
                 }
                 else
                 {
                     temp.doc.Add(false);
                     words.Add(temp);
                 }
             }
         }
     }
     //generate matrix
     int t = rich_doc.Length; //no. of docs
     string final_matrix = "Doc number";
     for (int i = 0; i < words[0].doc.Count; i++)
     {
         final_matrix += "\t" + words[i].word;
     }
     final_matrix += "\n";

     for (int i = 0; i < t; i++) //traverse through number of docs
     {
         final_matrix += i + 1;
         for (int h = 0; h < words.Count; h++)//traverse through each distinct word in the list
         {
             if (words[h].doc[t])
                 final_matrix += "\t1";
             else
                 final_matrix += "\t0";
         }
         final_matrix += "\n";
     }
     richTextBox1.Text = final_matrix;
 }//end of button 2

问题是这段代码在无限循环中运行。

4

0 回答 0