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); } } }