示例#1
0
        public override AzureDocumentsList <LanguagesResponseDocument> AnalyzeDocuments <LanguagesResponseDocument>(AzureDocumentsList <RequestDocument> documents)
        {
            HttpResponseMessage response = this.CallApi(documents).Result;
            string responseContentString = response.Content.ReadAsStringAsync().Result;
            AzureDocumentsList <LanguagesResponseDocument> responseContent = JsonConvert.DeserializeObject <AzureDocumentsList <LanguagesResponseDocument> >(responseContentString);

            return(responseContent);
        }
示例#2
0
        protected async Task <HttpResponseMessage> CallApi(AzureDocumentsList <RequestDocument> documents)
        {
            //var httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
            //httpWebRequest.ContentType = "application/json";
            //httpWebRequest.Method = "POST";
            //httpWebRequest.Accept = "application/json";
            //httpWebRequest.Headers.Add("Ocp-Apim-Subscription-Key", "92a9360b7d654314bffeba9ef388de67");

            var request = new HttpRequestMessage()
            {
                RequestUri = requestUri,
                Method     = HttpMethod.Post
            };

            request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            //request.Headers.Add("ContentType", "application/json");
            request.Headers.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("UTF-8"));
            request.Headers.Add("Ocp-Apim-Subscription-Key", "92a9360b7d654314bffeba9ef388de67");
            request.Content = new StringContent(JsonConvert.SerializeObject(documents), Encoding.UTF8, "application/json");

            HttpResponseMessage responseMessage = await client.SendAsync(request);

            return(responseMessage);
        }
示例#3
0
 public override AzureDocumentsList <T> AnalyzeDocuments <T>(AzureDocumentsList <RequestDocument> documents)
 {
     throw new NotImplementedException();
 }
示例#4
0
 public abstract AzureDocumentsList <T> AnalyzeDocuments <T>(AzureDocumentsList <RequestDocument> documents) where T : ResponseDocument;
        public AzureDocumentsList <U> AnalyzeArticles(List <Article> articles)
        {
            AzureDocumentsList <U>     result = new AzureDocumentsList <U>();
            Dictionary <string, U>     articlePartDocumentDictionary = new Dictionary <string, U>();
            Dictionary <string, Error> articlePartErrorDictionary    = new Dictionary <string, Error>();

            // TODO break apart the text parts as seperate documents since they all add to the document limit
            List <Article> splitArticles = new List <Article>();

            foreach (Article article in articles)
            {
                articlePartDocumentDictionary.Add(article.Id, new U()
                {
                    id = article.Id
                });
                articlePartErrorDictionary.Add(article.Id, new Error()
                {
                    id = article.Id
                });

                List <string> articleTextParts = article.Content.GetTextParts();
                int           textPartCount    = 1;
                foreach (string articleTextPart in articleTextParts)
                {
                    splitArticles.Add(
                        new Article()
                    {
                        Id = String.Concat(article.Id, "-", textPartCount),
                        //Id = article.Id + textPartCount,
                        Content = new ArticleContent
                        {
                            text = articleTextPart
                        }
                    }
                        );
                    textPartCount++;
                }
            }

            for (int i = 0; i < splitArticles.Count; i += mDocumentLimit)
            {
                IEnumerable <Article> postable = splitArticles.Skip(i).Take(mDocumentLimit);

                List <RequestDocument> documents = postable.Select(x => new RequestDocument()
                {
                    id = x.Id, text = x.Content.text
                }).ToList();

                if (mLastRequestTime != null)
                {
                    double secondsSinceLastCall = (mLastRequestTime - DateTime.Now).TotalSeconds;

                    if (secondsSinceLastCall > 0 && (secondsSinceLastCall < mCallsPerSecond))
                    {
                        Thread.Sleep((int)Math.Round(mCallsPerSecond - secondsSinceLastCall, 0));
                    }
                }

                mLastRequestTime = DateTime.Now;
                var analysisResults = mRequester.AnalyzeDocuments <U>(new AzureDocumentsList <RequestDocument>
                {
                    documents = documents
                });

                // Combine broken parts of articles to a single result document/error for each article
                foreach (var analysisResultDoc in analysisResults.documents)
                {
                    string id  = analysisResultDoc.id.Substring(0, analysisResultDoc.id.LastIndexOf("-"));
                    var    doc = articlePartDocumentDictionary[id];
                    if (doc != null)
                    {
                        doc.AddResponseData(analysisResultDoc);
                    }
                }

                foreach (var analysisResultError in analysisResults.errors)
                {
                    string id    = analysisResultError.id.Substring(0, analysisResultError.id.LastIndexOf("-"));
                    var    error = articlePartErrorDictionary[id];
                    if (error != null)
                    {
                        error.message = String.Concat(error.message, Environment.NewLine, analysisResultError.message);
                    }
                }

                //documentParts.AddRange(analysisResult.documents);
                //errorParts.AddRange(analysisResult.errors);
            }

            result.documents.AddRange(articlePartDocumentDictionary.Select(x => x.Value).ToList());
            result.errors.AddRange(articlePartErrorDictionary.Where(x => !String.IsNullOrEmpty(x.Value.message)).Select(x => x.Value).ToList());


            //result.documents.AddRange(analysisResult.documents);
            //result.errors.AddRange(analysisResult.errors);

            return(result);
        }