using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BotSharp.NLP.Tokenize { /// /// BotSharp Tokenizer Factory /// Tokenizers divide strings into lists of substrings. /// The particular tokenizer requires implement interface /// models to be installed.BotSharp.NLP also provides a simpler, regular-expression based tokenizer, which splits text on whitespace and punctuation. /// public class TokenizerFactory where ITokenize : ITokenizer, new() { private SupportedLanguage _lang; private ITokenize _tokenizer; private TokenizationOptions _options; public TokenizerFactory(TokenizationOptions options, SupportedLanguage lang) { _lang = lang; _options = options; _tokenizer = new ITokenize(); } public List Tokenize(string sentence) { return _tokenizer.Tokenize(sentence, _options); } public List> Tokenize(List sentences) { var sents = sentences.Select(s => new ParallelToken { Text = s }).ToList(); Parallel.ForEach(sents, (sentence) => { sentence.Tokens = Tokenize(sentence.Text); }); List> result = new List>(); sents.ForEach(x => result.Add(x.Tokens)); return result; } private class ParallelToken { public String Text { get; set; } public List Tokens { get; set; } } } }