我想出了下面的方法,该方法旨在将可变长度的文本拆分为一个单词数组,以进行进一步的全文索引处理(停止单词删除,然后是词干分析器)。结果似乎还可以,但我想听听这种实施对不同语言文本的可靠性。你会建议使用正则表达式吗?请注意,我选择不使用String.Split(),因为这需要我传递所有已知分隔符的列表,这正是我在编写函数时试图避免的内容
P.S:我不能使用像Lucene.Net那样的全文搜索引擎,原因有多种(Silverlight,Overkill for project scope等)。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();
}
答案 0 :(得分:3)
既然你用文化中立的方式说,我真的怀疑正则表达式(单词边界:\ b)是否会这样做。我用Google搜索了一下,发现this。希望它会有用。
我很惊讶没有内置的Java BreakIterator等效...