下午好,
我在C#中运行一个功能,旨在删除某些"停用词"来自一个字符串,如" the,or,it"所以它在自然语言处理中会更有用。但是,该功能由于某种原因不会删除该单词的第一个实例。
例如
输入: 狮子女巫和衣柜
返回: 狮子女巫和衣柜(我没有使用'和'作为禁用词,因为它可能有用)
我的功能如下:
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();
}
Stopwords []是一个包含我所有停用词的数组。
提前感谢任何可能对我有帮助的回复!
答案 0 :(得分: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
答案 1 :(得分:1)
我的猜测是你的禁用词是带有前导和尾随空白的“the”。第一次出现的“the”在它前面没有空白,所以它不匹配。