我有一个需要从字符串中删除的停用词列表。
List<string> stopwordsList = stopwords.getStopWordList();
string text = PDF.getText();
foreach (string stopword in stopwordsList)
{
text = text.Replace(stopword, "");
}
PDF.setText(text);
..在调试中我可以看到正确填充了stopwordsList,但似乎text.Replace()
没有任何效果。
我做错了什么?
编辑:注意我自己也尝试了text.Replace()
,而不是text = text.Replace()
。都没有工作。
答案 0 :(得分:2)
虽然我认为您的代码没有任何问题,但我会做这样的事情。
string someText = "this is some text just some dummy text Just text";
List<string> stopwordsList = new List<string>() { "some", "just", "text" };
someText = string.Join(" ", someText.Split().Where(w => !stopwordsList.Contains(w, StringComparer.InvariantCultureIgnoreCase)));
如果套管很重要,你可以忽略StringComparer.InvariantCultureIgnoreCase
部分。
注意我自己也尝试过text.Replace(),而不是text = text.Replace()
你应该知道,如果你想要更新的字符串,Replace函数会返回应该处理的字符串。所以你现在基本上就是这样做的。即text = text.Replace()
答案 1 :(得分:2)
虽然有一个问题......所有以前的解决方案都没有考虑到字边界。例如,单词'hell'可能是一个坏词,但'hello'这个词完全有效。此外,更换应仅在完整的单词上进行,否则您可能会得到奇怪的结果。
以下是考虑字边界的代码:
var text = "Hello world, this is a great test!";
var badWords = new List<string>()
{
"Hello",
"great"
};
var wordMatches = Regex.Matches(text, "\\w+")
.Cast<Match>()
.OrderByDescending(m => m.Index);
foreach (var m in wordMatches)
if (badWords.Contains(m.Value))
text = text.Remove(m.Index, m.Length);
Debug.WriteLine(text);