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");
            } 

ただし、結果は出力ファイルに表示されず、出力ファイルは空のままになります。

4

4 に答える 4

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();
        }

このメソッドは、単語を空白に置き換えるだけで、ストップワードが別の単語の一部である場合は何もしません。

あなたの探求で頑張ってください。

于 2013-03-14T18:35:04.950 に答える
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ファイルがタイムリーに閉じられるように、ストリームを作成するときにステートメントを使用することをお勧めします。

于 2013-03-14T18:29:20.740 に答える
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);
            }
        }
    }
}
于 2013-03-14T18:30:28.943 に答える
0

折り返しStreamWriterと節StreamReaderを試してください。using() {}

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

また、最後に電話することもできますtw.Flush()

于 2013-03-14T18:28:41.540 に答える