内容


向 Watson 询问 Twitter 提供的信息,第 2 部分

分析推文文本中的情绪

Comments

系列内容:

此内容是该系列 4 部分中的第 # 部分: 向 Watson 询问 Twitter 提供的信息,第 2 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:向 Watson 询问 Twitter 提供的信息,第 2 部分

敬请期待该系列的后续内容。

本系列第 1 部分中,您在 Bluemix 上创建了一个 Python Web 应用程序,并从 Twitter 采集了实时推文。您已经将推文文本保存到一个文本文件中。在本教程中,将会更进一步,将 Watson Tone Analyzer 服务添加到您的应用程序,并使用该服务评估您所收集的文本中的情绪。

构建您的应用程序需要做的准备工作

运行应用程序获取代码

备注:示例应用程序没有指定密码,所以无需在这里输入密码就可以启动 iPython IDE。单击 Log in。您将被转到应用程序的登录页,该登录页是一个 iPython 框架。

1

将 Watson Tone Analyzer 服务添加到您的应用程序

您需要先将 Watson Tone Analyzer 服务添加到您的 Bluemix 开发空间。

  1. 登录到 Bluemix。
  2. 单击 服务
  3. 在目录页面上,找到并单击 Watson 下的 Tone Analyzer 服务。Tone Analyzer 服务允许您每月免费执行 1000 次 API 调用;后续 API 调用会按照显示的价格进行收费。Tone Analyzer 服务
    Tone Analyzer 服务
  4. 保留该服务未与任何应用程序绑定,接受系统生成的服务和凭证名称,确保选择了标准计划,然后单击 创建。该服务已添加到您的 Bluemix 空间,作为 Services 下的一条。
  5. 创建成功后,花点时间阅读 管理 页面上显示的服务信息。然后单击 服务凭证。凭证将以 JSON 对象的形式显示。记下用户名和密码。以后的步骤中需要这些凭证。
  6. 将 Watson Developer Cloud 库添加到应用程序的 requirements.txt 文件中。您将使用此库对 Tone Analyzer 发出 API 调用。
    1. 如果您没有备份第 1 部分中创建的笔记本,请执行该备份。该笔记本包含您用于采集推文的代码。更改 requirements.txt 文件并重新部署您的应用程序后,该笔记本将会丢失,所以请备份该笔记本,或将代码保存为您本地驱动器上的一个 .py 文件中。
    2. 在仪表板中,单击您应用程序,然后单击 编辑代码。当 Web 编辑器打开时,加载 requirements.txt 文件并添加一个 watson-developer-cloud 条目。requirements.txt 文件条目
    3. 将更改提交和推送到您的 Git 存储库的远程分支。构建和部署管道应该自动启动。等待应用程序重新启动。

现在,已为您的应用程序启用了 Watson 的语气分析服务。要获得 Watson Developer Cloud 服务的更多信息,请参阅文档客户端库

2

连接到 Tone Analyzer 并获得分析结果

