コード例 #1
0
ファイル: AlchemyExecutor.cs プロジェクト: RavenB/SemantAPI
        public void Execute(AnalysisExecutionContext context)
        {
            _context = context;

            if (context.Results.Count <= 0)
            {
                context.OnExecutionProgress("Alchemy", new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Canceled, 0, 0, 0));
                return;
            }

            AlchemyAPI.AlchemyAPI session = new AlchemyAPI.AlchemyAPI();
            session.SetAPIKey(context.Key);

            AlchemyAPI_TargetedSentimentParams parameters = new AlchemyAPI_TargetedSentimentParams();
            parameters.setOutputMode(AlchemyAPI_BaseParams.OutputMode.XML);

            int processed = 0;
            int failed = 0;
            foreach (KeyValuePair<string, ResultSet> document in context.Results)
            {
                try
                {
                    string strResult = string.Empty;
                    if (context.UseDebugMode)
                    {
                        TimeSpan time = TimeSpan.Zero;
                        strResult = BenchmarkHelper.Invoke(new InvokeBenchmarkHandler(delegate(object state)
                        {
                            return session.TextGetTextSentiment(document.Value.Source, parameters);
                        }), null, out time) as string;

                        Console.WriteLine("\tAlchemyAPI: Sentiment for the document {0} has been retreived. Execution time is: {1}", document.Key, time.TotalMilliseconds);
                    }
                    else
                        strResult = session.TextGetTextSentiment(document.Value.Source, parameters);

                    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(strResult)))
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(AlchemySentimentResult));
                        AlchemySentimentResult result = (AlchemySentimentResult)serializer.Deserialize(stream);

                        processed++;
                        document.Value.AddOutput("Alchemy", result.SentimentDetails.Score, result.SentimentDetails.Type);

                        AnalysisExecutionProgressEventArgs ea = new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Processed, context.Results.Count, processed, failed);
                        context.OnExecutionProgress("Alchemy", ea);

                        if (ea.Cancel)
                            break;
                    }
                }
                catch (Exception ex)
                {
                    failed++;
                    document.Value.AddOutput("Alchemy", 0, "failed");
                    AnalysisExecutionProgressEventArgs ea = new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Failed, context.Results.Count, processed, failed);
                    ea.Reason = ex.Message;
                    context.OnExecutionProgress("Alchemy", ea);

                    if (ea.Cancel)
                        break;
                }
            }

            context.OnExecutionProgress("Alchemy", new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Success, context.Results.Count, processed, failed));
        }