using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using ZeroLevel.Services.Semantic;
namespace ZeroLevel.Implementation.Semantic.Helpers
{
public static class TextAnalizer
{
internal static readonly Regex ReWord = new Regex("\\b[\\wА-Яа-я-’]+\\b",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
///
/// Выделение слов из текста
///
/// Текст
/// Список слов
public static IEnumerable ExtractWords(string text)
{
var result = new List();
foreach (Match match in ReWord.Matches(text))
{
result.Add(match.Value);
}
return result;
}
///
/// Выделение уникальных слов из текста
///
/// Текст
/// Список уникальных слов
public static IEnumerable ExtractUniqueWords(string text)
{
return new HashSet(ExtractWords(text));
}
///
/// Выделение уникальных слов из текста без стоп слов
///
/// Текст
/// Список уникальных слов без стоп слов
public static IEnumerable ExtractUniqueWordsWithoutStopWords(string text)
{
return new HashSet(ExtractUniqueWords(text).Where(w => StopWords.IsStopWord(w) == false));
}
///
/// Выделение токенов из текста
///
/// Текст
/// Список токенов
public static IEnumerable ExtractWordTokens(string text)
{
var result = new List();
foreach (Match match in ReWord.Matches(text))
{
result.Add(new WordToken(match.Value, match.Index));
}
return result;
}
///
/// Выделение уникальных токенов из текста (первое вхождение)
///
/// Текст
/// Список уникальных токенов
public static IEnumerable ExtractUniqueWordTokens(string text)
{
return ExtractWordTokens(text).DistinctBy(t => t.Word);
}
///
/// Выделение уникальных токенов из текста с отбрасыванием стоп-слов
///
/// Текст
/// Список уникальных токенов без стоп слов
public static IEnumerable ExtractUniqueWordTokensWithoutStopWords(string text)
{
return ExtractWordTokens(text).DistinctBy(t => t.Word).Where(t => StopWords.IsStopWord(t.Word) == false);
}
}
}