接下来,将您第 1 部分中生成的推文文本文件提供给 Tone Analyzer,获得文本中所表达情感的评分。

  1. 打开您应用程序的登录页面(您应用程序的 URL 显示在应用程序的概述页面上),然后打开一个新笔记本。
  2. 在一个笔记本单元中运行以下代码,以便向 Tone Analyzer 服务验证您自己。导入 Watson Developer Cloud 库并提供 Tone Analyzer 服务凭证。
    from watson_developer_cloud import ToneAnalyzerV3
    
    u_name = raw_input('[Tone analysis] Enter the user name: ')
    p_wd = raw_input('[Tone analysis] Enter the password: ')
    
    tone_analyzer = ToneAnalyzerV3(
       username=u_name,
       password=p_wd,
       version='2016-02-11')

    如果身份验证成功,该单元应该没有输出。

  3. 编写代码来向 Tone Analyzer 发出 GET 调用,方法是将推文文件读入到一个文本字符串中,并将此文本字符串作为输入参数提供给 Tone Analyzer。将响应保存到一个文件,以便可以离线处理响应。以下是一个示例代码段;请将第一行上的文件名称(tweets_text.txt)替换为您在第 1 部分中保存文件时所使用的名称。
    tweetfile = open("./static/tweets_text.txt", "r")
    demo_text = tweetfile.read()
    tweetfile.close()
    
    import json
    toneanalysis = json.dumps(tone_analyzer.tone(text=demo_text))
    tonefile = open("./static/tone.json", "w")
    print  >> tonefile, toneanalysis
    tonefile.close()

    您通过 tone 方法的 text 参数向 Tone Analyzer 服务发出了一次调用。此服务的所有 API 端点都文档化在 Tone Analyzer API 参考资料中。响应为 JSON 对象形式,包含三种可能的语气类别:情绪(emotion)、书面(writing)和社交(social)。您的文本可能并不是所有类别中都有一个对应条目。针对每个类别的响应可进一步划分:

    • 情绪语气:生气厌恶害怕高兴悲伤
    • 书面语气:分析自信踌躇
    • 社交语气:开放尽责外向随和神经质

    查看 Tone Analyzer 返回的 JSON 对象。

    Tone Analyzer 响应的 JSON 表示

    可以看到分析具有两个级别:文档级别的文本总体分析,以及文本中每个句子的分析。对于三种语气类别中的每一种,响应包含语气的名称和一个表示该语气在文本中所呈现程度的分数。

    Tone Analyzer 响应的 JSON 表示,部分展开

    您可以打印这些分数,查看您收集的推文中表达的情绪。

  4. 编写代码来从 JSON 响应中读取数据并人性化地显示它。下面的代码段打印文档语气的情绪分数。
    t_file = open('./static/tone.json', 'r')
    
    for line in t_file:
        tone = json.loads(line)
        A = tone['document_tone']['tone_categories'][0]['tones'][0]['tone_name']
        A_score = tone['document_tone']['tone_categories'][0]['tones'][0]['score']
        D = tone['document_tone']['tone_categories'][0]['tones'][1]['tone_name']
        D_score = tone['document_tone']['tone_categories'][0]['tones'][1]['score']
        F = tone['document_tone']['tone_categories'][0]['tones'][2]['tone_name']
        F_score = tone['document_tone']['tone_categories'][0]['tones'][2]['score']
        J = tone['document_tone']['tone_categories'][0]['tones'][3]['tone_name']
        J_score = tone['document_tone']['tone_categories'][0]['tones'][3]['score']
        S = tone['document_tone']['tone_categories'][0]['tones'][4]['tone_name']
        S_score = tone['document_tone']['tone_categories'][0]['tones'][4]['score'] 
    
    print A, A_score
    print D, D_score
    print F, F_score
    print J, J_score
    print S, S_score

现在,已完成您采集的推文文本的情绪分析。您可能想进一步分析 Tone Analyzer 响应,查看其他两种语气(书面和社交)在文档级别和句子级别的分析结果。

3

使用柱状图直观地表示文档语气

您可能想分享您的分析结果,但 JSON 对象不便于查看。一种有趣的分享结果的方式是采用语气柱状图。在这一步中,您将使用 matplotlib 绘制一个柱状图。

这一步完全是可选的。即使跳过这一步,教程的其他部分仍将正常执行。

  1. 您希望将生成的图像保存到一个文件,而不是在内部显示。因此,将 matplotlib 后端指定为 agg,方法是在调用 pyplot 库之前使用 matplotlib.use() 指令:
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    import numpy as np
  2. 为您的柱状图创建 X 轴和 Y 轴值。
    emotion_tuple = (A_score, D_score, F_score, J_score, S_score)
    X_axis_legends_tuple = (str(A), str(D), str(F), str(J), str(S))
  3. 生成柱状图并保存它。
    n_groups = 5
    fig, ax = plt.subplots()
    index = np.arange(n_groups)
    bar_width = 0.35
    opacity = 0.4
    rects1 = plt.bar(index, emotion_tuple, bar_width,
                     alpha=opacity,
                     color='b',
                     label='Tone')
    plt.xlabel('Emotional tone')
    plt.ylabel('Scores')
    plt.title('Emotional tones and their scores')
    plt.xticks(index + bar_width, X_axis_legends_tuple)
    plt.legend()
    plt.tight_layout()
    plt.show()
    plt.savefig('./static/emotion_analysis')
    plt.clf()

就这么简单!您已完成了本教程的学习。

结束语

在本教程中,您继续完成了构建一个从 Twitter 获取数据应用程序的过程,然后使用数据获取认知洞察。在第 1 部分中,您在 Bluemix 上创建了一个 Python Web 应用程序,并从 Twitter 采集一些实时推文。您现在已将 Watson Tone Analyzer 服务添加到您的应用程序,并使用该服务评估您收集的文本中的情绪。

情绪柱状图
情绪柱状图

本系列的后续教程中,您将利用其他 Watson 服务来分析可从非文本内容(比如图像)收集的情绪,甚至在这些图像可能不能用文字解释时也能执行该分析。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=认知计算
ArticleID=1043075
ArticleTitle=向 Watson 询问 Twitter 提供的信息,第 2 部分: 分析推文文本中的情绪
publish-date=02212017