2013-03-14 166 views
0

我想從我的文本文件中刪除停止的話,我寫了下面的代碼用於此目的刪除停用詞從文本文件

TextWriter tw = new StreamWriter("D:\\output.txt"); 
private void button1_Click(object sender, EventArgs e) 
     { 
      StreamReader reader = new StreamReader("D:\\input1.txt"); 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       string[] parts = line.Split(' '); 
       string[] stopWord = new string[] { "is", "are", "am","could","will" }; 
       foreach (string word in stopWord) 
       { 
        line = line.Replace(word, ""); 
        tw.Write("+"+line); 
       } 
       tw.Write("\r\n"); 
      } 

,但它並沒有在輸出文件顯示結果和輸出文件保持空白。

+0

檢查了這一點:-http://stackoverflow.com/questions/10447980/remove-stop-words-from-text-c-sharp – 2013-03-14 18:22:03

+1

你關閉輸出文件StreamWriter? – 2013-03-14 18:22:04

+0

什麼是「零件」? – 2013-03-14 18:22:35

回答

0

嘗試包裝StreamWriterStreamReaderusing() {}條款。

using (TextWriter tw = new StreamWriter(@"D:\output.txt") 
{ 
    ... 
} 

您可能還想在最後打電話tw.Flush()

+0

Thx編輯。 Back-ticks,呃? :) – 2013-03-14 18:45:51

2

以下工作正如我所料。然而,這不是一個好的方法,因爲即使它們是更大的單詞的一部分,它也會刪除停用詞。此外,它不會清除刪除單詞之間的額外空格。

string[] stopWord = new string[] { "is", "are", "am","could","will" }; 

TextWriter writer = new StreamWriter("C:\\output.txt"); 
StreamReader reader = new StreamReader("C:\\input.txt"); 

string line; 
while ((line = reader.ReadLine()) != null) 
{ 
    foreach (string word in stopWord) 
    { 
     line = line.Replace(word, ""); 
    } 
    writer.WriteLine(line); 
} 
reader.Close(); 
writer.Close(); 

另外,我建議使用,當你以確保文件被及時關閉,創建流爲using語句。

+0

Sry,只讀代碼。評論已刪除。 – 2013-03-14 18:50:05

+0

@jonathan:先生這段代碼工作不正常,我想從文本文件中刪除停止詞 – 2013-03-14 20:02:36

+2

這是一個用於詢問技術問題的計算器。我發佈的代碼修復了代碼中的錯誤。爲了給你提供額外的幫助,我還解釋了你正在採取的方法的一些問題。如果您有其他問題,您可能需要發佈另一個問題。但我強烈建議你學習比「不能正常工作」更具體,這絕對不會告訴我你遇到的問題。 – 2013-03-14 20:15:51

1

你應該將你的IO對象封裝在using語句中,以便正確處理它們。

using (TextWriter tw = new TextWrite("D:\\output.txt")) 
{ 
    using (StreamReader reader = new StreamReader("D:\\input1.txt")) 
    { 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      string[] parts = line.Split(' '); 
      string[] stopWord = new string[] { "is", "are", "am","could","will" }; 
      foreach (string word in stopWord) 
      { 
       line = line.Replace(word, ""); 
       tw.Write("+"+line); 
      } 
     } 
    } 
} 
6

的正則表達式可能會爲這項工作是完美的:

 Regex replacer = new Regex("\b(?:is|are|am|could|will)\b"); 
     using (TextWriter writer = new StreamWriter("C:\\output.txt")) 
     { 
      using (StreamReader reader = new StreamReader("C:\\input.txt")) 
      { 
       while (!reader.EndOfStream) 
       { 
        string line = reader.ReadLine(); 
        replacer.Replace(line, ""); 
        writer.WriteLine(line); 
       } 
      } 
      writer.Flush(); 
     } 

這種方法只能用空格代替的話,什麼也不做與禁用詞,如果他們是另一個字的一部分。

祝你好運與你的追求。