WatsonException:错误:请求无效:'text'格式无效,代码:400

时间:2017-09-05 19:57:31

标签: python ibm-cloud ibm-watson

当我尝试从IBM blumex运行自然语言理解时,我收到以下错误

WatsonException: Error: invalid request: 'text' is in invalid format, Code: 400

这是我的代码

import json
from watson_developer_cloud import NaturalLanguageUnderstandingV1, NaturalLanguageClassifierV1
import watson_developer_cloud.natural_language_understanding.features.v1 as Features
natural_language_understanding = NaturalLanguageUnderstandingV1(
    username='**********',
    password='********',
    version ="2017-02-27")

response = natural_language_understanding.analyze(
    text= [i for i in str(sentences)],
    features=[Features.Sentiment()])

print(json.dumps(response, indent=2))

这就是句子的样子

["' فينو الاهبل ابن الاهبل '",
 "' على المصرييييين وجمالهم ربنا يحميهم لينك 6 '",
 "' منشن دول كتير اوى ودمهم خفيف العمارة اللي انا فيها كلها سوريين والءطفال عسل '",
 "' انا بعد كده خلى اللى يوعنى بحاجه همضى على وصل امانه علشان اضمن انو مش يخون '",
 "' انا هنتحر '",
 "' في حفظ الله يا ريس لينك 9 '",
 "' يا عيون عطشان عطشانة سهر يا قلوب تعبانة تعبانة سفر كتروا من الحب تلاقوا تلاقوا في الضلمة ءلف قمر '",
 "' زهقنا من اسامي اكونتات البنات على مواقع التواصل الاجتماعي زي مثلا شروق الشمس و الذهب الءزرق و ءي بطيخ و السلام '",
 "' منشن 793 حمد الله ع السلامة '",
 "' منشن07 ءحا مين '",
 "' لما تشوف حد واحشك كان بقالك كتير مشفتوش '"]

如何通过IBM Blumex上的python sdk运行情感分析服务 提前致谢

2 个答案:

答案 0 :(得分:1)

我相信natural_language_understanding.analyze()期望text成为字符串。来自文档(https://www.ibm.com/watson/developercloud/natural-language-understanding/api/v1/?python#post-analyze):

  

“text”属性接受纯文本。

你给它一个清单。此外,您的列表中还有额外的引号,这使得很难简单地将其作为单个字符串连接。

您可以尝试使用ast.literal_eval()评估数组的各个元素,然后将结果合并为一个字符串。

import ast

text = ' '.join([ast.literal_eval(i) for i in sen])

这应该将你的句子数组改成一个字符串:

  

”فينوالاهبلابنالاهبلعلىالمصرييييينوجمالهمربنايحميهملينك6منشندولكتيراوىودمهمخفيفالعمارةالليانافيهاكلهاسوريينوالءطفالعسلانابعدكدهخلىاللىيوعنىبحاجههمضىعلىوصلامانهعلشاناضمنانومشيخوناناهنتحرفيحفظالله ياريسلينك9ياعيونعطشانعطشانةسهرياقلوبتعبانةتعبانةسفركتروامنالحبتلاقواتلاقوافيالضلمةءلفقمرزهقنامناسامياكونتاتالبناتعلىمواقعالتواصلالاجتماعيزيمثلاشروقالشمسوالذهبالءزرقوءيبطيخوالسلاممنشن793حمداللهعالسلامة منشن07ءحامينلماتشوفحدواحشككانبقالككتيرمشفتوش'

如果您想分别分析每个元素,那么您需要在每个元素上调用natural_language_understanding.analyze(),例如:

for tweet in sentences:
    response = natural_language_understanding.analyze(
        text= tweet,
        features=[Features.Sentiment()]
    )
    print(json.dumps(response, indent=2))

答案 1 :(得分:0)

分析文本或网页时,自然语言理解会自动检测源语言并在响应中返回相应的ISO 639-1代码。要使自动语言检测最佳,建议您使用至少包含100个字符的文本

就像@Mark_M所说,你需要设置语言,看看是否有帮助。

一个例子,在您发送给分析的sentence中,您需要使用以下示例:

{
  "text": "...X, Y, Z, now I know my A, B, Cs",
  "features": {
    "semantic_roles": {}
  },
  "language": "en"
}

Obs。:一个好主意是翻译成英语以使用此API的更多功能。

Obs II。:请注意这个答案只是一个补充。

  • 您可以在Supported languages.
  • 中看到Watson NLU文档
  • 请参阅您在JSON对象here内设置的参数。
  • 请参阅使用cURL设置语言的example一个基本示例。