Я придумал метод, приведенный ниже, который нацелен на разбиение текста переменной длины на массив слов для дальнейшей обработки полнотекстового индекса (удаление стоп-слов, за которым следует стеммер).Результаты, кажется, в порядке, но я хотел бы услышать мнения, насколько надежна эта реализация по отношению к текстам на разных языках.Вы бы порекомендовали использовать для этого регулярное выражение?Обратите внимание, что я отказался от использования String.Split (), потому что это потребовало бы, чтобы я пропустил список всех известных разделителей, чего я и хотел избежать, когда писал функцию
PS: Iне может использовать полноценный полнотекстовый поисковый движок, такой как Lucene.Net, по нескольким причинам (Silverlight, Overkill для масштаба проекта и т. д.).
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();
}