MS Text Analytics Cognitive Service: как работать с локальной базой данных? - PullRequest
1 голос
/ 20 марта 2020

Microsoft предоставляет сервис для анализа текстовых данных, который называется Text Analytics Cognitive Service.

Возможно ли использовать этот сервис с локальной базой данных? то есть не в Azure

Я работаю с некоторыми большими базами данных, и мне может быть интересно использовать его для: Обнаружения языка Извлечение ключевой фразы Named Entity распознавание Анализ настроений

1 Ответ

1 голос
/ 20 марта 2020

Как только вы извлекаете данные, которые вы хотели бы определить их язык из вашей локальной базы данных, вам просто нужно получить их, а затем просто передать ниже метод. Это будет анализ вашего значения в ответ.

API Access Keys:

        private static readonly string endpointKey = "YourEndPonitKey";
        private static readonly string endpoint = "https://YourServiceURL.cognitiveservices.azure.com/text/analytics/v2.1/languages";

Code Snippet:

    public async Task<object> DetectLanguageAsync(string InputFromDbOrUser)
    {
        try
        {
            DetectedLanguageResponseModel ObjDitectedLanguageResponse = new DetectedLanguageResponseModel();
            //Create laguage detection request param
            RequestModel objRequestModel = new RequestModel();
            objRequestModel.id = "1";
            objRequestModel.text = InputFromDbOrUser;

            //Made Document List
            List<RequestModel> Objdocuments = new List<RequestModel>();
            Objdocuments.Add(objRequestModel);
            //Bind Request Model
            LanguageDetection objRequestList = new LanguageDetection();
            objRequestList.documents = Objdocuments;

            // Bind and Serialize Request Object 
            var serializedObject = JsonConvert.SerializeObject(objRequestList);

            // Call Language Detection API   
            using (var client = new HttpClient())
            using (var request = new HttpRequestMessage())
            {
                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(endpoint);
                request.Content = new StringContent(serializedObject, Encoding.UTF8, "application/json");
                request.Headers.Add("Ocp-Apim-Subscription-Key", endpointKey);

                var response = await client.SendAsync(request);

                //Check status code and retrive response

                if (response.IsSuccessStatusCode)
                {

                    ResponseModel objResponse = JsonConvert.DeserializeObject<ResponseModel>(await response.Content.ReadAsStringAsync());
                    //Check Response List
                    foreach (var item in objResponse.documents)
                    {

                        //Checkings Empty Response and Return to Caller
                        if (objResponse.documents != null)
                        {
                            ObjDitectedLanguageResponse.Language = objResponse.documents[0].detectedLanguages[0].name;
                            return ObjDitectedLanguageResponse;
                        }
                        else
                        {
                            return "Sorry, I am not able to find a related topic! Would you like me to Bing Search?";
                        }

                    }


                }
                else
                {
                    var result_string = await response.Content.ReadAsStringAsync();
                    return result_string;
                }
            }
            return ObjDitectedLanguageResponse;
        }
        catch (Exception ex)
        {
            throw new NotImplementedException(ex.Message, ex.InnerException);
        }

    }

Class Used:

public class DetectedLanguage
    {
        public string name { get; set; }
        public string iso6391Name { get; set; }
    }

    public class DetectedLanguageResponseModel
    {
        public dynamic Language { get; set; }
    }

    public class LanguageDetection
    {
        public List<RequestModel> documents { get; set; }
    }

    public class RequestModel
    {
        public string id { get; set; }
        public string text { get; set; }
    }
    public class ResponseDocument
    {
        public string id { get; set; }
        public List<DetectedLanguage> detectedLanguages { get; set; }
    }
    public class ResponseModel
    {
        public List<ResponseDocument> documents { get; set; }
        public List<object> errors { get; set; }
    }

Примечание: Текущее ограничение составляет 5120 символов для каждого документа; если вам нужно проанализировать большие документы, вы можете разбить их на более мелкие куски, чтобы узнать больше. официальный документ

Надеюсь, что это поможет. Если вам нужна дополнительная помощь по внедрению , пожалуйста, посмотрите здесь

...