2016-11-27 2 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 «стоп-слова». Прокрутите «слова», напишите все, что не содержится в «стоп-словах» для арабского. –

+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. Iterate извлеченного слова из первого файла и заменить их String.Empty в содержании 2-го файла.
  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

@ Александр Петров Правда! –

 Смежные вопросы

  • Нет связанных вопросов^_^