2016-11-27 98 views
-1

我讀了兩個文本文件:第一個包含阿拉伯文本,我將它分開。第二個包含停止詞。 我想刪除從第一個文件中的任何停止字(第二檔),但我不知道如何做到這一點:從C#中的文本文件中刪除停用詞#

FileStream fs = new FileStream(@"H:\\arabictext.txt", FileMode.Open); 
StreamReader arab = new StreamReader(fs,Encoding.Default,true); 
string artx = arab.ReadToEnd(); 
richTextBox1.Text = artx; 
arab.Close(); 
char[] dele = {' ', ',', '.', '\t', ';','#','!' }; 

string[] words = richTextBox1.Text.Split(dele); 

FileStream fsw = new FileStream("H:\\arab.txt", FileMode.Create); 
StreamWriter arabw = new StreamWriter(fsw,Encoding.Default); 

foreach (string s in words) 
{ 
    arabw.WriteLine(s); 
} 
+0

在HashSet中放入停用詞「停用詞」。循環「單詞」,將任何不包含在「停用詞」中的內容寫入arabw。 –

+0

第二個文件是如何格式化的?每行有一個詞組? –

+0

這些文件有多大? –

回答

-1

我發現我的問題的解決方案.. 你有一個更好的解決辦法?

 char[] dele = { ' ', ',', '.', '\t', ';', '#', '!' }; 
     using (TextWriter tw = new StreamWriter(@"H:\output.txt")) 
     { 
      using (StreamReader reader = new StreamReader("H:\\arabictext.txt",Encoding.Default,true)) 
      { 
       string line; 

       while ((line = reader.ReadLine()) != null) 
       { 
        string[] stopWord = new string[] { "قد", "في", "بيت", "فواصل", "هي", "من","$","ُ","ِ","ُ","ّ","ٍ","ٌ","ْ","ً" }; 


        foreach (string word in stopWord) 
        { 

         line = line.Replace(word, ""); 

        } 

        tw.Write(line); 


       } 
      } 
     } 
     FileStream fs = new FileStream(@"H:\\output.txt", FileMode.Open); 
     StreamReader arab = new StreamReader(fs,Encoding.Default,true); 
     string artx = arab.ReadToEnd(); 
     arab.Close(); 
     string[] words = artx.Split(dele); 

     FileStream fsw = new FileStream("H:\\result.txt", FileMode.Create); 
     StreamWriter arabw = new StreamWriter(fsw,Encoding.Default); 
     foreach (string s in words) 
     { 

     arabw.WriteLine(s); 

     } 
     arabw.Close(); 
     arab.Close(); 
0

如果我理解正確的話,你想找到停停從第一個文件中刪除單詞,並從第二個文件中刪除這些停用詞。

這裏是我的解決方法:

  1. 提取停止的話分裂的方法從第一個文件
  2. 迭代中提取從第一個文件的話,並在第二個文件的內容與String.Empty替換它們。
  3. 保存文件

我簡化你的代碼下面的代碼:

 // read file contents 
     var fileContent1 = System.IO.File.ReadAllText("file1.txt"); 
     var fileContent2 = System.IO.File.ReadAllText("file2.txt"); 

     // extract stop-words from first file 
     var words = fileContent1.Split(new char[] { ' ', ',', '.', '\t', ';', '#', '!' }) 
           .Distinct(); 

     // rmeove stop words in file2 
     foreach (var word in words) 
      fileContent2.Replace(word, string.Empty); 

     System.IO.File.WriteAllText("file2.txt", fileContent2); 
+0

它可以工作,但對於大文件來說效率非常低。 –

+0

@AlexanderPetrov True! –