以文化中立的方式将字符串分割成单词

4
我想出了以下方法,旨在将长度可变的文本拆分为单词数组,以进行全文索引处理(停用词去除,然后是词干提取)。结果似乎还可以,但我想听听对不同语言的文本如何可靠地实现此方法的意见。您会推荐使用正则表达式吗?请注意,我选择不使用String.Split(),因为那将要求我传递所有已知分隔符的列表,而这正是我编写该函数时试图避免的。
附注:由于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();
}
1个回答

3

你说要用文化中立的方式,我真的怀疑正则表达式(单词边界:\b)是否可行。我查了一下谷歌,发现了这个。希望它有用。
我很惊讶Java中竟然没有内置的BreakIterator等效工具...


这个链接非常有帮助。谢谢! - Oliver Weichhold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接