2014-11-14 79 views
0

大家下午好,停用詞過濾不完全工作?

我在C#中運行一個函數,旨在從字符串(如「the,or,it」)中刪除某些「停用詞」,以便它在自然語言處理中更加有用。但是,該功能將由於某種原因不會刪除該單詞的第一個實例。

例如

輸入: 獅子女巫和衣櫃

返回: 獅子女巫和衣櫥(我不使用「和」作爲停止詞,因爲它可以是有用的)

My功能低於:

private void filterStopWords(string textToFilter) 
    { 
     textToFilter.ToLower(); 
     StringBuilder builder = new StringBuilder(textToFilter); 
     for (int i = 0; i < 27; i++) 
     { 
      if (textToFilter.Contains(stopWords[i])) 
      { 
       builder.Replace(stopWords[i], " "); 
      } 
     } 
     filterQueryBox.Text = builder.ToString(); 
    } 

停用詞[]是包含所有我的停用詞的陣列。

在此先感謝您對我的幫助!

+1

'ToLower'方法返回新的字符串實例。您需要分配這些結果當前或新的字符串引用。 –

+0

我明白,但是它並不能解釋爲什麼它刪除了第二個和第三個「the」,但不是第一個? – Aphire

+0

我以爲最開始但我確定它是小寫字母T – Aphire

回答

1

我的猜測是你的停用詞是帶前導和尾隨空白的「the」。 「the」的第一次出現在它前面沒有空白,所以它不匹配。

1

你幾乎有..

  • String.ToLower回報新string實例。您需要將其分配給另一個或相同的字符串引用。
  • StringBuilder.Replace返回新的StringBuilder實例。您需要將其分配給另一個或相同的StringBuilder參考。

而且因爲你第一次使用ToLower不是取代"the",你不應該在你的情況下"the.."一部分。因爲它在您的stopWords數組項中匹配。

static void Main(string[] args) 
{ 
    filterStopWords("The lion the witch and the wardrobe"); 
} 

private static void filterStopWords(string textToFilter) 
{ 
    var stopWords = new [] {"The", "or", "it"}; 
    textToFilter = textToFilter.ToLower(); 
    StringBuilder builder = new StringBuilder(textToFilter); 
    for (int i = 0; i < 3; i++) 
    { 
      if (textToFilter.Contains(stopWords[i])) 
      { 
       builder = builder.Replace(stopWords[i], " "); 
      } 
    } 
    var result = builder.ToString(); 
    Console.WriteLine(result); 
} 

結果會是;

lion w ch and wardrobe