public TextResult Execute(TextInput input, IJapaniseTextClassifierExecuteConfig config)
        {
            var result = new TextResult()
            {
                Config = config,
                Input  = input,
            };

            result.NormalizedText = GetNormalizer(config.NormalizerName).Normalize(input.RawText);
            result.TranslatedText = GetTransrator(config.TranslatorName).Translate(result.NormalizedText);
            result.Categories     = GetClassifier(config.ClassifierName).Classify(result.TranslatedText);

            // XXX はじめから全般に非同期で書けばよかった
            // XXX レートリミット対応は各実装で閉じさせる&非同期メソッドにしたいね
            Task.Delay(TimeSpan.FromSeconds(1)).Wait();

            return(result);
        }
 public IEnumerable <TextResult> ExecuteBulk(IEnumerable <TextInput> inputs, IJapaniseTextClassifierExecuteConfig config)
 {
     return(inputs.Select(x =>
     {
         //
         try
         {
             return Execute(x, config);
         }
         catch (Exception ex)
         {
             // 死ぬときは独りさ
             _logger.LogError(ex, $"Ecexute fail. Input = {JsonConvert.SerializeObject(x)}");
             return new TextResult()
             {
                 Config = config,
                 Input = x,
                 Categories = new Category[] { },
                 HasError = true,
             };
         }
     }));
 }