【问题标题】:Different WPI v3 results from Python and Node.jsPython 和 Node.js 的不同 WPI v3 结果
【发布时间】:2017-09-12 06:18:54
【问题描述】:

我正在使用 Watson Personality Insights 从文本正文中获取结果。我从 Node.js Personality 洞察演示中获得的结果与我在使用 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 代码接收到的结果产生影响时,两个脚本的值相同。

【问题讨论】:

  • 能否为每个代码示例添加返回值?

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


【解决方案1】:

如您所见,当参数设置为 text/plain 时,Watson API 建议使用参数:Accept: application/json 因为是 response 所需的内容类型,您可以选择 CSV 或 @987654329 @ 格式。

例如:

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 的示例中,您仅将 profile 设置为 print,而不是使用 indent 来获取基本的漂亮打印结果,如 Node 返回。 我想可能是你的退货问题。

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

我使用PythonNode 做了API 参考中的示例,我得到了相同的结果

使用 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));
  }
);

【讨论】:

  • 感谢您的回复。我已经为两者添加了输出。问题似乎与读取输入文件有关,因为即使读取同一个文件,发送到 WPI 的字数也不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
相关资源
最近更新 更多