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

标签 python node.js ibm-watson watson personality-insights

我正在使用 Watson Personality Insights 从文本正文中获取结果。我从 Node.js Personality Insights 演示中获得的结果与使用 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
                }]
            }

两者的输入文件是相同的:

Operations at ports in the U.S. 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 U.S. 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 U.S. 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 API 建议使用参数:Accept: application/json,因为这是 response 所需的内容类型,您可以选择 CSVJSON 格式。

例如:

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 的示例中,您仅设置打印配置文件,而不是使用缩进来获取基本的 pretty-print 结果(如 Node 返回)。 我认为可能是您的返回问题。

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

我使用 Python 完成了 API 引用中的示例和 Node ,并且我得到了相同的结果

使用 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 的 Node 示例:

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 - Python 和 Node.js 的不同 WPI v3 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169213/

相关文章:

Python 3 项目间导入不起作用

javascript - 通过 XHR 对客户端进行流式处理 Node.js 响应

node.js - Baucis - 找不到路由器文档方法

python - 从 Python 调用 IBM Watson 的 update_intent 函数给出 "Invalid Request Body"

chatbot - 我应该使用 IBM Watson Conversation 或 Discovery 做什么?

java - 如何让 Watson Conversation Api 在用户输入时调用 Web 应用程序 Url?

python - 输出 : functions vs. 分配给变量的函数

Python 属性和描述符

python - 转换数组列表

javascript - Node.js 支持什么 ECMAScript 版本?