Python和Node.js不同的WPI v3结果

我正在使用Watson Personality Insights来获取文本的结果。 我从Node.js个性洞察演示获得的结果与使用Python SDK时得到的结果不同。

Python脚本:

with open('input_file.txt', encoding='utf-8') as input_file: profile = personality_insights.profile( input_file.read(), content_type='text/plain;charset=utf-8', raw_scores=True, consumption_preferences=True) print(profile) 

Python输出:(仅添加适宜性分数以保持字符限制)

 { "trait_id": "big5_agreeableness", "name": "Agreeableness", "category": "personality", "percentile": 0.2641097108346445, "raw_score": 0.717124182764663, "children": [{ "trait_id": "facet_altruism", "name": "Altruism", "category": "personality", "percentile": 0.5930367181429955, "raw_score": 0.7133462509414262 }, { "trait_id": "facet_cooperation", "name": "Cooperation", "category": "personality", "percentile": 0.49207238025136585, "raw_score": 0.5781918028043768 }, { "trait_id": "facet_modesty", "name": "Modesty", "category": "personality", "percentile": 0.7504251965616365, "raw_score": 0.4840369062774408 }, { "trait_id": "facet_morality", "name": "Uncompromising", "category": "personality", "percentile": 0.4144135962141314, "raw_score": 0.6156094284542545 }, { "trait_id": "facet_sympathy", "name": "Sympathy", "category": "personality", "percentile": 0.8204286367393345, "raw_score": 0.6984933017082747 }, { "trait_id": "facet_trust", "name": "Trust", "category": "personality", "percentile": 0.5357101531393991, "raw_score": 0.5894943830064112 } ] } 

Node.js脚本:

 fs.readFile('input_file.txt', 'utf-8', function (err,data) { var params={}; params.text=data; params.content_type='text/plain; charset=utf-8'; params.raw_scores=true; params.consumption_preferences=true; personality_insights.profile(params, function(error, response) { console.log(JSON.stringify(response)); }); }); 

Node.js输出:

 { "id": "Agreeableness", "name": "Agreeableness", "category": "personality", "percentage": 0.2798027409516949, "sampling_error": 0.101059064, "children": [{ "id": "Altruism", "name": "Altruism", "category": "personality", "percentage": 0.597937110939136, "sampling_error": 0.07455418080000001 }, { "id": "Cooperation", "name": "Cooperation", "category": "personality", "percentage": 0.46813215597029234, "sampling_error": 0.0832951302 }, { "id": "Modesty", "name": "Modesty", "category": "personality", "percentage": 0.7661123497302398, "sampling_error": 0.0594182198 }, { "id": "Morality", "name": "Uncompromising", "category": "personality", "percentage": 0.42178661415240626, "sampling_error": 0.0662383546 }, { "id": "Sympathy", "name": "Sympathy", "category": "personality", "percentage": 0.8252000440378008, "sampling_error": 0.1022423736 }, { "id": "Trust", "name": "Trust", "category": "personality", "percentage": 0.5190032062613837, "sampling_error": 0.0600995984 }] } 

两者的input文件是相同的:

 Operations at ports in the US Southeast are shut as the region copes with the changing path of one hurricane even as another is churning toward the region. Hurricane Irma was downgraded to a Category 1 storm as it pushed up through western and central Florida, the WSJ's Arian Campo-Flores and Joseph De Avila report. That put the Port Tampa Bay in its path but left major trade gateways on the Atlantic coast, including Jacksonville, Georgia's Port of Savannah and South Carolina Port of Charleston largely outside the storm's strongest force. The second Category 4 storm to reach the US this season lashed the Miami area with powerful winds and sheets of rain, and both Florida coasts were preparing for severe storm surges and flooding as it headed north and likely toward Georgia. With the storm following so soon after Hurricane Harvey hit the Gulf Coast and a third storm, Jose, heading north, the US issued a rare waiver of the Jones Act, the federal law that prohibits foreign ships from operating in domestic sea routes, the WSJ's Costas Paris reports. The action will allow foreign tankers to distribute fuel to hurricane-stricken areas. 

从这两种方法得到的价值是不一致的。 当content_type=text/plain时,两个脚本的值是相同的,但charset=utf-8属性的添加似乎对通过Python代码接收的结果没有影响。

正如你所看到的,当参数设置为text / plain时,Watson APIbuild议使用param: Accept: application/json因为是所需的response内容types,可以selectCSVJSON格式。

例如:

 profile(text, content_type='text/plain', content_language=None, accept='application/json', accept_language=None, raw_scores=False, consumption_preferences=False, csv_headers=False) 

重要提示:在你使用Python的例子中,你只是设置print profile ,而不是使用indent来获得基本的漂亮打印结果,如节点返回。 我想也许这是你的回报问题。

所以尝试使用print(json.dumps(profile, indent=2))而不是print(profile)

我使用Python和Node的API Reference做了一个例子,得到了相同的结果

使用Personality Insight的Python示例:

 personality_insights = PersonalityInsightsV3( version='2016-10-20', username='{username}', password='{password}') with open(join(dirname(__file__), './profile.json')) as profile_json: profile = personality_insights.profile( profile_json.read(), content_type='application/json', raw_scores=True, consumption_preferences=True) print(json.dumps(profile, indent=2)) 

使用Personality Insight的节点示例:

 var PersonalityInsightsV3 = require('watson-developer-cloud/personality-insights/v3'); var personality_insights = new PersonalityInsightsV3({ username: '{username}', password: '{password}', version_date: '2016-10-20' }); var params = { // Get the content items from the JSON file. content_items: require('./profile.json').contentItems, consumption_preferences: true, raw_scores: true, headers: { 'accept-language': 'en', 'accept': 'application/json' } }; personality_insights.profile(params, function(error, response) { if (error) console.log('Error:', error); else console.log(JSON.stringify(response, null, 2)); } ); 
  • 用Python返回JSON的参考。
  • 使用Personality Insights的API参考 。