मुझे Azure KeyPhrase API के साथ मिश्रित परिणाम मिल रहे हैं - कभी-कभी सफल (इससे मेरा मतलब 200 परिणाम है) और अन्य मुझे 400 खराब अनुरोध मिल रहे हैं। सेवा का परीक्षण करने के लिए, मैं उनकी NoSQL सेवा पर Azure PDF से सामग्री भेज रहा हूँ।

दस्तावेज़ीकरण कहता है कि प्रत्येक दस्तावेज़ 5k वर्णों तक का हो सकता है। तो उस पर शासन करने के लिए, (मैंने 5k के साथ शुरुआत की) मैं प्रत्येक को अधिकतम 1k वर्णों तक सीमित कर रहा हूं।

मैं इस बारे में अधिक जानकारी कैसे प्राप्त कर सकता हूं कि विफलता का कारण क्या है? मैंने पहले ही पोर्टल की जाँच कर ली है, लेकिन वहाँ बहुत अधिक विवरण नहीं है।

मैं इस समापन बिंदु का उपयोग कर रहा हूं: https://eastus.api। संज्ञानात्मक.microsoft.com/text/analytics/v2.0/keyPhrases

कुछ नमूना विफलताएं:

  • {"दस्तावेज़":[{"भाषा":"en",,"id":1,,"text":"डेविड चैपल Microsoft Azure पर NoSQL को समझना Microsoft Corporation द्वारा प्रायोजित कॉपीराइट © 2014 चैपल एंड एसोसिएट्स"}]}

  • {"दस्तावेज़":[{"भाषा":"en",,"id":1,,"text":"3 संबंधपरक तकनीक दशकों से डेटा के साथ काम करने का प्रमुख तरीका रहा है। आमतौर पर संरचित क्वेरी भाषा (एसक्यूएल) का उपयोग करके पहुँचा जाता है। , संबंधपरक डेटाबेस अविश्वसनीय रूप से उपयोगी हैं। और जैसा कि उनकी लोकप्रियता से पता चलता है, उन्हें कई अलग-अलग स्थितियों में लागू किया जा सकता है। लेकिन संबंधपरक तकनीक हमेशा सबसे अच्छा तरीका नहीं है। मान लीजिए कि आपको बहुत बड़ी मात्रा में डेटा के साथ काम करने की आवश्यकता है, उदाहरण के लिए, बहुत अधिक एक ही मशीन पर स्टोर करने के लिए। कई सर्वरों (भौतिक या आभासी) पर प्रभावी ढंग से काम करने के लिए रिलेशनल तकनीक को स्केल करना चुनौतीपूर्ण हो सकता है। या मान लें कि आपका एप्लिकेशन डेटा के साथ काम करता है जो कि रिलेशनल सिस्टम के लिए स्वाभाविक रूप से फिट नहीं है, जैसे कि जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) दस्तावेज़ डेटा को रिलेशनल टेबल में शूहोर्न करना संभव है, लेकिन इस तरह की जानकारी के साथ काम करने के लिए स्पष्ट रूप से डिज़ाइन की गई स्टोरेज तकनीक सरल हो सकती है। इस तरह की समस्याओं को दूर करने के लिए NoSQL तकनीकों का निर्माण किया गया है। जैसा कि नाम से पता चलता है, लेबल में कई तरह के स्टोरेज शामिल हैं"}]}

** मेरा त्वरित/गंदा पीओसी कोड जोड़ा गया ***

List<string> sendRequest(object data)
    {
        string url = "https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases";
        string key = "api-code-here";
        string hdr = "Ocp-Apim-Subscription-Key";
        var wc = new WebClient();
        wc.Headers.Add(hdr, key);
        wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");

        TextAnalyticsResult results = null;

        string json = JsonConvert.SerializeObject(data);
        try
        {
            var bytes = Encoding.Default.GetBytes(json);
            var d2 = wc.UploadData(url, bytes);
            var dataString = Encoding.Default.GetString(d2);
            results = JsonConvert.DeserializeObject<TextAnalyticsResult>(dataString);                
        }
        catch (Exception ex)
        {
            var s = ex.Message;
        }
        System.Threading.Thread.Sleep(125);

        if (results != null && results.documents != null)
            return results.documents.SelectMany(x => x.keyPhrases).ToList();
        else
            return new List<string>();
    }

के द्वारा बुलाया गया:

foreach (var k in vals)
        {
            data.documents.Clear();
            int countSpaces = k.Count(Char.IsWhiteSpace);
            if (countSpaces > 3)
            {
                if (k.Length > maxLen)
                {
                    var v = k;
                    while (v.Length > maxLen)
                    {
                        var tmp = v.Substring(0, maxLen);
                        var idx = tmp.LastIndexOf(" ");
                        tmp = tmp.Substring(0, idx).Trim();
                        data.documents.Add(new
                        {
                            language = "en",
                            id = data.documents.Count() + 1,
                            text = tmp
                        });
                        v = v.Substring(idx + 1).Trim();

                        phrases.AddRange(sendRequest(data));
                        data.documents.Clear();
                    }

                    data.documents.Add(new
                    {
                        language = "en",
                        id = data.documents.Count() + 1,
                        text = v
                    });
                    phrases.AddRange(sendRequest(data));
                    data.documents.Clear();
                }
                else
                {
                    data.documents.Add(new
                    {
                        language = "en",
                        id = 1,
                        text = k
                    });

                    phrases.AddRange(sendRequest(data));
                    data.documents.Clear();
                };
            }             
        }
0
Carol AndorMarten Liebster 2 जिंदा 2018, 21:01

2 जवाब

सबसे बढ़िया उत्तर

इस लाइन को बदलने का प्रयास करें

var bytes = Encoding.Default.GetBytes(json);

प्रति

var bytes = Encoding.UTF8.GetBytes(json);
1
Maria Ines Parnisari 3 जिंदा 2018, 06:45

मैंने दस्तावेज़ के नमूने का उपयोग करके मैन्युअल रूप से कुछ अनुरोध बनाए हैं जो आपने इंगित किए थे कि उनमें त्रुटियां थीं और उन्हें सेवा द्वारा सही ढंग से संसाधित किया गया था और मुख्य वाक्यांशों को वापस कर दिया गया था। तो एक एन्कोडिंग समस्या की संभावना दिखती है।

भविष्य में, आप सेवा द्वारा लौटाई गई आंतरिक त्रुटि को भी देख सकते हैं। आमतौर पर आपको कुछ और विवरण दिखाई देंगे जैसे नीचे दिए गए प्रतिक्रिया नमूने में।

{
  "code": "BadRequest",
  "message": "Invalid request",
  "innerError": {
    "code": "InvalidRequestContent",
    "message": "Request contains duplicated Ids. Make sure each document has a unique Id."
  }
}

साथ ही, टेक्स्ट एनालिटिक्स के लिए एक .NET SDK है जो सेवा को कॉल करने को आसान बनाने में मदद कर सकता है। https://github. com/Azure/azure-rest-api-specs/tree/current/specification/cognitiveservices/data-plane/TextAnalytics

3
Brian Smith - MSFT 3 जिंदा 2018, 20:23