我想出了以下方法,旨在将长度可变的文本拆分为单词数组,以进行全文索引处理(停用词去除,然后是词干提取)。结果似乎还可以,但我想听听对不同语言的文本如何可靠地实现此方法的意见。您会推荐使用正则表达式吗?请注意,我选择不使用String.Split(),因为那将要求我传递所有已知分隔符的列表,而这正是我编写该函数时试图避免的。
附注:由于Silverlight和项目范围过大等原因,我无法使用像Lucene.Net这样的完整全文搜索引擎。
附注:由于Silverlight和项目范围过大等原因,我无法使用像Lucene.Net这样的完整全文搜索引擎。
public string[] SplitWords(string Text)
{
bool inWord = !Char.IsSeparator(Text[0]) && !Char.IsControl(Text[0]);
var result = new List<string>();
var sbWord = new StringBuilder();
for (int i = 0; i < Text.Length; i++)
{
Char c = Text[i];
// non separator char?
if(!Char.IsSeparator(c) && !Char.IsControl(c))
{
if (!inWord)
{
sbWord = new StringBuilder();
inWord = true;
}
if (!Char.IsPunctuation(c) && !Char.IsSymbol(c))
sbWord.Append(c);
}
// it is a separator or control char
else
{
if (inWord)
{
string word = sbWord.ToString();
if (word.Length > 0)
result.Add(word);
sbWord.Clear();
inWord = false;
}
}
}
return result.ToArray();
}